原创 U-BOOT编译中的软浮点soft-float问题(error:R_ARM_PLT32 __di)

2010-8-2 17:14 4930 4 4 分类: MCU/ 嵌入式

   在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-



 



 











PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /3 下一条