作者:拾得 http://blog.sina.com.cn/lhding
前面几个星期一直在尝试按照http://book.csdn.net/bookfiles/481/10048116751.shtml上的介绍学习一下独立的交叉编译链构建。
很可惜,最后没有成功,问题出在glibc编译的时候,不停的有错误报出来,后来google一些资料,是glibc-2.3.2
自身有一些bug。根据下面一个参考链接介绍,在用crosstool编译的时候会自动加一些补丁。
从一个朋友的网页上看到“在独立构建交叉编译链上浪费太多时间不值得”,决定转向使用crosstool。
首先到http://kegel.com/crosstool/crosstool-0.43.tar.gz 下载最新版本的crosstool.
参考:http://blog.chinaunix.net/u1/34474/showart_361474.html
使用的demo是demo-arm-xscale.sh
下载文件:
linux-2.6.15.4.tar.bz2
binutils-2.16.1.tar.bz2
gcc-4.1.0.tar.bz2
glibc-2.3.2.tar.bz2
glibc-linuxthreads-2.3.2.tar.bz2
linux-libc-headers-2.6.12.0.tar.bz2
(注:第一个可以从ftp.kernel.org下载,后面四个可以从ftp.gnu.org下载,最后一个要到ftp://ftp.lfs-matrix.net/pub/linux-libc-headers/linux-libc-headers-2.6.12.0.tar.bz2下载.)
在编译过程中碰到的值得记录的问题有:
1、没有更改arm-xscale.dat文件,导致输出的gcc编译器名字巨长,可以参考
http://book.csdn.net/bookfiles/481/10048116751.shtml,更改配置文件部分选项如下:
TARGET=arm-linux- # 编译生成的工具链名称
TARGET_CFLAGS="-O" # 编译选项
(并未经过验证)
2、关于gcc的版本问题,直接执行./demo-arm-xscale.sh,出现gcc版本过低的问题,而事实上fedora 9上的gcc版本是4.3。问题的根源在于crosstool执行gcc编译的时候要进行版本匹配,过高的版本不支持。曾尝试重新安装低版本的gcc,却一直没有成功,后来发现可以直接更改crosstool的patch文件,就放弃了继续安装低版本的gcc。
改动方法:http://blog.chinaunix.net/u2/72383/showart_1076976.html
修改crosstool-0.43/patches/glibc-2.3.2/下的glibc-2.3.3-allow-gcc-4.0-configure.patch文件,将"3.[2-9]*|4.[01]*"改为"3.[2-9]*|4.*"就OK 了。
3、关于验证是否安装成功:
首先找到arm gcc的安装目录,应该在$dstdir/gcc-4.1.0-glibc-2.3.2/arm-xscale-linux-gnu/bin下面,将该目录加入PATH环境变量,添加方法:
首先备份/etc/bashrc,然后通过#chmod 777 bashrc 命令改变其只读属性,在最后一行加入环境变量记录:
export PATH=$dstdir/gcc-4.1.0-glibc-2.3.2/arm-xscale-linux-gnu/bin:$PATH
注意,$dstdir用使用绝对路径代替,这里只是为了表述的方便。
然后进入$dstdir/gcc-4.1.0-glibc-2.3.2/arm-xscale-linux-gnu/tmp,使用
#arm-xscale-linux-gcc -o hello hello.c
#file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3,
dynamically linked (uses shared libs), not stripped
验证编译成功。
全部编译时间长度大概两个小时。