关于arm-linux-gcc指令的一些记录

关于arm-linux-gcc指令的一些记录

命令:

随便找了一个简单的Makefile文件,尝试学习解读一下。
all:
arm-linux-gcc -c -o led.o led.c
arm-linux-gcc -c -o uart.o uart.c
arm-linux-gcc -c -o main.o main.c
arm-linux-gcc -c -o start.o start.S
arm-linux-ld -Ttext 0 start.o led.o uart.o main.o -o uart.elf
arm-linux-objcopy -O binary -S uart.elf uart.bin
arm-linux-objdump -D uart.elf > uart.dis
clean:
rm *.bin *.o *.elf *.dis

解读:

1.对于指令 arm-linux-gcc :
参数:
-v:显示编译时的详细信息,编译器的版本,编译过程等。
-o:指定名字 如 -o test.o
-E:预处理 如 gcc -E -o test.i test
-S:只编译 如 gcc -S -o test.s test
-c:只汇编 如 gcc -c -o test.o test //记忆方法:键盘上的esc键,-i -s -o
-g:加入GDB能够使用的调试信息,使用GDB调试时比较方便
-Wall:打开了所有需要注意的警告信息,像在声明之前就使用的函数,声明后却没有使用的变量等
-Ox:使用优化选项,X的值为空、0、1、2、3;0为不优化,优化的目的是减少代码空间和提高执行效率等,但相应的编译过程时间将较长并占用较大的内存空间。
-Idirname: 将dirname所指出的目录加入到程序头文件目录列表中。如果在预设系统及当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。
-Ldirname:将dirname所指出的目录加入到库文件的目录列表中。在默认状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的库文件,
这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后再到系统预设路径中寻找。

2.对于指令 arm-linux-ld -Ttext 0x10000000 main.o -o main_elf,这句话是将main.o 文件连接成 main_elf格式文件,在连接的过程中,-Ttext 0x10000000 这个选项告诉连接器 我的这段main.o程序 需要被加载到RAM的0x10000000地址处执行。

3.对于指令 arm-linux-objcopy 用于复制一个目标文件的内容到另一个文件中,可以使用不同于原目标文件的格式来输出目的文件,即其可以进行格式转换。
在开发中,一般会用其来将ELF格式的可执行文件转换为二进制格式的文件
参数:
-O:使用指定格式来输出文件
-S:不从源文件中复制重定位信息和符号信息到目标文件中

4.对于指令 arm-linux-objdump -D led.elf > led_elf.dis
objdump是gcc工具链中的反汇编工具,作用是由编译链接好的elf格式的可执行程序,来反过来得到汇编源代码。
-D:表示反汇编。
>左边的是ELF的可执行程序(反汇编时候的原材料)
>右边的是反汇编生成的反汇编程序。其实就是一个汇编语言。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值