应用硬件平台不同:所用的交叉工具不同
在linux下通过arm-linux-gcc 编译出来的可执行程序用与在ARM平台下执行 gcc编译出来的程序适用于386平台
解压+配置
解压:tar -xvzf arm-linux-gcc-4.3.2.tgz -C /
修改 /etc/bash.bashrc
export PATH=$PATH:/home/linux/arm-2010.09/bin
source /etc/bash.bashrc
如果是在64位系统上还要安装32位库 sudo apt-get install ia32-libs
1.交叉编译器 arm-linux-gcc
arm-linux-gcc --help
arm-linux-gcc -print-search-dirs 查看头文件目录 库目录
arm-linux-gcc -static -g -O1 hello.c -o hello //生成的hello是.elf格式的,
-static静态链接、-g 显示调试信息 -O代码优化 -Wall打印出警告信息 -v 观看编译的细节
2.连接器脚本
arm-linux-ld
arm-linux-gcc -Tled.lds -o led.elf led.o //-T连接器脚本 脚本文件led.lds
3.ELF文件查看工具
arm-linux-readelf
arm-linux-readelf -a hello
查看运行环境arm 大小端(与运行的处理器一致)
arm-linux-readelf -d hello 查看库
file hello
4.反汇编
arm-linux-objdump (可以将二进制文件和 .elf文件反汇编)
arm-linux-gcc -g hello.c -o hello //在反汇编中将c语句与汇编代码对应
arm-linux-objdump -D -S hello > dump //反汇编代码放到dump文件中 hello是.elf文件
arm-none-eabi-objdump -D -b binary -m arm test.bin > test.dis
//将.bin文件反汇编 -D反汇编所有段 -b指定目标码格式 -m 指定反汇编目标码使用的架构
arm-none-eabi-objdump -D test.elf > test.diss //将.elf文件反汇编
5.文件格式转换
arm-linux-objcopy elf->2进制文件 (也可以转换为.hex)
arm-linux-objcopy -O binary led.elf
(输入文件) led.bin
(输出二进制文件)
arm-none-eabi-objcopy -O binary test.elf test.bin // 将.elf格式文件转换成.bin文件
arm-none-eabi-objcopy -O ihex -S test.elf test.ihex
// 将.elf格式文件转换成.hex文件 -S 不从源文件中复制重定位信息和符号信息到目标文件中