ubuntu10.04下建立交叉编译工具链(支持软浮点)全过程
参考了网上的不少的资料,花了五个小时终于完成了,记录下全过程供大家分享。
用到的源码包如下,建议新手全部放在/home/usr/downloads/ 目录下。以下操作在用户权限下进行。
=======================================================================
arm-linux-gcc-3.4.
glibc-2.3.
linux-2.6.
crosstool-0.
binutils-2.
glibc-linuxthreads-2.3.
binutils-2. --安装用
1. 编译过程需要用到以下几个软件,系统本身没有安装,可以运行安装命令提前做好,因为编译一次至少要花半个小时,如果因为依赖软件没有安装中途会 报错退出,只有从头再来,那样很浪费时间的。
sudo apt-get install bison flex build-essential patch libncurses5-dev
gnu编译器由于ubuntu10.04自带的ld ,as版本太高的原因,需要安装binutils的2.18版本,然后替换系统中的2.20版本。方法如下:
$cd downloads
$tar xzvf binutils-2.
$cd binutils-2.18
$./configure --prefix=/tmp/binutils --disable-nls (-prefix后面的是生成可执行文件存放的位置可以自己定义)
$make all
$make install
编译成功后在/tmp/binutils/bin/中就生成了ld和as程序的可执行文件
重新链接/usr/bin/ld 和/usr/bin/as文件
$sudo rm /usr/bin/ld /usr/bin/as //删除2.20的ld,as
$sudo ln –s /tmp/binutils/bin/ld /usr/bin/
$sudo ln –s /tmp/binutils/bin/as /usr/bin/
然后可运行ld –v 和as –v 查看版本是否为2.18。
安装2.18版本可解决出现的 ld as " version too old "问题。
2. ubuntu10.04下默认的GCC版本是4.4.3,但这个不是版本越高越好,版本太高,对语法什么的要求也高,编译不成功,降低版本吧:
#sudo apt-get install gcc-4.1 //安装4.1的GCC,需要联网
#sudo rm /usr/bin/gcc //删除之前4.4.3的快捷方式,4.4.3的GCC并未删除
#sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc //建立4.1的快捷方式
这是由于crosstool中定义了GCC的版本的上下线,最高也就到4.1,在其配置的时候会对这个版本信息进行检测,不在其规定范围就报错了。
3.修改sh版本
如果运行
ls -la /bin/sh
看到链接的是 dash ,则请运行以下命令
sudo dpkg-reconfigure dash
选择 no 以删除 dash
此处如果不改好的话,编译时会出现错误
(在建立交叉编译环境后,可以在运行该命令选择yes重新安装dash)。
4. 解压crosstool-0.43源码包,修改配置文件。
$tar xzvf crosstool-0.
$cd crosstool-0.43 //下面的操作路径都在此文件夹
$cp demo-arm-softfloat.sh arm-softfloat.sh //复制并建立新文件arm-softfloat.sh
$gedit arm-softfloat.sh //用文本编辑器打开,也可用vim打开。
修改文件中的内容:
TARBALLS_DIR=$HOME/downloads //表示下载的源码的存放目录
RESULT_TOP=/opt/crosstools //表示生成的工具链的存放目录
为:
TARBALLS_DIR=/home/usr/downloads(源码存放目录)
RESULT_TOP=/home/usr/crosstools(生成工具链目录) 若使用默认位置安装的话会因为权限问题出错。
修改这一句:eval `cat arm-softfloat.dat gcc-3.4.1-glibc-2.3.3.dat` sh all.sh --notest //红为自己所选的GCC和GLIBC的版本号,可以根据自己的实际情况进行修改。
再修改 gcc-3.4.1-glibc-2.3.3.dat文件,过程如下:
$gedit gcc-3.4.1-glibc-2.3.3.dat
修改后内容为:
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.4.1
GLIBC_DIR=glibc-2.3.3
LINUX_DIR=linux-2.6.8
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.3
注 意自己的工具的版本最好和这里是对应的,省的编译器不到报错或是连网下载浪费时间。
再修改arm.dat
$gedit arm.dat
修改为:
KERNELCONFIG=`pwd`/fig
TARGET=arm-softfloat-linux-gnu
TARGET_CFLAGS="-o"
5. 将linux-2.6.8源码包目录下的/script/kconfig/mconf.c中的91行
static struct menu *current_menu;
改为
struct menu *current_menu;
这样是为了解决"*current_menu"相关的错误。
6. 执行sh arm-softfloat.sh,一个小时左右你就可以看到/home/usr/crosstools目录下有你想要的东西了。
7.修改环境变量
修改环境变量有多种方法我们介绍两种
(1)第一种方法:在当前用户目录的.bashrc中添加如下环境变量的内容
$export PATH=$PATH:/home/linux/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/bin
(2)第二种方法:或直接修改/home/linux/.bashrc文件
$cd /home/linux
$gedit .bashrc
在第一行添加如下内容:
PATH=$PATH:/home/linux/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/bin
然后执行
$source .bashrc
8.执行如下命令
$ arm-softfloat-linux-gnu-gcc -v
显示
Reading specs from /home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/lib/gcc/arm-softfloat-linux-gnu/3.4.5/specs
Configured with: /home/david/downloads/crosstool-0.43/build/arm-softfloat-linux-gnu/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-softfloat-linux-gnu --host=i686-host_pc-linux-gnu --prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu --with-float=soft --with-headers=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu/include --with-local-prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1
ok交叉编译环境创建成功!
9.恢复我们修改的系统配置:
恢复gcc为4.4
$sudo rm /usr/bin/gcc
$sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
重新安装dash
$sudo dpkg-reconfigure dash
选择 yes 以重新安装 dash
到此为止就大功告成了,哈哈。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论