在Fedora 7 环境下配置ARM Linux 交叉编译 工具
1、从http://kegel.com/crosstool处下载crosstool-0.43.tar.gz放到/HOME下,并解压:tar -zxvf crosstool-0.43.tar.gz
假如你想要arm9tdmi上的工具链(其它工具链方法相同),进入crosstool-0.43目录,用文本编辑器打开demo-arm.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.txtset -ex
TARBALLS_DIR=$HOME/downloads //该行表示你即将下载的工具源码压缩包的存放目录!
RESULT_TOP=/opt/crosstool //该行表示将要生成的工具链的存放目录,最好改到有写权限的目录!opt:相当windows里的C:/Program file;
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 arm.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
eval `cat arm.datgcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest //我选的这行
echo down
上面表示你要选工具链的版本号!"#"起注释功能!我们可以选择一行!
打开crosstool-0.43目录下的arm9.dat文件,内容如下:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-unknown-linux-gnu
TARGET_CFLAGS="-O"这个文件一般用于设置一些变量,一般不用改,用默认即可!不过倒是可以将arm-unknown-linux-gnu改成arm-linux,到时候敲命令的时候也短些,所以我改了呵呵!
打开crosstool-0.43目录下的gcc-4.1.0-glibc-2.3.2-tls.dat文件(相信你也看到了,对应你上面选的),内容如下:
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.15.4
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread --enable-kernel=2.4.18"
然后到网上去下载上面红色标记的几个源码包,一般是下*.tar.bz2文件,(好像crosstool自己可以到网上搜索代码包,不过我用的迅雷下快些)。注意,不需要解压
如下我验证过的资源包地址:
binutils-2.16.1.tar.bz2ftp://ftp.gnu.org/gnu/binutils/binutils-2.16.1.tar.bz2
gcc-3.3.6.tar.bz2ftp://ftp.ntu.edu.tw/pub/gnu/gnu/gcc/gcc-3.3.6/gcc-3.3.6.tar.bz2
gcc-4.1.0.tar.bz2ftp://ftp.ntu.edu.tw/pub/gnu/gnu/gcc/gcc-4.1.0/gcc-4.1.0.tar.bz2
glibc-2.3.2.tar.bz2ftp://ftp.ntu.edu.tw/pub/gnu/gnu/glibc/glibc-2.3.2.tar.bz2
linux-2.6.15.4.tar.bz2ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.15.4.tar.bz2
linux-libc-headers-2.6.12.0.tar.bz2http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-2.6.12.0.tar.bz2
glibc-linuxthreads-2.3.2.tar.bz2ftp://ftp.ntu.edu.tw/pub/gnu/gnu/glibc/glibc-linuxthreads-2.3.2.tar.bz2
gdb-6.5.tar.bz2ftp://ftp.ntu.edu.tw/pub/gnu/gnu/gdb/gdb-6.5.tar.bz2
3、进入crosstool-0.43目录,输入./demo-arm.sh,照着网上兄弟说的,似乎也应该就成功了。可是却出现了下面的提示:(仅部分)
+ abort 'Don'/''t run all.sh or crosstool.sh as root, it'/''s dangerous'
+ echo 'Don'/''t' run all.sh or crosstool.sh as root, 'it'/''s' dangerous
Don't run all.sh or crosstool.sh as root, it's dangerous
看到了吧,人家不让在root用户下允许,说的是 " it's dangerous",
切换用户编译,一切OK。然后经过N(N>=4)小时的编译,就可以在你的/opt/crosstool目录中看到你想要的工具链,头文件,库文件等东东了!你可以把工具链所在目录加到环境变量PATH中: 终端中输入export PATH=/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-linux/bin:$PATH
vi /etc bashrc,现在就可以用了。编一个最简单的 hello.c,输入 arm-linux-gcc -o hello hello.c,然后 file hello,看到
hello: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.18, dynamically linked (uses shared libs), for GNU/Linux 2.4.18, not stripped
说明成功了。但是现在还没有完全成功,如果你再打开一个终端,会提示你找不到 arm-linux-gcc命令,还需要在 /etc/bashrc 的最后一行下面添加上 export PATH=/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-linux/bin:$PATH
然后就OK
注意:crosstool -0.43目录下的PATCH目录中有各个工具链的补丁,如果在编译过程中有错误,可以在crosstool-0.43目录下build目录中的解压后的源文件中打上补丁(我没打补丁也编译成功了,呵呵)。