您的位置:首页 > 其它

支持浮点运算功能的交叉编译工具链的制作

2010-10-14 18:30 148 查看
由于研究需要,打算移植一个高版本的UBOOT引导程序到开发板上,所有配置和需要添加的代码都搞定后编译提示错误“... uses hardware FP,whereas U-Boot uses software-FP,Relocation truncated to fit : R_ARM_PLT32 --div0”。就是说UBOOT中所使用的是软件浮点功能,而编译器使用的是硬件浮点功能。通常的交叉编译工具都不带软件浮点功能,在网上想搜寻一个类似arm-softfloat-gnu的交叉编译工具无果,只得自己制作一个。花了一天时间,碰到了很多错误,不过总算是顺利解决了。各位大虾见笑了。下面说下详细的步骤:

1.下载必须的工具和源码

crosstool-0.43.tar.gz ,这个在http://www.kegel.com/crosstool/crosstool-0.43.tar.gz有。

binutils-2.15.tar.bz2

gcc-3.4.5.tar.bz2

glibc-2.3.6.tar.bz2

glibc-linuxthreads-2.3.6.tar.bz2

linux-2.6.8.tar.bz2

linux-libc-headers-2.6.12.0.tar.bz2

将这几个包放在同一个文件夹下。比如:/home/ctr/dowloads

其次是一些编译中要用的通用的库和工具,省得到编译时候出错浪费时间,我使用的Linux是Ubuntu10.04,因此直接:

sudo apt-get install flex bison libncurses5-dev patch texinfo

2. 降低GCC版本:由于Ubuntu10.04自带的gcc为4.4版本的,版本过高,编译时候对语法要求比较严格,使用该编译器会产生很多莫名奇妙的问题,所以改用gcc-4.1

apt-get install gcc-4.1

rm /usr/bin/gcc (删除GCC,它只是个到gcc-4.3.2的软链接文件)

ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的软链接)

3.修改.sh脚本

进入/home/ctr/dowloads,解压软件包:

tar –zxvf crosstool-0.43.tar.gz

进入目录:cd crosstool-0.43

拷贝一个配置脚本:mv demo-arm-softfloat.sh arm-softfloat.sh

修改配置:gedit arm-softfloat.sh

TARBALLS_DIR=$HOME/downloads //表示下载的源码的存放目录

RESULT_TOP=/opt/crosstools //表示生成的工具链的存放目录

修改为:

TARBALLS_DIR=/home/ctr/downloads

RESULT_TOP=/opt/crosstools

4.修改 gcc-3.4.5-glibc-2.3.6.dat

gedit gcc-3.4.5-glibc-2.3.6.dat:

BINUTILS_DIR=binutils-2.15

GCC_DIR=gcc-3.4.5

GLIBC_DIR=glibc-2.3.6

LINUX_DIR=linux-2.6.26.5

LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.8

GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.6.12.0

5.编译:

./arm-softfloat.sh

慢慢等待吧...

最后在/opt/crosstool/gcc-3.4.1-glibc-2.3.6/下就能得到工具链

如果你严格按照以上步骤执行那么编译中唯一出现的问题是:

make[2]: *** [/home/pengly/source-packet/cross/crosstool-0.43/build/arm-linux-gnu/gcc-4.1.0-glibc-2.3.2/build- glibc/csu/version.o] 错误 1
make[2]:正在离开目录 `/home/pengly/source-packet/cross/crosstool-0.43/build/arm-linux-gnu/gcc-4.1.0-glibc- 2.3.2/glibc-2.3.2/csu'
make[1]: *** [csu/subdir_lib] 错误 2
make[1]:正在离开目录 `/home/pengly/source-packet/cross/crosstool-0.43/build/arm-linux-gnu/gcc-4.1.0-glibc- 2.3.2/glibc-2.3.2'
make: *** [all] 错误 2
解决方案:

修改如下文件:
gedit build/arm-linux-gnu/gcc-4.1.0-glibc-2.3.2/build-glibc/csu/version-info.h
"Available extensions:/n"
"/n"
gedit Demo-arm.sh
在工具链版本后加 --notest --nounpack

由于博客限制不能将制作好的工具链上传,需要的朋友请在博客上留下联系方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: