Makefile 文件的编写

本文介绍了Makefile的基础概念及其在ARM Linux环境下编译链接过程的应用。通过三个具体案例:LED控制、SDRAM初始化及MMU配置,详细展示了如何利用Makefile自动化编译流程,并解释了关键指令如arm-linux-gcc、arm-linux-ld的作用。

以下内容 参考   https://blog.youkuaiyun.com/haoel/article/details/2886/

大致规则:

目标(target) ... : 依赖(prerequisites) ...  
    命令(command)
      ...

      ...

其中,target也就是一个目标文件,可以是Object File,也可以是执行文件。prerequisites就是,要生成那个target所需要的文件或是目标。command也就是make需要执行的命令。

下面举几个韦老师书上的例子:

对于 arm-linux-gcc arm-linux-ld arm-linux-objcopy arm-linux-objdump的用法 可以参考https://blog.youkuaiyun.com/muyuyuzhong/article/details/7755291

led 的例子:

led.bin : led.c led.S

    arm-linux-gcc -c -o ledc.o led.c   ( -c 只编译,不连接)

    arm-linux-gcc -c -o leds.o led.S

    arm-linux-ld -Ttext 0X00000000 ledc.o leds.o -o led_elf

    arm-linux-objcopy -O binary -S led_elf led.bin

Clean:

    rm -f led.bin led_elf *.o

    ( arm-linux-objcopy 被用来复制一个目标文件的内容到另一个文件中.此选项可以进行格式的转换;

    在实际编程的,用的最多的就是,将ELF格式的可执行文件转换为二进制文件.

   如:   arm-linux-objcopy –O binary –S elf_file bin_file ,其中 -O 后面加 输出的格式;

-S 表示不从源文件中复制重定位信息和符号信息到目标文件中  )

SDRAM 的例子:

SDRAM.bin : led.c SDRAM.S

    arm-linux-gcc -c -o ledc.o led.c

    arm-linux-gcc -c -o SDRAM.o SDRAM.S

    arm-linux-ld -Ttext 0X30000000 ledc.o SDRAM.o -o SDRAM_elf

    arm-linux-objcopy -0 binary -S SDRAM_elf SDRAM.bin

Clean :

    rm -f SDRAM.bin SDRAM.elf *.o

MMU 的例子

objs := head.o init.o leds.o( Makefile文件里的赋值方法有两种:延时变量、立即变量,前者在真正使用时变量的值才确实,后者在定义时就已经确定了;使用"=" "?=" "define"定义是延时变量,使用":="定义的变量是立即变量,这里定义objs 是立即变量 )

mmu.bin :$(objs)   (这里相当于 mmu.bin : head.o init.o leds.o)

    arm-linux-ld -Tmmu.lds -o mmu_linux $^  ($@ 表示规则的目标文件名; $^表示所有依赖的名字;$< 表示第一个依赖的文件名) 

    arm-linux-objcopy -O binary -S mmu_linux $@

    arm-linux-objdump -D -m arm mmu_linux > mmu.dis (这里参考https://zhidao.baidu.com/question/484741109.html,目的是将反汇编程序写到mmu.dis文件中去,不从终端输出
%.o:%.c
    arm-linux-gcc -Wall -O2 -c -o $@ $<
%.o:%.S

    arm-linux-gcc -Wall -O2 -c -o $@ $<

Clean :

    rm -f mmu.bin mmu_linux mmu.dis *.o       











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值