嵌入式Linux开发环境的建立
[实验内容]
通过运用crosstool-0.43.tar.gz脚本工具包来制作自己的交叉编译器。此编译器能够编译u-boot-1.3.1, linux-2.6.22.6内核。
[实验环境]
1. Ubuntu8.10发行版
2. linux-2.6.22.6内核
3. FS2410平台
[实验步骤]
crosstool是由美国人Dan Kegel 开发的一套可以自动编译不同匹配版本gcc和glibc、并作测试的脚本程序。
下载地址: h t t p://kegel.com/crosstool/crosstool-0.43.tar.gz
(1)工具的安装
制作之前确保你的系统中已经安装了下面的工具包:bison, flex, build-essential。
安装方法: 1.
sudo apt-get install XXX
sudo apt-get install bison flex build-essential patch libncurses5-dev
2. sudp dpkg -i XXX.deb
常用的软件包有:
bison_13a2.3.dfsg-4build1_i386.deb
build-essential_11.4_i386.deb
flex_2.5.33-10build1_i386.deb
libncurses5-dev_5.6+20071124-1ubuntu2_i386.deb
m4_1.4.8-1build1_i386.deb (首先安装)
patch_2.5.9-5_i386.deb
注意:以上都是在普通用户下进行的。
(2) 降Gcc的版本
Ubunut8.10默认的gcc为4.3.2, 这个版本对语法要求较高,目前不宜选用,选择gcc-4.1,同时保留gcc4.3.2。
安装gcc-4.1有两种方法:
1. sudo apt-get install gcc-4.1
2. 用sudo dpkg -i xxx.deb
安装包下列软件包:
gcc-4.1_4.1.2-23ubuntu3_i386.deb
gcc-4.1-base_4.1.2-23ubuntu3_i386.deb
cpp-4.1_4.1.2-23ubuntu3_i386.deb
安装好以后,需要修改gcc的软件链接:
sudo rm /usr/bin/gcc
(删除gcc ,它是gcc4.3.2的软链接文件)
sudo ln -s /usr/bin/gcc-4.1
(建立gcc到gcc-4.1的软链接)
(3) 修改sh版本
如果运行 ls -la /bin/sh
看到的链接是dash,则请运行以下命令:
sudo dpkg-reconfigure dash
选择no 以删除 dash。
(4) 我们需要建立两个目录: crosstool 和 downloads
crosstool 是存放工具链的目录,downloads 是存放编译crosstool所需的源码包的目录。
mkdir /home/boat_man/downloads
cp gcc-3.4.5.tar.gz glibc-2.3.6.tar.gz linux-2.6.22.6.tar.gz crosstool-0.43.tar.gz binutils-2.15.tar.gz glibc-linuxthreads-2.3.3.tar.gz linux-libc-headers-2.6.12.0.tar.bz2 /home/boat_man/downloads
如果downloads 下没有这些源码包,在编译的时候crosstool 会自己下载,但是下载的时间比较长,所以我们还是把这些软件包提前下载下来,放到downloads 下。
(5) 解压crosstool软件包,并进入其目录,查看重要的脚本文件
cd /home/boat_man/downloads
tar xzvf crosstool-0.43.tar.gz
cd crosstool-0.43
在这个目录下有很多所支持的处理器对应的 .sh 脚本和 .dat 配置文件。我们选择支持软浮点运算的demo-arm-softfloat.sh
。
(6) 修改 demo-arm-softfloat.sh
vim demo-arm-softfoat.h
修改下面两句:
TARBALLS_DIR=$HOME/downloads
RESULT_TOP=/opt/crosstool
为:
TARBALLS_DIR=/home/boat_man/dowloads (你的源码存放的目录)
RESULT_TOP=/home/boat_man/crosstool (你即将生成的工具链存放目录)
(7) 修改 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.22.6
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6
注意:这里表示我们使用的源码包的版本,必须
downloads中的源码版本一致。
(8) ./demo-arm-softfloat.sh
执行这个脚本,在我的机器上大约半个多小时可以编完。
(9) 修改环境变量
sudo vim /etc/bash.bashrc
在文件末尾加上如下语句:
PATH=$PATH:/home/boat_man/crosstool/gcc3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:
export PATH
(10)重新打开一个终端
arm-softfloat-linux-gnu-gcc -v
如果最后一行能显示出: gcc version 3.4.5
,那说明你的交叉工具链构建成功了。
(11) 恢复gcc 版本和 sh
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
sudo dpkg-reconfigure dash
选择yes 以重新安装 dash。
OK,我们的交叉编译工具arm-softfloat-linux-gnu-gcc
就算大功告成了!