标签:
交叉工具链。链即为集合,交叉工具链也就是交叉工具的集合。平时在电脑上写程序然后再进行编译链接等操作最后生成一个可执行程序,该文件都只能在X86架 构硬件上运行,而不能在我现在使用的开发板,也就是ARM架构上运行。所以进行ARM的裸机程序开发要有一套自己的工具。交叉工具链的安装和环境变量的配 置昨天学过了,现在已经忘得差不多了,但是以后会补上的。废话少说,下面开始记录今天学到的东西。
1、交叉编译器
顾名思义,就是将写好的C程序代码编译为ARM架构下的可执行文件。以前在电脑上使用的gcc,编译后的可执行文件只能在X86架构下运行,简单的说就是
只能在电脑上运行。用法很简单:“gcc [options] 源代码名 -o
可执行文件名”。而交叉编译器的用法几乎和它一模一样:“arm-linux-gcc [options] 源代码名 -o
可执行文件名”。这样生成的可执行程序就可以在我的开发板上运行啦!
2、交叉链接器
将多个编译后产生的过程文件连接为一个最终的可执行文件。比如写了两个C程序代码,一个.c文件,有main函数,另一个.h文件,没有main函数,现
在要将这两个编译后产生的obj文件链接为最终的可执行文件,就要用到交叉编译器。用法:“arm-lnux-ld
[options] 链接器脚本 -o 文件名.elf
链接所需要的文件.o”。这样就能将多个文件链接成可以在开发板上运行的可执行文件啦!
3、交叉ELF文件工具
用来查看一个可执行文件的相关信息。用法:“arm-linux-readelf [options]
可执行文件名”。比较常用的“arm-linux-readelf -a 可执行文件名” ,可以查看文件的运行架构,大小端等信息
像这个图中,是一个可以在小端上运行的可执行文件。
还有“arm-linux-readelf -d 可执行文件名”,用于显示程序需要的动态链接库。
如图所示,该程序需要libc.so.6这个库。
4、交叉反汇编器
将一个可执行文件转换为汇编下的程序。用法:“arm-linux-objdump -D -S 可执行文件名 >目标文件夹”,将该文件转为汇编语言并放到目标文件夹中。
如图将转为汇编语言后的代码放入dump这个文件中,然后用vi dump这个命令即可查看
用/main查找到main函数的位置
如图所示,该图可以看到C语言代码语句与汇编语言语句的对应,这个功能只要在编译该程序时添加“-g”选项即可实现。
5、交叉转换器
将elf格式文件需要的格式。我的理解就是类似于当初学51时将编译后的文件生成为一个hex文件,而在ARM中是生成为bin文件。用法:“arm-linux-objcopy -O 目标文件格式 原ELF文件 目标文件”。
如图,hello-arm为一个ELF文件,通过交叉转换器使其转为可执行的二进制bin文件。
上述所有操作都必须在root用户下进行!因为安装交叉工具链时安装在了根目录下的usr里,别的用户无法使用。
今天早上就学了这么多,记下来方便自己以后忘了来查看。加油!
标签:
原文地址:http://www.cnblogs.com/51qianrushi/p/4294181.html