Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2021836
  • 博文数量: 413
  • 博客积分: 10926
  • 博客等级: 上将
  • 技术积分: 3862
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-09 18:14
文章分类

全部博文(413)

文章存档

2015年(5)

2014年(1)

2013年(5)

2012年(6)

2011年(138)

2010年(85)

2009年(42)

2008年(46)

2007年(26)

2006年(59)

分类: LINUX

2006-03-06 16:56:41

一、准备
    binutils-2.13.2.1.tar.bz2 二进制工具包
    gcc-3.2.tar.gz gcc编译器
    glibc-2.2.5.tar.gz C库
    glibc-linuxthreads-2.2.5.tar.gz 线程库
    linux-2.4.18.tar.bz2 2.4.18内核源文件
    patch-2.4.18-rmk7.bz2 rmk7的补丁
    errlist-arm.patch errlist的Patch
    unwind-arm.patch unwind的Patch

    注意,实际发现用binutils-2.13.tar.bz2是有问题。

二、环境

1. 目录结构
               
 目录  说明
  -arm9/  arm9工程目录
 /arm9/build-tools/3.2  用于构建gcc3.2工具链
 /arm9/tools/3.2/bin  工具链工具所在目录
 /arm9/tools/3.2/arm-linux  目标板软件所在目录
 /arm9/kernel  内核所在目录


2. 主要路径
内核头文件: /arm9/kernel/linux-2.4.18-rmk7/include
交叉编译器: /arm9/tools/3.2/bin

3. Redhat 9.0

4. 普通用户权限编译安装
使用root用户安装是非常危险的!如果配置错误,很有可能会覆盖本地的文件破坏系统。

三、步骤

安装前,可以先把交叉编译器的路径加入当前console的PATH中。当然你可以在安装完binutils之后加入。
export PATH=$PATH:/arm9/tools/3.2/bin/

将binutils-2.13.2.1.tar.bz2,gcc-3.2.tar.gz,
glibc-2.2.5.tar.gz,
glibc-linuxthreads-2.2.5.tar.gz,
errlist-arm.patch,
unwind-arm.patch
拷贝到/arm9/build-tools/3.2目录下。

将linux-2.4.18.tar.bz2和patch-2.4.18-rmk7.bz2拷贝到/arm9/kernel目录下。

好了,开始安装工具链了。

1. 安装内核源文件
目录: /arm9/kernel

a) 解压 linux-2.4.18内核
tar xfvj linux-2.4.18.tar.bz2

b) 打rmk7的补丁
bzcat patch-2.4.18-rmk7.bz2 | (cd linux; patch -p1)

c) 改名成 linux-2.4.18-rmk7
mv linux linux-2.4.18-rmk7

c) 修改arch
修改Makefile中的ARCH := arm

d) make menuconfig
指定一下系统用SA1100吧,保存退出

e) 修改include/asm/下的arch和proc链接
将arch链接到arch-sa1100,proc链接到proc-armv

2. 安装binutils
目录:/arm9/build-tools/3.2

a) 解压缩
tar xfvj binutils-2.13.tar.bz2

b) 配置
./configure --target=arm-linux --prefix=/arm9/tools/3.2 --with-headers=/arm9/kernel/linux-2.4.18-rmk7/include

c) 编译
make

d) 安装
make install

e) 检查
arm-linux-ld --version

3. 安装启动编译器boot-gcc
目录:/arm9/build-tools/3.2

a) 解压缩
tar xfvz gcc-3.2.tar.gz

b) 修改
文件:gcc-3.2/gcc/config/arm/t-linux
源:
TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC
目的:
TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h
在文件末尾新建行添加:
T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h

c) 拷贝一份,名为boot-gcc-3.2
cp gcc-3.2 boot-gcc-3.2 -r

d) 配置
配置boot-gcc,进入boot-gcc-3.2目录
./configure --target=arm-linux --prefix=/arm9/tools/3.2 --enable-languages=c --disable-threads --disable-shared --with-headers=/arm9/kernel/linux-2.4.18-rmk7/include

e) 编译
make

f) 安装
make install

g) 检查
arm-linux-gcc --version

4. 安装glibc
目录:/arm9/build-tools/3.2

a) 解压缩
tar xfvz glibc-2.2.5.tar.gz
tar xfvz glibc-linuxthreads-2.2.5.tar.gz -C glibc-2.2.5

b) 补丁
cat errlist-arm.patch | (cd glibc-2.2.5 ; patch -p1)
cat unwind-arm.patch | (cd glibc-2.2.5 ; patch -p1)

c) 配置
CC=arm-linux-gcc ./configure arm-linux --build=i686-pc-linux-gnu --prefix=/arm9/tools/3.2/arm-linux --with-headers=/arm9/kernel/linux-2.4.18-rmk7/include --enable-add-ons=linuxthreads --program-prefix=arm-linux-

d) 编译
make

e) 安装
make install


5. 安装c,c++编译器
目录:/arm9/build-tools/3.2/gcc-3.2

a) 配置
./configure --target=arm-linux --prefix=/arm9/tools/3.2 --enable-languages=c,c++ --with-headers=/arm9/kernel/linux-2.4.18-rmk7/include

b) 编译
make

c) 安装
make install

d) 检查
arm-linux-g++ --version

6. 为目标板重新编译glibc,取得ld.so
因为第4步编译的glibc指定了--prefix=/...,所以到了目标板会出现ld.so向目标板的/...的目录下寻找库文件。
通常库文件存放在目标板的/lib目录下,当然ld.so是找不到了。
这一步的目的,为目标板再编译一个ld.so,让他去/lib下找动态链接库文件。

a) 进入glibc-2.2.5目录

b) make clean

c) 配置
CC=arm-linux-gcc ./configure arm-linux --build=i686-pc-linux-gnu --prefix=/usr --with-headers=/arm9/kernel/linux-2.4.18-rmk7/include --enable-add-ons=linuxthreads --program-prefix=arm-linux-

d) make

e) 将ld.so拷贝出来,放到rootfs中/lib下。

注意,千万不要make install,否则,你的本地glibc就有可能会被交叉编译的glibc给覆盖了。

好了,收工啦!

from: http://www.mcublog.com/more.asp?name=loys&id=3725

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