微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux ARM交叉编译工具链制作过程

Linux ARM交叉编译工具链制作过程

时间:11-21 来源:互联网 点击:
M68km68k-linux
M88km88k-linux
Alphaalpha-linux
Sparcsparc-linux
Sparc64sparc64-linux
四、建立二进制工具(binutils)
Binutils是GNU工具之一,它包括连接器、汇编器和其他用于目标文件和档案的工具,它是二进制代码的处理维护工具。安装Binutils工具包含的程序有addr2line、ar、as、c++filt、gprof、ld、nm、objcopy、objdump、ranlib、readelf、size、strings、strip、libiberty、libbfd和libopcodes。对这些程序的简单解释如下。
Ø addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。
Ø ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。
Ø as 主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由连接器ld连接。
Ø c++filt 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。
Ø gprof 显示程序调用段的各种数据。
Ø ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。
Ø nm 列出目标文件中的符号。
Ø objcopy 把一种目标文件中的内容复制到另一种类型的目标文件中。
Ø objdump 显示一个或者更多目标文件的信息。使用选项来控制其显示的信息,它所显示的信息通常只有编写编译工具的人才感兴趣。
Ø ranlib 产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。
Ø readelf 显示elf格式可执行文件的信息。
Ø size 列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。
Ø strings 打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符。这个程序对于了解非文本文件的内容很有帮助。
Ø strip 丢弃目标文件中的全部或者特定符号。
Ø libiberty 包含许多GNU程序都会用到的函数,这些程序有getopt、obstack、strerror、strtol和strtoul。
Ø libbfd 二进制文件描述库。
Ø libopcode 用来处理opcodes的库,在生成一些应用程序的时候也会用到它。
Binutils工具安装依赖于Bash、Coreutils、Diffutils、GCC、Gettext、Glibc、Grep、Make、Perl、Sed、Texinfo等工具
下面将分步介绍安装binutils-2.19.2的过程。
[root@localhost script] # cd $PRJROOT/src-dir
[root@localhost src-dir] # tar jxvf ../setup-dir/binutils-2.19.tar.bz2
[root@localhost src-dir] # cd $PRJROOT/build-dir/build-binutils
创建Makefile:
[root@localhost build-binutils] #../../src-dir/binutils-2.19/configure --target=$TARGET --prefix=$PREFIX
在build-binutils目录下面生成Makefile文件,然后执行make,make install。完成后可以在$PREFIX/bin下面看到我们的新的binutil。
注意:每个工具的文件名的前缀都是前面为TARGET变量设定的值。如果目标板arm-linux,那么这些工具的文件名前缀就会是arm-linux-。这样就可以根据目标板类型找到正确的工具程序。



五、建立内核头文件
在这里我们使用时2.6.29的内核版本,因为交叉工具链工具链是针对特定的处理器和操作系统的,因此在编译之前就需要对linux内核进行配制,可以通过“make config”或“make menuconfig”命令对内核进行配制,配制完成后,在linux源文件的目录下就会生成一个.config文件,这就是我们所需要的文件。
Note: 目标板的内核版本是2.6.29

[root@localhost embedded- toolchains] #cd kernel
[root@localhost kernel] #tar jxvf ../setup-dir/ linux-2.6.29.tar.bz2
[root@localhost kernel] #bunzip2 ../setup-dir/ patch-2.6.29.bz2
[root@localhost kernel] #cd linux-2.6.29
给Linux内核打补丁:
[root@localhost linux-2.6.29] #patch –p1 < ../../setup-dir/patch-2.6.29
然后就是配置内核,第一步是修改Makefile
修改 Makefile:
ARCH = arm
CROSS_COMPILE = arm-linux- menuconfig
接着使用make menuconfig进入内核配置菜单
或者直接写:
# make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig,注意在配置时一定要选择处理器的类型,比如我的目标机使用的处理器是OMAP类型的,就选TI OMAP:
System Type -à
ARM System Type -à
(x) TI OMAP
配置完退出并保存。
配置完须执行make,参数如下:
[root@localhost linux-2.6.29]# make ARCH=arm CROSS_COMPILE=arm-linux- (执行过程中有错误出现也没关系,主要目的是产生头文件version.h和autoconf.h)
执行完检查一下内核目录中的/kernel/linux-2.6.29/include/linux/version.h和autoconf.h文件是不是生成了,这是编译glibc要用到的。version.h 和 autoconf.h 文件的存在,说明你生成了正确的头文件。
接下来建立工具链需要的include目录,并将内核头文件复制过去。
[root@localhost linux-2.6.29] #cd include
[root@localhost include] #ln -s asm-arm asm
可以查看一下,经过编译可以自动生成。如果已经生成链接,则不必重新链接。(2.6.29已自动生成)
[root@localhost include] #c
上一篇:S3C2440 AD转换器
下一篇:S3C2440的UART

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top