这次建立交叉编译环境我主要参考的资料是:
1、《构建嵌入式Linux系统》
2、《嵌入式设计及Linux驱动程序开发指南——基于ARM9处理器(第2版)》
3、《 ARM Linux 交叉编译 工具链 制作攻略》
4、《 AT91RM9200引导程序的建立--------建立交叉编译工具链》
Host CPU:i686 RAM: 768MB OS: Fedora 7
TARGET CPU :ARM9TDMI OS : Linux-2.6.22.2/2.6.15.4
我在Fedora7下快速、成功地建立ARM-Linux交叉编译环境,是看了《嵌入式设计及Linux驱动程序开发指南——基于ARM9处理器(第2 版)》中关于crosstool的介绍。
| 
 | 
| 
 #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 //上面表示要选
工具链的版本号!"#"起注释功能!可以选择一行! //这行是默认的
工具链的版本号(最新的),我就是用这一行,也可以选别的。 echo 
Done. | 
| 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" | 
| 
 
 | 
这一步可以省略,因为如果运行demo-arm9tdmi.sh 时在${TARBALLS_DIR}目 录下没有相应的源码包,会自动下载其.bz2源码包。但是建议事先用下载工具下好,这样更省时间。
根据《构建嵌入式Linux系统》中的介绍,如果为不同的内核编译交叉编译工具,交叉编译工具要根据其内核重新编译过。由于我想使用最新的 2.6.22.2 内核,所以在编译完以上配置的工具链后,我将“LINUX_DIR=linux-2.6.15.4 ”改成“LINUX_DIR=linux-2.6.22.2 ”,并下载linux-2.6.22.2.tar.bz2到${TARBALLS_DIR}目 录下,重新编译了一次。
最后一步:进入crosstool-0.43目录,输入./demo-arm9tdmi.sh,然后就是泡茶、看书。经过不到3小时的编译(公司的 烂电脑所用的时间,配置好的可以更快),就可以在${RESULT_TOP}目录中看到想要的工具链、头文件、库文件等文件 了,在${RESULT_TOP}/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/tmp文件夹中有Hello,world!测试程序。 一般不会失败,我 编了2.6.15.4内核和2.6.22.2内核都顺利结束,且移植U-boot1.2.0、Linux2.6.22.2、busybox1.9.0和其 他的驱动或应用程序都十分顺利,从没出过错!下载到S3c2410和S3c2440的开发板上(2.6.22.2内核)测试,都没问题。证明编译出的程序绝对可用!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在Fedora 8 下建立 ARM-Linux 交叉编译环境
    
        
             
    
             
        #!/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/tekkamanninja/embeddedLinux/ARM-Linux_source
            RESULT_TOP=/home/tekkamanninja/embeddedLinux/crosstool-4.1.1
            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 --gdb
            echo Done.
            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.2
            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文件夹,最后进入crosstool-0.43目录,输入./demo-arm9tdmi.sh,最后经过不到一个小时,编译成功!!!!
 
 
	 
