在ubuntu9.10中编译u-boot-2010.06时出错,提示错误:relocation truncated to fit: R_ARM_PLT32 __div0。
我到编译环境是:gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9);arm-linux-gcc version 3.4.1。
搜索网络,是因为需要soft-float,需要安装crosstool-0.43。但是在安装crosstool-0.43时出现了These critical programs are missing or too old: as ld到错误,原因是ubuntu9.10中到as和ld版本是2.20,比crosstool所需要到版本高,crosstool不认识。
解决了as和ld到版本问题后,有出现了version-info.h:3: error: missing terminating " character到错误,原因是ubuntu到sh版本是dash,和crosstool中到语法不一致引起到。
整个到解决流程为:
1.创建目录/opt/crosstool,并修改其owner,因为crosstool不能以root安装,而必须以sername安装,安装过程会读写此目录,故需要修改属性。修改方法为:sudo chown system_username /location_of_files_or_folders,这里的system_username和 /location_of_files_or_folder是你的用户名和你想更改所有者的目录;2.创建目录/home/sername/downloads,这个目录将用于存放自动从网上下载到gcc,binutilty,glibc等。如果自己以及下载了这些软件包,也放在这个目录下,这样就不用再下载了;
3.到http://kegel.com/crosstool/#download下载最新的crosstool到目录/opt/crosstool,我下载到的是crosstool-0.43.tar.gz;
4.解压缩crosstool,cd /opt/crosstool tar xzvf crosstool-0.43.tar.gz;
5.查看ld,as版本,ld-v,as-v,如果版本低于2.20,并且执行ls /bin/sh -al 以后,如果sh指向的是bash,执行sh demo-arm-softfloat.sh,经过大约一个小时,生成cross tool chains。修改u-boot到Makefile,指定cross tool;
如果ld,as版本为2.20,执行sh demo-arm-softfloat.sh后会出现“*** These critical programs are missing or too old: as ld”,错误提示,则需要先进行如下操作:
6.首先确保系统中有以下软:bison、flex 、build-essential、patch 、libncurses5-dev;
7.把GCC降到4.1,因为crosstool在相关configure中文件中会检测,gcc的版本 高于4.1的版本会报错,操作如下:
1.) sudo apt-get install gcc-4.1
2.) sudo rm /usr/bin/gcc
3.) sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc
8.到http://ftp.gnu.org/gnu/binutils/下载binutils的2.18版本,然后替换系统中的2.20版本,方法如下:
1.) 解压缩binutils-2.18.tar.bz2,tar jxvf binutils-2.18.tar.bz2
2.) cd binutils-2.18
3.) ./configure --prefix=/tmp/binutils --disable-nls (-prefix后面的是生成可执行文件存放的位置可以自己定义)
4.) make all
5.) make install
编译成功后在/tmp/binutils/bin/中就生成了ld as程序的可执行文件,重新链接/usr/bin/ld 于/usr/bin/as文件,操作如下:
1.) sudo cp /usr/bin/ld /usr/bin/ld_backup
sudo cp /usr/bin/as /usr/bin/as_backup
2.) sudo rm /usr/bin/ld /usr/bin/as
2.) sudo ln –s /tmp/binutils/bin/ld /usr/bin/ld
3.) sudo ln –s /tmp/binutils/bin/as /usr/bin/as
然后可运行ld –v 和as –v 查看版本是否为2.18,再运行crosstoll-0.43目录下的demo-arm-softfloat.sh即可成功建立交叉编译环境了。
ls /bin/sh -al 以后,发现sh指向的不是bash,而是dash,就要修改sh版本,把dash改为bash,操作如下:
9.sudo dpkg-reconfigure dash ,出现菜单问你是否要dash的时候,选no就可以了。
10.export PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:$PATH
11.修改 /etc/environment 文件
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/crosstool/gcc-4.1.0-glibc-2.3.2/bin"
12.恢复gcc为4.3
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
重新安装dash
sudo dpkg-reconfigure dash
选择 yes 以重新安装 dash
13.修改顶层Makefile文件,添加
CROSS_COMPILE = arm-softfloat-linux-gnu-
文章评论(0条评论)
登录后参与讨论