Ubuntu 10.04下运用crosstool-ng-1.9.0建立
arm-linux交叉工具链
构建一个交叉工具链供嵌入式系统开发使用是一个令人恐惧的景象,需要钢铁般的意志,需要几天(如果不是几个星期)的功夫,需要具备许多的 Unix 和GNU 知识……”正式基于这一点,我们选择开源工具crosstool-ng,来制作自己的交叉编译工具链。Crosstool现在也有好几个版本,在这里我选择crosstool-ng-1.9.0这个工具包。我所选的主机系统是Ubuntu10.04。
在制作交叉编译工具之前要安装各种各样的编译工具,因为Ubuntu系统的方便性,我们可以通过具体的命令在线安装所需的软件。下面将是具体的制作交叉编译的过程;
一、安装所需的工具包
$ sudo apt-get install g++ libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk
二、下载交叉编译工具所用的文件,
在制作交叉编译的过程中,需要在线下载这个编译工具包,考虑到网速的问题和编译的时间问题,提前
将这些包下载下来,放在指定的目录下,可以大大节省很多的编译时间,考虑到各种包的下载问题,这个百度文库又不能上传软件包,我就将所有的下载路径附在文章后面,同仁们可以去具体的地方下载!
三、安装crosstool-ng-1.9.0.tar.bz2的工具。
安装所需的crosstool-ng-1.9.0,也可在这个地址下
/old_news下载crosstool-ng的工具包。下面是详细的安装步骤:
#cd //回到家目录
#mkdir crosstool //建立crosstool目录
#cp ~/下载/tar/crosstool-ng-1.9.0.tar.bz2 ./crosstool //拷贝crosstool源码包到crosstool目录下
#cd crosstool //进入crosstool目录
#tar jxvf crosstool-ng-1.9.0.tar.bz2 //解压源码包
考虑到后续要用的各种目录,我这里先建立好所需的目录
#mkdir crosstool-build crosstool-install src //解压完后建立安装目录编译目录和源码包目录,这几个目录和crosstool-ng-1.9.0目录并列,如下
图所示:
#cd crosstool-ng-1.9.0 //进入crosstool目录
#./configure --prefix=~/crosstool/crosstool-install
# make //编译
# sudo make install //安装
#cd crosstool-build/ //进入crosstool-build目录
#cp ../crosstool-ng-1.9.0/samples/arm-unknown-linux-gnueabi/* ./ //拷贝交叉工具链到crosstool-build目录下
#fig .config //修改文件名
#../crosstool-install/bin/ct-ng menuconfig
此刻会出现一个图形配置界面,在此配置界面下,可以按照自己开发板的实际情况来进行配置:
1、设定源码包路径和交叉编译器的安装路径。
Paths and misc options --->
(/home/yao/crosstool/src) Local tarballs directory 保存源码包路径 (/home/yao/crosstool/tools) Prefix directory
交叉编译器的安装路径
2、修改交叉编译器针对的构架
Target options --->
*** Target optimisations ***
(armv4t) 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 ***
(yh) Tuple's vendor string
这样产生的编译器前缀就是:arm-yh-linux-gnueabi-
C compiler --->
(crosstool-NG-${CT_VERSION}-yh) gcc ID string
配置好以后保存。
四、编译
编译前要将下载好的源码包放在src的目录下。
#cp ~/下载/tar/* ~/crosstool/src
gnu编译器现在开始编译
#cd ~/crosstool/crosstool-build //进入crosstool-build目录下
#../crosstool-install/bin/ct-ng build //开始编译交叉工具链现在已经进入了编译环节,如果一切顺利,大概将近两个小时就会完成编译的任务,此刻在初始新建的crosstool目录下就会生成一个tools的目录,我们的交叉工具链就在tools目录下的bin目录下面,如下图所示:
五、最后要修改具体的环境变量
如果编译成功,为方便使用可以安装交叉编译工具,需要修改环境变量,添加路径PATH,这个路径就是刚才编译好的交叉工具链的所在路径,
$vi /etc/profile 在其文件下添加:
PATH=/home/yao/crosstool/tools/bin:$PATH
$source /etc/profile //使文件生效
通过上述的命令就可以在任何目录下使用自己制作的交叉编译工具链了。六、测试交叉编译工具链
在宿主机上写好一个hello world的C程序,通过交叉编译后,可以测试一下具体的结果,下面刚刚在program目录下编写了一个test.c的测试程序,开始交叉编译,实验步骤如下:
yao@yao-desktop:~/program$ arm-yh-linux-gnueabi-gcc-4.3.2 test.c -o test
此刻是交叉编译,生成能够在arm开发板上运行的test的二进制文件。通过file命令查看生成的test文件的具体情况,如下所示:
yao@yao-desktop:~/program$ file test
test: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.33, not stripped
看看上面产生的结果,说明test的二进制文件是对于linux2.6.33内核,没有经过瘦身处理,适合在arm结构上运行的二进制文件。此刻说明交叉工具链已经制作完成,以后可以随意使用。
附件:
下面是下载所需安装包的具体路径,如有所缺的包,可以自行到网上下载!
binutils-2.19.1.tar.bz2 /gnu/binutils/
glibc-2. /gnu/glibc/
dmalloc-5. www.filewatcher/m/dmalloc-5.666608.0.0.html
glibc-ports-2.9.tar.bz2 /gnu/glibc/
mpfr-2.4.2.tar.bz2 /gnu/mpfr/
duma_2_5_
le/p/gnome-build-stage-5/downloads/detail?name=duma_2_5_&can =2&q=
gmp-4.3.3.tar.bz2 /gnu/gmp/
ncurses-5. ncurses-5.
ecj-latest.jar sources-redhat.mirrors.airband/java/
libelf-0.8. 511.de/software/
sstrip.c /browser/trunk/tools/sstrip/src/sstrip.c?rev=20154
gcc-4.3.2.tar.bz2 /gnu/gcc/gcc-4.3.2/
sstrip.c /export/20154/trunk/tools/sstrip/src/sstrip.c
linux-2.6.33.tar.bz2 /pub/linux/kernel/v2.6/
strace-4.5.19.tar.bz2 www.filewatcher/m/strace-4.5.16.tar.bz2.457272.0.0.html
gdb-6.8.tar.bz2 /gnu/gdb/
ltrace_0. /debian/pool/main/l/ltrace/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论