(韦东山——嵌入式Linux 应用开发完全手册)
自己编译工具链:
如果要基于gcc 和glibc 来制作工具链,可以使用crosstool 来进行编译;
如果要基于gcc 和uClibc 来制作工具链,可以使用buildroot 来进行编译。
uClibc 比 glibc 小,在已有的接口上是兼容的,更适用于嵌入式操作系统。但是uClibc 并没有包括glibc 中的所有接口实现,因此有些应用可能在uClibc 中不能编译。
基于这个原因,采用gcc ,当对系统比较熟悉后,或者在开发资源很瘦限制的产品时,可以使用uClibc。
使用crosstool -0.43.tar.gz 工具来编译工具链,它运行时,会自动从网上下载源码,然后编译,当然我们也可以自己下载源码,在运行crosstool。crosstool 官方网站为http://kegel.com/crosstool/,可以参考其中的crosstool-how to .html 选择、配置、编译工具链。
步骤:
一、修改crosstool 脚本
a、执行以下命令进行解压缩
$ tar xzf crosstool-0.43.tar.gz 【为.gz文件,使用gzip方式处理,即用xzf】
b、打补丁
把它复制到crosstool 的补丁目录下:
命令 $ cp glibc-2.3.6-version-info.hr_err.patch
crosstool-0.43/patchs/glibc-2.3.6/
然后将执行crosstool-0.43 目录下的demo-arm-softfloat.sh 脚本来进行编译,内容如下:
(注意:关于VI 中显示行号的方法:在命令行模式下(也有称为尾行模式的)
1、显示当前行行号,在VI的命令模式下输入——:nu
2、显示所有行号,在VI的命令模式下输入——:set nu)
第7行的TARRBALLS_DIR 表示源码存放位置。
第8行的 RESULT_TOP 表示编译结果存放的位置。
第10行的GCC_LANGUAGES 表示制作出来的工具链支持C、C++语言,如果要支持其他语言,可以在里面增加。比如下面一行表示支持Java:GCC_LANGUAGES = " c, c++,java"
第26~29行可知,可以选择多种gcc、glibc 版本。我们选择gcc-3.4.5 和 glibc-2.3.6。
执行demo-arm-softfloat.sh 脚本后,它将根据arm-softfloat.dat
、gcc-3.4.5-glibc-2.3.6.dat 这两个文件中定义的环境变量调用all.sh 脚本进行编译。
gcc-3.4.5-glibc-2.3.6.dat 文件指明了要下载或使用的文件。
需要更改demo-arm-softfloat.sh、arm-softfloat.sh、all.sh 这3个文件。
1、修改demo-arm-softfloat.sh,修改后的内容如下:
2、修改arm-softfloat.dat,修改如下
TARGET=arm-softfloat-linux-gnu 改为: TARGET=arm--linux
它表示编译出来的工具样式为arm-linux-gcc、arm-linux-ld等,这是常用的名字。
3、修改all.sh。
如果现在就执行demo-arm-softfloat.sh ,最终结果将存放在/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux 目录下。修改all.sh可以改变目录。
比如把它改为/work/tools/gcc-3.4.5-glibc-2.3.6
PREFIX=${PREFIX-$RESULT_TOP/$TOOLCOMBO/$TARGET}
改为
PREFIX=${PREFIX-$RESULT_TOP/$TOOLCOMBO}
二、编译、安装工具链
执行以下命令:
$ cd crostool-0.43/
$ ./ demo-arm-softfloat.sh
编译2、3个小时后,将在/work/tools/目录下生成gcc-3.4.5-glibc-2.3.6 子目录,交叉编译器、库、头文件都包含在里面。设置PATH 环境变量即可使用。
使用下面命令测评以下:
$ arm-linux-gcc -v
按照流程走了一遍,还是挺有收获的!完毕!
版权声明:本文为博主原创文章,未经博主允许不得转载。