led裸机程序Makefile制作,arm-linux-(gcc/ld/objcopy/objdump)详解

在linux中输入vi Makefile 来实现创建Makefile文件
**命令行前必须加TAB键
对于led裸机程序,主要是将两个文件led.c和start.S汇编文件,制作一个Makefile文件
makefile文件如下(引自迅为iTOP给的例程):

// 下面会详解
led.bin: start.o led.o
	arm-none-linux-gnueabi-ld -Ttext 0x0 -o led.elf $^
	arm-none-linux-gnueabi-objcopy -O binary led.elf led.bin
	arm-none-linux-gnueabi-objdump -D led.elf > led_elf.dis

// 编译输出.o文件,依赖文件为.S
%.o : %.S
	arm-none-linux-gnueabi-gcc -o $@ $< -c -nostdlib
// 编译输出.o文件,依赖文件为.c
%.o : %.c
	arm-none-linux-gnueabi-gcc -o $@ $< -c -nostdlib
// 清除相关后缀的文件
clean:
	rm *.o *.elf *.bin *.dis  -f

led.bin : crt0.S led.c 指的是依赖关系,led.bin是目标文件,:后面是依赖文件

arm-linux-gcc 编译选项
  • -o 编译及链接,会生成一个exe可执行文
  • -Wall 指定产生全部的警告信息
  • -O/-O2/-O3 数字越高,代表优化的更多,可以使生成的执行文件的提高执行效率
  • -c 编译不链接,会生成一个*.obj文件,若后面加了-o,则表示指定输出文件名称
  • -static 静态链接,生成的文件会非常大, 好处在于不需要动态链接库,也可以运行
  • -S 只激活预处理和编译,就是指把文件编译成为汇编代码

例如:
arm-linux-gcc -c -o led.o led.c :编译不链接

arm-linux-gcc -o led led.c :编译以及链接

arm-linux-ld 连接选项
  • -Ttext 0x00000000 指代码段头地址为0x00000000
  • -T链接脚本 指使用链接脚本来进行更复杂的地址设置,包括了代码段,数据段,bss段等
  • -o 后面指的将多个文件连接在一起,生成一个obj文件,上面的名称是led_elf。
  • -pie       生成动态链接地址段,一般在新版uboot里会看到
arm-linux-objcopy 复制选项,支持格式转换
  • -O binary 用来指定生成文件按照后面的格式来输出,其中binary是指生成二进制(.bin)文件。
  • -S 不从源文件中复制重定位信息和符号信息到目标文件中去
arm-linux-objdump 反编译选项
  • -D 反编译所有段
  • -b binary 指定反编译目标文件格式
  • -m ram 指定反编译目标文件所需的架构,这里是ram架构
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值