ARM嵌入式裸机程序学习(一)

这里不用ADS集成开发环境,因为ads兼容性存在问题,而且通过自己手动编译\链接对学习有好处,所以我们下面都在linux环境下进行ARM开发。

开发环境:Linux操作系统(Ubuntu)

开发工具:
arm-linux-gdb-7.5
eclipse-cpp-helios-SR2-linux-gtc
arm-linux-gcc-4.3.2
JLink_linux_V434a
dnw
dnw_usb.ko

一、交叉编译器(arm-linux-gcc)的使用

LED裸机程序,范例代码如下:
[root@localhost lesson]#ls
led.lds led.S Makefile

下面是编译成二进制文件步骤:

[root@localhost  lesson]# arm-linux-gcc -g -c led.s
[root@localhost  lesson]#ls
led.lds    led.S   Makefile   led.o

可以看到生成了led.o文件。(编译汇编程序)

[root@localhost  lesson]# arm-linux-ld -Tled.lds -o led.elf  led.o
[root@localhost  lesson]#ls
led.lds    led.S   Makefile   led.o   led.elf

可以看到生成了 led.elf文件。(链接生成elf,led.lds是链接器脚本)

[root@localhost  lesson]# arm-linux-objcopy -O binary led.elf led.o
[root@localhost  lesson]#ls
led.lds    led.S   Makefile   led.o   led.elf  led.bin

可以看到生成了 led.bin文件。(把elf转换成bin二进制格式文件就可以下载到开发板运行了)

我们可以发现上面编译的过程特别繁琐,假如我们每次修改程序都有把三面三条指令再执行一遍吗? 答案当然不是。
这就需要我们的Makefile上场了。

我们先清除前面手动编译产生的二进制文件:

[root@localhost  lesson]#make clean
[root@localhost  lesson]#ls
led.lds    led.S   Makefile   led.o

可以看到前面产生的文件清除了。

下面我们尝试在项目目录下执行make指令。
[root@localhost lesson]#make
[root@localhost lesson]#ls
led.lds led.S Makefile led.o led.elf led.bin
可以看到一个make指令就搞定了编译、链接、及生成二进制可执行文件。一切都是因为有Makefile这个文件。

文章待续。。。

你可能感兴趣的:(❏【裸奔吧ARM】)