裸机程序中的Makefile是把程序的编译和链接过程分开的,编译要使用编译器gcc,链接使用链接器ld
示例:
led.bin: start.o
arm-linux-ld -Ttext 0x0 -o led.elf $^
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin
%.o : %.S
arm-linux-gcc - o $@ $< -c
%.o : %.c
arm-linux-gcc - o $@ $< -c
clean:
rm *.o *.elf *.bin *.dis mkx210 -f
1.%.o是目标,%.c,%.S是依赖
2.$@代表的是%.o文件,$<代表是%.S和%.c
3.-c 代表只编译不链接,-o用来指定文件名字
4.arm-linux-ld -Ttext 0x0 -o led.elf $^ arm-linux-ld是用来链接的,-Ttext 0x0指定链接基地址
5.链接器得到的led.elf其实就是我们的可执行程序(如果是在操作系统下,就可以直接执行,但裸机中我们需要的是可以烧写的文件)可烧写的文件就叫做镜像,也就是image
6.arm-linux-objcopy -O binary led.elf led.bin 使用led.elf为原材料来生成led.bin(镜像image)
7.arm-linux-objdump -D led.elf >led_elf.dis 把编译好的.elf格式的文件转为对应的汇编文件,得到汇编代码
8.gcc mkv210_image.c -o mkv210在主机(linux系统中进行编译链接生成可执行文件mkv210)
9. ./mkv210 led.bin 210.bin 210.bin是通过SD卡启动时的裸机镜像,这个镜像由led.bin为原材料,mkv210为工具加工得到