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
解释:真正项目找的Makefile是把程序的编译和链接过程分开的。(我们平常gcc a.c -o exe这种方式来编译时,实际上把编译和链接过程一步完成了。在内部实际上编译和链接永远是分开独立进行的,编译要使用编译器gcc,链接要使用链接器ld。)
链接器得到的led.elf其实就是我们的可执行程序,(如果在OS下,这个led.elf就可以执行了)但是在嵌入式裸机中,我们需要的是可以烧写的文件(可烧写的文件就叫镜像image),因此我们需要用这个led.elf作为原材料来只做镜像,制作工具就是交叉编译工具链中的arm-linux-objcopy
我们使用arm-linux-objdump工具进行反编译(反汇编),反汇编其实就是把编译后的elf格式的可执行程序给反过来得到对应的汇编程序,得到它的汇编源代码。
- mkv210_image.c这个程序其实最终不是在开发板上执行,而是在主机Linux中执行的,因此编译mkv210_image.c时用gcc而不是用arm-linux-gcc。mkv210_image.c编译链接后得到可执行文件,这个可执行文件可以将usb启动的可执行的烧录文件(led.bin)加工为SD卡启动的可执行的烧录文件(210.bin)。
- 当210作为裸机来使用时

 Makefile文件详解&spm=1001.2101.3001.5002&articleId=132639344&d=1&t=3&u=22a7ec8646f74a4e98564a38b29d7de1)
1259

被折叠的 条评论
为什么被折叠?



