《朱老师物联网大讲堂》学习笔记
学习网站:www.zhulaoshi.org
led.bin: start.o
arm-linux-ld -Ttext 0x0 -o led.elf $^
指定链接基地址为0x0,生成led.elf可执行程序,
但是这个led.elf文件在嵌入式裸机中还不能执行,
需要制作成image镜像文件才行。
arm-linux-objcopy -O binary led.elf led.bin
这句命令把led.elf文件制作成了led.bin镜像文件
arm-linux-objdump -D led.elf > led_elf.dis
帮助我们进行反汇编,lef.elf文件反过来就得到对应汇编程序,
说白了就是逆向破解,得到它的汇编源代码,
这个得到的汇编源代码和原来的程序90%左右是相同的
gcc mkv210_image.c -o mkx210
这句是在宿主机,也就是笔记本上的虚拟机中执行的,
不是开发板哦,看gcc类型就可以大概判断
纠其原因是USB启动和SD卡启动的不同
./mkx210 led.bin 210.bin
得到210.bin作为SD卡启动的镜像
%.o : %.S
前面是目标,后面是依赖,看见.S文件就把它转换为.o文件
arm-linux-gcc -o $@ $< -c
-c代表只编译不链接
%.o : %.c
前面是目标,后面是依赖,看见.c文件就把它转换为.o文件
arm-linux-gcc -o $@ $< -c
$@ $< 这两个是makefile的自动变量
$@ 其实就是%.o
$< 其实就是%.S 和 %.c
clean:
rm *.o *.elf *.bin *.dis mkx210 -f
-f, --force 忽略不存在的文件,从不给出提示。
这个呢,就是我们ARM裸机LED中Makefile的文件
在IDE开发环境中,或者使用gcc 1.c -o exe等情况下,
我们程序的编译成功可执行程序似乎就一步,
但是实际上,还可以细分。
这里我们先分为编译和链接两个步骤。
编译用gcc,链接中ld