ARM裸机开发第三步编译怎么做ARM开

先从bootloader开始,从下面的截图中可以看出裸机开发流程:

这里先做第三步,感受总结一下ARM裸机开发需要哪些工具,用到的时候再详细介绍。

要做第三步,首先要安装交叉编译器!

找到安装包,解压到根目录下(解压后边加上-C/)

这里交叉工具链会自动解压到根目录下的/usr/local/arm/目录下面

但是这时候还不能直接在任意目录下使用arm-linux-gcc等工具(能不能用就看Tab键能不能自动补齐),这是因为这个工具软件安装在/usr/local/arm/4.3.2/这个目录下,如果不跟上这个绝对路径,我们的linux并不知道去哪找比如:arm-linux-gcc这个命令!那么怎么样才能在任意目录下不使用完整路径也能使用这个工具软件呢?

答:修改path环境变量

vi/root/.bashrc

然后执行source/root/.bashrc

通过上面的几天命令可以看到安装前后修改脚步前后使用arm-linux-gcc命令的变化!其实好多工具软件的安装都是大同小异,解压到指定目录下,然后修改环境变量!然后source修改的脚步使其生效!

首先一开始该目录下有三个文件.其中led.lds是链接器脚步,led.S汇编文件。其中后边使用的三条命令分别使用了交叉工具链、链接器脚步。然后我们先makeclean一下,让其回到最初始只有三个文件的时候make一下,发现效果是一样的,这就是makefile工程管理

下一步,如何将我们的应用程序下载到开发板上的nandflash上去,一般都是通过norflash或者SD卡上的系统安装辅助程序来帮我们烧写(就是和PC机建立一个连接,然后把PC机上的程序下载到nandflash中)

下面再对上面使用的命令进行解析!

交叉工具链:

第一个是交叉工具,第二个是链。

常用交叉工具:

1.交叉编译器arm-linux-gcc

2.交叉链接器arm-linux-ld

3.交叉转换器arm-linux-readelf

4.交叉ELF文件工具arm-linux-objdump

5.交叉反汇编器arm-linux-objcopy

使用arm-linux-gcc--help可以看到如图:

可以看到arm-linux-gcc-g-cled.S中-g是静态编译,-c是只编译不链接!经过这一步生成led.o文件!

然后第二步:arm-linux-ld-Tled.lds-oled.elfled.o这里当使用一个链接器脚本的时候是使用的-T参数,这里是将所有的.o文件链接成.elf格式的目标文件!led.elf是要链接成的目标文件的名字,这里需要链接的只有一个led.o文件。

使用命令arm-linux-readelf-aled.elf(这里-a表示查看led.efl文件的全部信息)

从这里可以看到一些非常有用的信息,首先有一个固定的文件头!data那一行,可以看出这个文件是运行在littleendian即小端模式下的。等等还有其他的一些很有用的信息!

程序达不到预期结果一般情况下先检查三个问题:

1.是否是运行在ARM平台上,用命令:file目标文件名查看

2.查看大小端是否对arm-linux-readelf查看

3.查看程序用到的某些库是否对使用命令:arm-linux-readelf-d目标文件名(可以查看目标文件在目标板上运行必须用到哪些库,如果开发板上没有该库,则肯定是运行不了的)

ARM反汇编器:在底层编程中是非常有用的!能查看汇编代码!(即如何将程序变成汇编版本)

命令方式:arm-linux-objdump-D-S目标文件直接回车就可以看到反汇编代码,但是如果反汇编文件比较长,可以将反汇编输出到一个文件里面去,方便查看!用法:arm-linux-objdump-D-S目标文件dump(这里输出到当前目录下的dump文件下)查看反汇编代码对分析问题非常有用!(使用arm-linux-gcc编译的时候加上-g选项可以使分析反汇编文件更容易一些)这里就不做截图演示了!而且这些操作基本都是用多了会很顺手!分析起问题来是相当的给力!

文件格式转换器:arm-linux-objcopy通过前面的例子可以看到,连接出来的文件还有编译出来的文件可以看到都是elf格式的,elf格式的文件是不能直接在arm板上运行的!ARM板上能运行的一定是一个二进制的文件!而文件转换器就是将elf格式的文件转化为一个可以在ARM板上能运行的二进制文件!

用法:arm-linux-objcopy-Obinaryled.elfled.bin(arm-linux-objcopy-O选项表示表示输出文件binary表示输出文件格式为二进制led.elf代表要转化的elf文件,led.bin表示输出的目标文件的名字,一般文件格式为.bin后缀)

这里最常用的5个常用工具就介绍完了!工作中编译器的名字可能不一样!但是后面的关键名字比如objcopy、ld等等用法都是一样的!一般不熟悉用法的话工具名字--help会告诉你怎么用!总之多动手练!

下面来简要介绍上面用到的Makefile工程管理:

使用GNUMake工具来管理程序是每个linux工程师必须掌握的技能。Make能够使整个程序的编译、链接只需要一个命令make就可以完成。

上面可以看到编译一个程序可以一个命令一个命令的逐步编译!也可以直接一个make就搞定!当需要编译的源文件很多的时候,一个一个的用命令来编译将会是相当麻烦的!那么Makefile工程管理就诞生了!

关于怎么写Makefile我们前面已经说过了:

_#####################

下面简要看下上面的Makefile文件里面的内容:

其实这里就是把上面单条使用的命令按照一定的规则综合到一起!

Makeflie用途:Make的工作主要依赖一个叫Makefile的文件,Makefile文件描述了整个程序的编译,链接等规则,其中包括:工程中的那些源文件需要编译以及如何编译,如何最后产生我们想要的可执行文件。

Makeflie构成---规则

Makefile中最重要的组成部分是“规则”

规则:用于说明如何生成目标文件,规则的格式如下:

targets:prerequistes









































寻常型白癜风怎么治疗
白颠风早期症状图片



转载请注明:http://www.zjiaren.com/jbxx/9464.html