- 论坛徽章:
- 0
|
前段时间研究uboot的修改,只是关注了大概框架的修改,当时下载的uboot1.2.0,交叉编译链也是下载的现成的,cross-2.95.3,当时就是编译不过去。这种标准的文件没有进行修改过编译出问题很奇怪,在网上找到了一些信息,这个交叉编译链只支持到uboot1.1.4。于是又下载了uboot1.1.4,编译成功,很兴奋阿。
交叉工具链下载地址:
ftp://ftp.arm.linux.org.uk/pub/linux/arm/toolchain/
后来在移植内核时发现高版本的内核中已经加入了对s3c2440的支持,所以决定采用高版本的内核2.6,同时uboot决定采用1.2.0。按照上次的思路下载了最新的cross-3.2,居然编译不了,连1.1.4都编译不了。这种情况只能归咎于版本问题。这种现成的交叉编译链有一定的局限性,比如它采用的gcc是哪个版本,
是否能编译我需要的内核和uboot? 交叉编译链是需要根据自己的情况制作的。 幸好有crosstool这个工具。省去了一步一步制作的麻烦。
http://kegel.com/crosstool/
下载crosstool-0.43.tar.gz,解压。
我的linux为redhat 9。
硬件平台为arm9,s3c2440
首先下载制作交叉编译链所需的文件,地址:
ftp.gnu.org
binutils-2.15.tar.bz2
gdb-6.5.tar.bz2
gcc-4.1.0.tar.bz2
gcc-3.3.6.tar.gz
glibc-linuxthreads-2.3.2.tar.gz
glibc-2.3.2.tar.gz
linux-libc-headers-2.6.12.0.tar.bz2
linux-2.6.10.tar.gz
将这些文件存放在$HOME的downloads目录下,不用解压。
进入crosstool-0.43目录中,执行cp demo-arm.sh arm.sh 复制一个模板进行修改。
执行vi 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.txt
set -ex
TARBALLS_DIR=$HOME/downloads //制作交叉编译所需文件的存放位置!
RESULT_TOP=/opt/crosstool //生成的交叉编译链的存放地址,注意你是否对该文件有写权限
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//这块根据需要我选择了高版本的gcc-4.1.0
echo Done. //上面表示你要选工具链的版本号!"#"起注释功能!我们可以选择一行!
打开crosstool-0.43目录下的arm.dat文件,内容如下:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux-gnu
TARGET_CFLAGS="-O"
这里TARGET=需要根据自己的情况修改一下,比如目前为arm-linux-gnu那么最终编译完成后我的gcc为
arm-linux-gnu-gcc。
打开crosstool-0.43目录下的gcc-4.1.0-glibc-2.3.2-tls.dat文件,内容如下:
BINUTILS_DIR=binutils-2.15
GCC_COR_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.10
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"
注意:这里边的几个版本的文件必须在$HOME/downloads文件夹下有。
到这里就设置完了。
到crosstool-0.43目录下执行./arm.sh经过大概1小时就OK了,然后设置环境变量。
PATH=/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-linux-gnu/bin:$PATH
具体设置方法可参考linux应用中的环境变量及设置。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/80919/showart_1327724.html |
|