|
一、准备
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. 目录结构
/home/zhaolei/arm9/ :arm9工程目录
/home/zhaolei/arm9/build-tools/3.2 :用于构建gcc3.2工具链
/home/zhaolei/arm9/tools/3.2/bin :工具链工具所在目录
/home/zhaolei/arm9/tools/3.2/arm-linux :目标板软件所在目录
/home/zhaolei/arm9/kernel :内核所在目录
2. 主要路径
内核头文件: /home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include
交叉编译器: /home/zhaolei/arm9/tools/3.2/bin
3. Redhat 9.0
4. 普通用户权限编译安装
使用root用户安装是非常危险的!如果配置错误,很有可能会覆盖本地的文件破坏系统。
三、步骤
安装前,可以先把交叉编译器的路径加入当前console的PATH中。当然你可以在安装完binutils之后加入。
export PATH=$PATH:/home/zhaolei/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
拷贝到/home/zhaolei/arm9/build-tools/3.2目录下。
将linux-2.4.18.tar.bz2和patch-2.4.18-rmk7.bz2拷贝到/home/zhaolei/arm9/kernel目录下。
好了,开始安装工具链了。
1. 安装内核源文件
目录: /home/zhaolei/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
目录:/home/zhaolei/arm9/build-tools/3.2
a) 解压缩
tar xfvj binutils-2.13.tar.bz2
b) 配置
./configure --target=arm-linux --prefix=/home/zhaolei/arm9/tools/3.2 --with-headers=/home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include
c) 编译
make
d) 安装
make install
e) 检查
arm-linux-ld --version
3. 安装启动编译器boot-gcc
目录:/home/zhaolei/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=/home/zhaolei/arm9/tools/3.2 --enable-languages=c --disable-threads --disable-shared --with-headers=/home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include
e) 编译
make
f) 安装
make install
g) 检查
arm-linux-gcc --version
4. 安装glibc
目录:/home/zhaolei/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=/home/zhaolei/arm9/tools/3.2/arm-linux --with-headers=/home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include --enable-add-ons=linuxthreads --program-prefix=arm-linux-
d) 编译
make
e) 安装
make install
5. 安装c,c++编译器
目录:/home/zhaolei/arm9/build-tools/3.2/gcc-3.2
a) 配置
./configure --target=arm-linux --prefix=/home/zhaolei/arm9/tools/3.2 --enable-languages=c,c++ --with-headers=/home/zhaolei/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=/home/zhaolei/...,所以到了目标板会出现ld.so向目标板的/home/zhaolei/...的目录下寻找库文件。
通常库文件存放在目标板的/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=/home/zhaolei/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给覆盖了。
好了,收工啦! |
|