在Redhat 9下建立 ARM-Linux 交叉编译环境
2009-03-27 15:30
369 查看
今天参照Tekkaman的“在 Fedora 下建立 ARM-Linux 交叉编译环境 ”建立了 for ARM9TDMI的交叉编译环境,做一个记录,以免遗忘。
另一个参考:ARM Linux 交叉编译 工具链 制作攻略 (转)
Linux-Libc-Headers (2.6.12.0) - 2,481 KB:
下载:http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-2.6.12.0.tar.bz2
其他包下载地址:
http://mirrors.shlug.org/gnu/
下面转帖::
crosstool是由美国人Dan Kegel(毕业于加(利福尼亚)州工学院)开发的一套可以自动编译不同匹配版本gcc和glibc,并作测试的脚本程序。写这篇文章时的最新版本是0.43。
下载地址http://kegel.com/crosstool/crosstool-0.43.tar.gz
在http://kegel.com/crosstool/crosstool-0.43/buildlogs/可以看到各种CPU和GCC+Glibc版本那些已经编译成功,那些部分成功,那些彻底失败。如果你不是编译器开发者,就按着上面做吧。
你也可以到http://kegel.com/crosstool/#download看看是否有更新的版本。
第一步:保证你装Fedora7时,安装了需要的软件开发工具。在《 [b]ARM Linux 交叉编译 工具链 制作攻略》中说:“0、制作之前确保你的机子上有如下几个工具:bison、flex、build-essential。” 我的机子上有bison和flex,至于build-essential是包含一个在建立deb包过程中起关键作用的包的信息列表,Fedora下并不需要。
第二步:下载crosstool,并解压到你的工作目录。
tar -xzvf crosstool-0.43.tar.gz cd crosstool-0.43 |
#!/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/tekkaman/working/source RESULT_TOP=/home/tekkaman/working/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 //上面表示要选工具链的版本号!"#"起注释功能!可以选择一行! //这行是默认的工具链的版本号(最新的),我就是用这一行,也可以选别的。 echo Done. |
例如:我在demo-arm9tdmi.sh中选的是eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest ,那么我就打开arm9tdmi.dat 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" |
根据《构建嵌入式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}目录中看到想要的工具链、头文件、库文件等文件了,[b]在[b]${RESULT_TOP}/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/tmp文件夹中有Hello,world!测试程序[/b][/b]。一般不会失败,我编了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内核)测试,都没问题。证明编译出的程序绝对可用!
注意:crosstool -0.43目录下的PATCH目录中有各个工具链的补丁,如果在编译过程中有错误,可以在crosstool-0.43目录下build目录中的解压后的源文件中打上补丁(我没打补丁也编译成功了,呵呵)。另外,如果不想每次编译时都有浪费时间的解压过程,可以在eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest 末尾处加--nounpack表示不解压(当然前提是你已经自行解压源码包到了对应的目录/build/gcc-4.0.2-glibc-2.3.5-tls/arm-9tdmi-linux-gnu里了,也可以在这时给其打补丁).
[/b]
相关文章推荐
- 建立交叉编译环境(arm-linux-gcc)
- 如何建立Linux下的ARM交叉编译环境
- 建立arm-linux-gcc交叉编译环境 (2.95.3和3.4.1稍有不同)
- 建立arm-linux-gcc交叉编译环境
- Ubuntu系统(Ubuntu 10.04 LTS )arm- linux-gcc交叉编译环境的建立
- 建立arm-linux-gcc交叉编译环境
- arm-linux-gcc交叉编译环境的建立
- linux下arm-none-linux-gnueabi交叉编译环境的建立
- arm-linux-gcc交叉编译环境的建立(使用cross包)
- 在Fedora13下用cross-ng建立arm-linux交叉编译环境
- arm-linux-gcc交叉编译环境的建立
- (转)在fedora12下用crosstool-ng建立arm-linux交叉编译环境
- arm-linux-gcc交叉编译环境的建立(使用cross包)
- eclipse建立arm-linux-gnueabi交叉编译环境
- 在Fedora13下用cross-ng建立arm-linux交叉编译环境
- 建立arm-linux-gcc交叉编译环境
- ARM-Linux下用Servfox和Spcaview 建立嵌入式视频监控系统
- ARM-linux异常向量表的建立
- Ubuntu 9.10上建立ARM-Linux交叉编译环境
- 建立GNU/Linux ARM交叉编译工具链