- 论坛徽章:
- 0
|
Jacky Xu @ 2008.7.8,
sure365@gmail.com
,
sure365@hotmail.com
以前在ARM-Linux 2.4.18内核上搞东西,交叉编译工具2.95.3直接解压就能使用,非常方便,不过内核日新月异,最新版都2.6.25了,所以决定全面升级,先编一套针对2.6.22内核的高版本工具。
本来是按照binutils->glibc->gcc->glibc->gcc的步骤手动编译的,不过尝试了两个晚上,宣告失败,很繁琐,而且容易失败,即使编译成功,也有可能使用时出问题,所以直接用crosstool脚本编译算了,以后打算制作一套LFS来彻底搞一遍。。。制作的过程参照了Aaron Wong的Building arm-linux toolchain for ARM/XScale-iWMMXt(new ABI).pdf一文。
一、主机环境
VMWare5.5.3
Linux version 2.4.20-8, RedHat9;
gcc version 3.4.4, Thread model: posix;
GNU Make 3.81;
二、所需源文件
1、binutils-2.18.tar.bz2
2、binutils-2.18-posix-1.patch
3、glibc-2.6.1.tar.bz2
4、glibc-ports-2.6.1.tar.bz2
5、glibc-2.6.1-alpha_ioperm_fix-1.patch
6、glibc-2.6.1-cross_hacks-1.patch
7、glibc-2.6.1-hppa_nptl-1.patch
8、glibc-2.6.1-libgcc_eh-1.patch
9、glibc-2.6.1-localedef_segfault-1.patch
10、glibc-2.6.1-mawk_fix-1.patch
11、glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch
12、glibc-2.6.1-sysdep_cancel-1.patch
13、gcc-4.2.1.tar.bz2
14、gcc-4.2.1-posix-1.patch
15、gcc-4.2.1-cross_search_paths-1.patch
16、linux-headers-2.6.22.6-09032007.tar.bz2
17、crosstool-0.42.tar.gz
18、crosstool-0.42-mg2.patch
三、制作流程
1、把这些源文件解压到crosstool中$BUILD_DIR指定的目录,并打补丁。
我的是/home/toolchains/crosstool-0.42/build/arm-s3c2410-linux-gnu/gcc-4.2.1-glibc-2.6.1,没有用crosstool自动下载。
其中打glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch补丁时出现问题,提示找不到文件,从patch包里面找到并打开glibc-2.6/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h这个文件,手动添加patch内容。
2、解压、patch好crosstool-0.42。
3、拷贝、修改一个cpu.dat。
我的是用arm9tdmi.dat文件,修改一下存为s3c2410.dat,内容如下:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-s3c2410-linux-gnu
TARGET_CFLAGS="-O"
USE_SYSROOT=1
4、拷贝、修改一个gcc-glibc.dat文件。
我用的是gcc-4.1.0-glibc-2.3.6.dat,修改一下存为s3c2410-gcc-glibc.dat,内容同如下:
BINUTILS_DIR=binutils-2.18
GCC_DIR=gcc-4.2.1
GLIBC_DIR=glibc-2.6.1
LINUX_SANITIZED_HEADER_DIR=linux-headers-2.6.22.6
GLIBCPORTS_FILENAME=glibc-ports-2.6.1
GLIBC_ADDON_OPTIONS=ports,nptl
5、拷贝、修改一个最终执行的.sh文件。
我用的是demo-arm9tdmi.sh,修改一下存为s3c2410.sh,内容如下:
#!/bin/sh
set –ex
TARBALLS_DIR=/home/toolchains/downloads
RESULT_TOP=/opt/crosstool
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
mkdir -p $RESULT_TOP
eval `cat s3c2410.dat s3c2410-gcc-glibc.dat` sh all.sh --notest
echo Done.
6、修改all.sh文件
注释掉getandpatch.sh部分的判断语句,阻止它自动下载源码包;
注释掉opt_no_build部分的判断语句,阻止它编译过程中清除掉已编译好的源码包,因为我们所有的包都放在$BUILD_DIR里,不能被清理掉;
注释掉判断编译环境的语句,阻止它修改GCC_HOST,此处关键字是GCC_HOST=`echo $GCC_HOST | sed s/-/-host_` ;; 。
7、创建以上脚本中定义好的各个文件夹,并且修改/opt/crosstool文件夹读写权限。
8、切换到非root的帐户去执行s3c2410.sh文件。
经过大概2个小时的等待,终于编好了,最后提示:
testhello: C compiler can in fact build a trivial program.,大功告成了哈!
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/58780/showart_1076533.html |
|