支持浮点运算功能的交叉编译工具链的制作
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
由于博客限制不能将制作好的工具链上传,需要的朋友请在博客上留下联系方式。
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
由于博客限制不能将制作好的工具链上传,需要的朋友请在博客上留下联系方式。
相关文章推荐
- buildroot制作交叉编译工具链
- arm linux uclibc交叉编译工具链的制作
- DM644x达芬奇平台交叉编译工具链的制作
- 制作交叉编译工具链的方法总结(详细)
- 制作交叉编译编译工具链
- 制作交叉编译工具链的方法总结(详细)
- ARM Linux 交叉编译工具链 制作攻略
- crosstool制作arm-linux交叉编译工具链
- arm交叉编译工具链的制作
- arm linux uclibc交叉编译工具链的制作
- ARM交叉编译工具链的制作
- cross tool制作交叉编译工具链,编译binutils error
- 修改版——制作交叉编译工具链的方法总结
- 搭建带软浮点交叉编译工具链
- ubuntu 利用crosstool-ng-1.8.1制作交叉编译工具链
- arm-linux-gcc交叉编译工具链的制作及使用
- 制作ARM平台交叉编译工具链
- PowerPC交叉编译工具链的制作
- powerpc交叉编译工具链的制作
- arm-linux交叉编译工具链的制作(基于S3C2440)【转】