《一日二十四挨踢www.1024it.net》站文章在未特殊说明下默认为原创性文章。
在未有正式书面授权情况下,请勿转载。谢谢配合
系统环境:
Linux ubuntu 2.6.38-16-generic #67-Ubuntu SMP Thu Sep 6 18:00:43 UTC 2012 i686 i686 i386 GNU/Linux
crosstool-ng版本:
crosstool-ng-1.9.0
以前由于工作需要,要搭建一套交叉工具链。在网上搜集了大量资料,自己按部就班做了一遍,最终成功搭建。今天总结了安装方法和具体步骤,分享给大家。希望对大家有所帮助。
我们选择开源工具crosstool-ng,来制作自己的交叉编译工具链。
在制作交叉编译工具之前要安装各种各样的编译工具,因为Ubuntu系统的方便性,我们可以通过具体的命令在线安装所需的软件。下面将是具体的制作交叉编译的过程。
一、安装所需的工具包
$ sudo apt-get install g++ libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk curl
二、下载交叉编译工具所用的文件
在编译工具链时,要依赖许多工具包,如果而且不同版本的gcc,所依赖的工具包的版本也不同,如果你在编译之前知道之间的关系,可以提前下载相应的版本;如果不知道,还是让其自己在线下载。
三、安装crosstool-ng-1.9.0.tar.bz2的工具。
安装所需的crosstool-ng-1.9.0,你可在这个地址http://crosstool-ng.org/old_news下载crosstool-ng的工具包。下面是详细的安装步骤:
$cd ~/workspace
$mkdir crosstool_workspace
$cd crosstool_workspace
$cp ~/Downloads/crosstool-ng-1.9.0.tar.bz2 .
$tar xvf crosstool-ng-1.9.0.tar.bz2
考虑到后续要用的各种目录,我这里先建立好所需的目录
$mkdir crosstool_build crosstool_install src tools
目录编译目录和源码包目录,这几个目录和crosstool-ng-1.9.0目录并列,如下图所示:
$ cd crosstool-ng-1.9.0
$./configure --prefix=/home/yalong/workspace/crosstool_workspace/crosstool_install
如果写成~/workspace/crosstool_workspace/crosstool_install,就会有如下提示:
configure成功的状态,如下:
make & sudo make install结果如下:
$cd ../crosstool_build/
$ cp ../crosstool-ng-1.9.0/samples/arm-unknown-linux-gnueabi/* .
$mv crosstool.config .config (.config是隐藏文件)
$ ../crosstool_install/bin/ct-ng menuconfig
此刻会出现一个图形配置界面,在此配置界面下,可以按照自己开发板的实际情况来进行配置:
1、设定源码包路径和交叉编译器的安装路径。
Paths and misc options --->
(/home/yalong/workspace/crosstool_workspace/src) Local tarballs directory保存源码包路径
(/home/yalong/workspace/crosstool_workspace/tools) Prefix directory交叉编译器的安装路径
2、修改交叉编译器针对的构架
Target options --->
*** Target optimisations ***
(armv5TE) Architecture level
(arm9tdmi) Emit assembly for CPU
(arm920t) Tune for CPU
3、增加编译时的并行进程数,以增加运行效率,加快编译。
Paths and misc options --->
*** Build behavior ***
(2) Number of parallel jobs
这个数值不宜过大,应该为CPU数量的两倍。
4、关闭JAVA编译器
C compiler --->
*** Additional supported languages: ***
[ ] Java
5、一些个性化的修改(可以不修改)
Toolchain options --->
*** Tuple completion and aliasing ***
(yl) Tuple's vendor string
这样产生的编译器前缀就是:arm-yl-linux-gnueabi-
C compiler --->
(crosstool-NG-${CT_VERSION}-yl) gcc ID string
配置好以后保存。
四、编译
如果你下载了源码包,编译前要将下载好的源码包放在src的目录下。
$cp ~/Download/tar/* ~/crosstool/src
现在开始编译
$cd ~/crosstool/crosstool-build //进入crosstool-build目录下
$ ../crosstool_install/bin/ct-ng build //开始编译交叉工具链
现在已经进入了编译环节,如果一切顺利,大概将近两个小时就会完成编译的任务,此刻在初始新建的crosstool目录下就会生成一个tools的目录,我们的交叉工具链就在tools目录下的bin目录下面,如下图所示:
遇到错误及解决方法:
问题一:
[ERROR] make[1]: *** [configure-gcc] Error 1
[ERROR] Build failed in step 'Installing static core C compiler'
[ERROR] Error happened in '/home/yalong/workspace/crosstool_workspace/crosstool_install/lib/ct-ng-1.9.0/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
[ERROR] called from '/home/yalong/workspace/crosstool_workspace/crosstool_install/lib/ct-ng-1.9.0/scripts/build/cc/gcc.sh' at line # 289 in function 'do_cc_core'
[ERROR] called from '/home/yalong/workspace/crosstool_workspace/crosstool_install/lib/ct-ng-1.9.0/scripts/build/cc/gcc.sh' at line # 52 in function 'do_cc_core_pass_1'
[ERROR] called from '/home/yalong/workspace/crosstool_workspace/crosstool_install/lib/ct-ng-1.9.0/scripts/crosstool-NG.sh' at line # 597 in function 'main'
[ERROR] Look at '/home/yalong/workspace/crosstool_workspace/tools/build.log' for more info on this error.
[ERROR] (elapsed: 39:21.50)
[39:22] / make: *** [build] Error 2
解决方法:
我给menuconf的alias添加了别名,导致出现此错误。
问题二:
“[ERROR] Error happened in '/home/mcw-jks-a8/workspace/crosstool_workspace/crosstool-install/lib/ct-ng-1.9.0/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
[ERROR] called from '/home/mcw-jks-a8/workspace/crosstool_workspace/crosstool-install/lib/ct-ng-1.9.0/scripts/build/cc/gcc.sh' at line # 443 in function 'do_cc'
[ERROR] called from '/home/mcw-jks-a8/workspace/crosstool_workspace/crosstool-install/lib/ct-ng-1.9.0/scripts/crosstool-NG.sh' at line # 597 in function 'main' ”
解决方法:
此错误最大可能性是对应安装包有问题。