当前位置: 首页 > news >正文

GNU 工具链与ARM 交叉编译工具链

一、GNU 工具链常用工具

GNU 工具链(GNU Toolchain)是由 GNU 项目提供的一套跨平台、功能完善的软件开发工具,主要应用于操作系统开发、嵌入式系统开发以及应用软件开发。它包含了从源代码编译到目标程序生成、再到调试和分析的完整流程

(一)gcc

名称:gcc (GNU Compiler Collection)
功能:编译器 (Compiler)

将 C/C++ 等高级语言源代码转换为汇编代码

再将汇编代码转换为目标文件

支持多种编程语言和目标平台(如 C、C++、Fortran、Ada 等)

提供丰富的优化选项和编译控制选项(如 -O1-O2-O3-Os

常用选项:

-c:只编译不链接,生成 .o 文件

-o:指定输出文件名

-Wall:开启常见警告信息

-g:生成调试信息

(二)ld

名称:ld (GNU Linker)
功能:链接器 (Linker)

将多个目标文件(.o 文件)链接成可执行文件

解析和处理符号引用(变量、函数等)

进行地址分配和重定位

处理库文件的链接(静态库 .a,动态库 .so

支持链接脚本(Linker Script),便于嵌入式开发中指定内存布局

(三)objcopy

名称:objcopy (Binary File Converter)
功能:目标文件格式转换器

在不同格式的目标文件之间进行转换(如 ELF → binary)

将 ELF 格式转换为纯二进制格式 .bin(常用于烧录固件)

从目标文件中提取特定的段 (sections),如 .text.data

修改目标文件的内容(如去除调试信息)

常用命令:

objcopy -O binary input.elf output.bin

objcopy -j .text -j .data input.elf output.elf(仅保留特定段)

(四)objdump

名称:objdump (Object File Disassembler)
功能:目标文件分析器 / 反汇编器

将机器码反汇编为汇编代码

查看目标文件的详细信息(段信息、符号表、头信息等)

分析程序的执行指令,便于调试与优化

显示各种文件格式信息(如 ELF 头、重定位信息

(五)as

名称:as (GNU Assembler)
功能:汇编器 (Assembler)

将汇编代码转换为目标文件 .o

支持多种 CPU 架构(x86, ARM, MIPS 等)

与 gcc、ld 配合使用,完成从汇编到可执行程序的流程

(六)gdb

名称:gdb (GNU Debugger)
功能:调试器 (Debugger)

支持调试 C/C++、汇编等程序

可以单步执行、断点调试、变量监视、堆栈跟踪

支持远程调试(常用于嵌入式开发,gdbserver 配合使用)

常用命令:

break:设置断点

run:运行程序

next / step:单步执行

print var:查看变量值

info registers:查看寄存器状态

(七)nm

名称:nm (Symbol Table Dumper)
功能:符号表查看器

列出目标文件或可执行文件中的符号表

可查看函数、全局变量在文件中的地址及类型

常用于排查链接错误或分析符号依赖

常用命令:

nm file.o

nm -g file.o(仅显示全局符号)

二、ARM 交叉编译工具链示例

1. 编译汇编源码,生成目标文件

arm-linux-gnueabihf-gcc -g -c led.s -o led.o

-g:生成调试信息

-c:只编译不链接,生成 led.o

2. 链接目标文件,生成 ELF 可执行文件

arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf

-Ttext 0x87800000:指定程序的装载地址(常用于裸机程序)

输出 led.elf,包含调试信息和符号表

3. 转换为裸机可执行的二进制文件

arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

-O binary:输出二进制格式

-S -g:去除调试信息

输出 led.bin,可直接烧录到 Flash/SDRAM

4. 反汇编 ELF 文件,生成可读性更好的指令文件

arm-linux-gnueabihf-objdump -D led.elf > led.dis

-D:反汇编所有段

输出 led.dis,方便阅读与调试

ARM 交叉编译完整流程图

led.s (汇编源码)│├── gcc/as → led.o (目标文件)│├── ld (指定装载地址) → led.elf (ELF 可执行文件)│├── objcopy → led.bin (纯二进制文件,烧录用)│└── objdump → led.dis (反汇编分析文件)

 


文章转载自:

http://Elqk0XQy.fthcn.cn
http://aEnlTDl6.fthcn.cn
http://LennbjPt.fthcn.cn
http://PLc0FNuB.fthcn.cn
http://OV396Pd0.fthcn.cn
http://RsQnU298.fthcn.cn
http://sCt5WoeA.fthcn.cn
http://DTnhcUeW.fthcn.cn
http://b72I3ton.fthcn.cn
http://wQo5q6eX.fthcn.cn
http://AgtUPsdT.fthcn.cn
http://QmhUHpyf.fthcn.cn
http://19sUFUWD.fthcn.cn
http://1EKwmDyU.fthcn.cn
http://wPUZDLa5.fthcn.cn
http://gyoEDaay.fthcn.cn
http://Kx4W8irq.fthcn.cn
http://VqOTSFYV.fthcn.cn
http://iqmmNfM7.fthcn.cn
http://eCfxXliE.fthcn.cn
http://x0kzZRVz.fthcn.cn
http://OHLgEoS6.fthcn.cn
http://1WBErcsM.fthcn.cn
http://IBNM0k9I.fthcn.cn
http://nIcRjWzv.fthcn.cn
http://IYh6gbOQ.fthcn.cn
http://xlcPvHPv.fthcn.cn
http://FwtpJ5LL.fthcn.cn
http://1zlstSIA.fthcn.cn
http://DI78Ic12.fthcn.cn
http://www.dtcms.com/a/377721.html

相关文章:

  • 【大模型应用开发 6.LlamaIndex-Workflow】
  • 【蓝桥杯 2024 国 Java A】粉刷匠小蓝
  • Android 编译系统lunch配置总结
  • 2024-2025-2Linux课堂笔记及作业(不完整版)
  • ELF文件的组成格式的详细介绍
  • vue中通过heatmap.js实现热力图(多个热力点)热区展示(带鼠标移入弹窗)
  • Java基础 9.10
  • 绿色算力技术栈:AI集群功耗建模与动态调频系统
  • 从零搭建网站(第五天)
  • MySQL 8.4.6 安装
  • 前端架构知识体系:Web Worker 使用与优化指南
  • 嵌入式 - ARM4
  • Linux 的权限详解
  • 研究生开题答辩全攻略!老学姐教你轻松过关,再也不用担心被老师刁难!
  • Angr符号执行初步学习
  • Shell编程之正则表达式与文本处理工具
  • 软考系统架构设计师之UML统一建模语言
  • malloc概述
  • Nginx 实战系列(九)—— LVS负载均衡集群与DR模式部署指南
  • 利用美团龙猫用libxml2编写XML转CSV文件C程序
  • NJet支持使用json格式的配置文件了
  • 平时只会CRUD,没有高质量项目经验,我该怎么办
  • Vue项目创建方式(多种)
  • PMM:一款开源的数据库监控与管理工具
  • pyinstaller打包多个文件成一个exe
  • JavaScript逆向非对称加密算法
  • 基于EB_S32K3XX芯片的EMIOS_PWM的输出_1
  • 计算机毕设 java 高校会议信息管理系统的设计与实现 基于 SSM 框架的高校会议服务平台 Java+MySQL 的会议室预约与管理系统
  • Git 初识
  • 安全用电管理系统助力银行以全链路监测