一、准备
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
阅读(2104) | 评论(0) | 转发(0) |