Chinaunix首页 | 论坛 | 博客
  • 博客访问: 844502
  • 博文数量: 489
  • 博客积分: 475
  • 博客等级: 下士
  • 技术积分: 3087
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 16:28
文章分类

全部博文(489)

文章存档

2013年(7)

2012年(301)

2011年(181)

分类:

2012-01-12 13:40:35

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;

二、所需源文件

1binutils-2.18.tar.bz2

2binutils-2.18-posix-1.patch

3glibc-2.6.1.tar.bz2

4glibc-ports-2.6.1.tar.bz2

5glibc-2.6.1-alpha_ioperm_fix-1.patch

6glibc-2.6.1-cross_hacks-1.patch

7glibc-2.6.1-hppa_nptl-1.patch

8glibc-2.6.1-libgcc_eh-1.patch

9glibc-2.6.1-localedef_segfault-1.patch

10glibc-2.6.1-mawk_fix-1.patch

11glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch

12glibc-2.6.1-sysdep_cancel-1.patch

13gcc-4.2.1.tar.bz2

14gcc-4.2.1-posix-1.patch

15gcc-4.2.1-cross_search_paths-1.patch

16linux-headers-2.6.22.6-09032007.tar.bz2

17crosstool-0.42.tar.gz

18crosstool-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、解压、patchcrosstool-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.,大功告成了哈!
-----------------------------------
    Jacky_Xu @ 2008.7.8
    MSN: 

    E-mail: 
-----------------------------------

阅读(677) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~