由于编译uboot的需要,自己建立一个支持软浮点的交叉编译工具链,搞了一整天,终于有眉目了,记下了备忘。
参考了网上的不少的资料,还是需要适合自己的。感谢那些把好东西好方法共享出来的网友们!
用到的源码包如下,建议新手全部放在/home/XXX/downloads/ 目录下。
=======================================================================
arm-linux-gcc-3.4.1.tar.gz
glibc-2.3.3.tar.gz
linux-2.6.8.tar.gz
crosstool-0.43.tar.gz
binutils-2.15.tar.gz
glibc-linuxthreads-2.3.3.tar.gz
========================================================================
1. ubuntu10.04下默认的GCC版本是4.4.3,但这个不是版本越高越好,怨念啊!版本太高,对语法什么的要求也高,编译不成功,降低版本吧。使用4.1的:
#apt-get install gcc-4.1 //安装4.1的GCC
#rm /usr/bin/gcc //删除之前4.4.3的快捷方式,4.4.3的GCC并未删除
#ln -s /usr/bin/gcc-4.1 /usr/bin/gcc //建立4.1的快捷方式
这是由于crosstool中定义了GCC的版本的上下线,最高也就到4.1,在其配置的时候会对这个版本信息进行检测,不在其规定范围就报错了。
2. 修改sh版本,把dash改为bash
#ls -la /usr/bin //若链接显示dash则运行
#dpkg --reconfigure dash
选择no,删除dash。(在建立交叉编译环境后,可以在运行该命令选择yes重新安装dash)。
3. 解压crosstool源码包,修改配置文件。
$tar xzvf crosstool-0.43.tar.gz
$cd crosstool-0.43
建立自己的脚本配置文件arm-softfloat (由demo-arm-softfloat.sh文件修改)
$cp demo-arm-softfloat.sh arm-softfloat.sh
$vim arm-softfloat.sh
其中
TARBALLS_DIR=$HOME/downloads //表示下载的源码的存放目录
RESULT_TOP=/opt/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
$vim 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
注意自己的工具的版本最好和这里是对应的,省的编译器找不到报错或是连网下载浪费时间。
$vim arm.dat
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-softfloat-linux-gnu
TARGET_CFLAGS="-O"
4. 编译执行sh arm-softfloat.sh,一个小时左右你就可以看到/opt/crosstool/目录下有你想要的东西了。
常见错误:
(1)权限问题:提示不能建立目录或是其他拒绝访问的信息
方法: 切换到root身份执行,然后再切换回来
(2)安装过程中提示bison、flex 、build-essential、patch 、libncurses5-de相关字眼的错误
解决方法:切换到root用户,直接执行
#apt-get install XXX //XXX指相应的要安装的东西
(3)关于linux-2.6.8的"*current_menu"
解决办法:
将linux-2.6.8目录下的/script/kconfig/mconf.c中的91行
static struct menu *current_menu;
改为
struct menu *current_menu;
即可。
(4)提示ld as " version too old ";其实这还是一个ubuntu自带的ld as版本太高的原因,
解决方法:
这里推荐安装binutils的2.18版本,然后替换系统中的2.20版本。方法如下
解压源码包
$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文件
#rm /usr/bin/ld /usr/bin/as
#ln –s /tmp/binutils/bin/ld /usr/bin/ld
#ln –s /tmp/binutils/bin/as /usr/bin/as
然后可运行ld –v 和as –v 查看版本是否为2.18。
转发至微博
转发至微博
评论