Ubuntu9.10构建ARM-Linux交叉编译器
1.制作之前确保你的机子上有如下几个工具:bison、flex、build-essential、patch、libc6-dev。
build-essential主要是用于提供GCC、GLIBC等必要的编译资源,一般做开发的人员机子上应该都会有。如果没有:sudo apt-get install......
ubuntu9.10自带的是gcc-4.4无法用crosstool正常编译交叉编译器,所以必须安装gcc-4.1,但是不必卸载4.4。方法是用新立得软件包管理器安装gcc-4.1。
sudo rm /usr/bin/gcc //删除gcc,它只是一个到gcc-4.4的软连接
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc //建立gcc-4.1软连接
ls -la /bin/sh
看到/bin/sh其实是一个指向dash的软链接,则请运行以下命令,将/bin/sh链接到bash
sudo mv /bin/sh /bin/sh.old
sudo ln -sf bash /bin/sh
2.下载crosstool,解压到工作目录
A.crosstool是由美国人Dan Kegel开发的一套可以自动编译不同匹配版本gcc和glibc,并作测试的脚本程序。下载地址:http://kegel.com/crosstool/crosstool-0.43.tar.gz
在http://kegel.com/crosstool/crosstool-0.43/buildlogs/可以看到各种CPU和GCC+Glibc版本那些已经编译成功,那些部分成功,那些彻底失败。
B.tar -zxvf crosstool-0.43.tar.gz
cd crosstool-0.43
在crosstool文件中,找到你要交叉编译的CPU所对应的脚本,如我要交叉编译的CPU是S3C2440,则选用demo-arm9tdmi.sh。以下是其内容和所需的修改:
#!/bin/sh
# This script has one line for each known working toolchain
# for this architecture. Uncomment the one you want.
# Generated by generate-demo.pl from buildlogs/all.dats.txt
set –ex
TARBALLS_DIR=/home/liao/crosstool/source
RESULT_TOP=/home/liao/crosstool
//这两行是需要修改的参数
//TARBALLS_DIR是下载的工具源码压缩包的存放目录,RESULT_TOP是要生成的工具链的存放目录
//一定要改到有写权限的目录,不然无法编译,如用root登录进行编译,可能会出错
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
# Really, you should do the mkdir before running this,
# and chown /opt/crosstool to yourself so you don't need to run as root.
mkdir -p $RESULT_TOP
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
eval `cat arm9tdmi.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest
//上面表示要选工具链的版本号!这里我写了gcc-4.1.1-glibc-2.3.2.dat版本
echo Done.
注意:如果要使用GDB调试工具,记得在后面加上--gdb,Crosstool会编译出arm-9tdmi-linux-gnu-gdb、arm-9tdmi-linux-gnu-gdbtui和gdbserver(开发板使用)。但是要安装库libncurses5-dev
C.根据你所选的工具链的版本号,打开相应的.dat文件,打开gcc-4.1.1-glibc-2.3.2.dat,其修改后内容如下:
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.1
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.24
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
到网上去下载红色标记的.bz2源码包,注意版本,下载后存放到${TARBALLS_DIR}目录。
这一步可以省略,因为运行demo-arm9tdmi.sh时在${TARBALLS_DIR}目录没有源码包,会自动下载,建议事先下载,节约时间。以下是源码包链接地址。
linux-2.6.24.tar.bz2 ftp://ftp.cn.kernel.org/pub/linux
cross-0.43.tar.gz http://kegel.com/crosstool/crosstool-0.43.tar.gz
gcc-4.1.1 http://ftp.gnu.org/gnu/gcc/gcc-4.1.1/
gcc-3.3.6.tar.bz2
gcc-core-3.3.6.tar.bz2 http://ftp.gnu.org/gnu/gcc/gcc-3.3.6/
binutils-2.16.1.tar.bz2 http://ftp.gnu.org/gnu/binutils/
glibc-linuxthreads-2.3.2
glibc-2.3.2.tar.bz2 http://ftp.gnu.org/gnu/glibc/
linux-libc-headers-2.6.12.0 http://ep09.pld-linux.org/~mmazur/linux-libc-headers/
gdb-6.5.tar.bz2 http://ftp.gnu.org/gnu/gdb/
3.进入crosstool-0.43,运行demo-arm9tdmi.sh,等待一阵English飘过....................