分类: LINUX
2008-07-09 00:41:46
Jacky Xu @ 2008.7.8
以前在ARM-Linux 2.4.18内核上搞东西,交叉编译工具2.95.3直接解压就能使用,非常方便,不过内核日新月异,最新版都2.6.25了,所以决定全面升级,先编一套针对2.6高版本内核的高版本工具。
本来是按照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,内容如下:
|
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
|
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.,大功告成了哈!
-----------------------------------
Jacky_Xu @ 2008.7.8
MSN:
E-mail:
-----------------------------------