当前位置:文档之家› ubuntu10.04全过程创建交叉编译环境

ubuntu10.04全过程创建交叉编译环境

ubuntu10.04下建立交叉编译工具链(支持软浮点)全过程
参考了网上的不少的资料,花了五个小时终于完成了,记录下全过程供大家分享。

用到的源码包如下,建议新手全部放在/home/usr/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
binutils-2.18.tar.gz --安装用
编译一次至少要花半个小时,如果因为依赖软件没有安装中途会报错退出,只有从头再来,那样很浪费时间的。

sudo apt-get install bison flex build-essential patch libncurses5-dev
由于ubuntu10.04自带的ld ,as版本太高的原因,需要安装binutils的2.18版本,然后替换系统中的2.20版本。

方法如下:
$cd downloads
$tar xzvf binutils-2.18.tar.gz
$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文件
$sudo rm /usr/bin/ld /usr/bin/as //删除2.20的ld,as
$sudo ln –s /tmp/binutils/bin/ld /usr/bin/
$sudo ln –s /tmp/binutils/bin/as /usr/bin/
然后可运行ld –v 和as –v 查看版本是否为2.18。

安装2.18版本可解决出现的 ld as " version too old "问题。

2. ubuntu10.04下默认的GCC版本是4.4.3,但这个不是版本越高越好,版本太高,对语法什么的要求也高,编译不成功,降低版本吧:
#sudo apt-get install gcc-4.1 //安装4.1的GCC,需要联网
#sudo rm /usr/bin/gcc //删除之前4.4.3的快捷方式,4.4.3的GCC并未删除#sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc //建立4.1的快捷方式
这是由于crosstool中定义了GCC的版本的上下线,最高也就到4.1,在其配置的时候会对这个版本信息进行检测,不在其规定范围就报错了。

3.修改sh版本
如果运行
ls -la /bin/sh
看到链接的是 dash ,则请运行以下命令
sudo dpkg-reconfigure dash
选择 no 以删除 dash
此处如果不改好的话,编译时会出现错误
(在建立交叉编译环境后,可以在运行该命令选择yes重新安装dash)。

4. 解压crosstool-0.43源码包,修改配置文件。

$tar xzvf crosstool-0.43.tar.gz
$cd crosstool-0.43 //下面的操作路径都在此文件夹
$cp demo-arm-softfloat.sh arm-softfloat.sh //复制并建立新文件arm-softfloat.sh $gedit arm-softfloat.sh //用文本编辑器打开,也可用vim打开。

修改文件中的内容:
TARBALLS_DIR=$HOME/downloads //表示下载的源码的存放目录
RESULT_TOP=/opt/crosstools //表示生成的工具链的存放目录
为:
TARBALLS_DIR=/home/usr/downloads(源码存放目录)
RESULT_TOP=/home/usr/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文件,过程如下:
$gedit 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
注意自己的工具的版本最好和这里是对应的,省的编译器找不到报错或是连网下载浪费时间。

再修改arm.dat
$gedit arm.dat
修改为:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-softfloat-linux-gnu
TARGET_CFLAGS="-o"
5. 将linux-2.
6.8源码包目录下的/script/kconfig/mconf.c中的91行
static struct menu *current_menu;
改为
struct menu *current_menu;
这样是为了解决"*current_menu"相关的错误。

6. 执行sh arm-softfloat.sh,一个小时左右你就可以看到/home/usr/crosstools目录下有你想要的东西了。

7.修改环境变量
修改环境变量有多种方法我们介绍两种
(1)第一种方法:在当前用户目录的.bashrc中添加如下环境变量的内容
$export
PATH=$PATH:/home/linux/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/b in
(2)第二种方法:或直接修改/home/linux/.bashrc文件
$cd /home/linux
$gedit .bashrc
在第一行添加如下内容:
PATH=$PATH:/home/linux/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/b in
然后执行
$source .bashrc
8.执行如下命令
$ arm-softfloat-linux-gnu-gcc -v
显示
Reading specs from /home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/lib/ gcc/arm-softfloat-linux-gnu/3.4.5/specs
Configured with: /home/david/downloads/crosstool-0.43/build/arm-softfloat-linux-gnu/gcc-3.4.5-gli bc-2.3.6/gcc-3.4.5/configure --target=arm-softfloat-linux-gnu --host=i686-host_pc-linux-gnu
--prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux -gnu --with-float=soft --with-headers=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat -linux-gnu/arm-softfloat-linux-gnu/include
--with-local-prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-soft float-linux-gnu/arm-softfloat-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1
ok交叉编译环境创建成功!
9.恢复我们修改的系统配置:
恢复gcc为4.4
$sudo rm /usr/bin/gcc
$sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
重新安装dash
$sudo dpkg-reconfigure dash 选择 yes 以重新安装 dash
到此为止就大功告成了,哈哈。

相关主题