编译arm-linux交叉编译工具链(fedora 10,binutils-2.16, gcc-3.4.4, glibc-2.3.6)

时间:2021-11-06 06:59:02

1. 软件环境

Fedora 10 ,所以其他软件均为Fedora-10-i386-DVD.iso自带,只有gcc被笔者降级为gcc-

2. 设置环境变量,准备源码及相关补丁

binutils

名称:binutils2.16. tar.gz

下载地址:http://ftp.gnu.org/gnu/binutils/binutils-2.16.tar.gz

gcc

名称: gcc-.tar.bz2

下载地址: http://ftp.gnu.org/gnu/gcc/gcc-/gcc-3.4.4.tar.bz2

glibc

名称: glibc-.tar.gz

glibc-linuxthreads-.tar.gz

下载地址: http://ftp.gnu.org/gnu/gcc/gcc-/gcc-3.4.4.tar.bz2

http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-.tar.gz

linux kernel

名称: linux-.tar.bz2

下载地址: http://ftp.kernel.org/pub/linux/kernel/

2.5 准备补丁

ioperm.c.diff

作用: 打修正ioperm()函数

下载地址: http://frank.harvard.edu/~coldwell/toolchain/ioperm.c.diff

flow.c.diff

作用: 该补丁用于产生crti.o和crtn.o文件.

下载地址:

http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3

t-linux.diff

作用: 修改gcc一处bug

下载地址: http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff

6200_all_arm-glibc--ioperm.patch

下载地址: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/

3. 编译GNU binutils

binutils-2.16#./configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT}

#make

#make install

4. 准备内核头文件

使用当前平台的gcc编译内核头文件

linux-# cp arch/arm/configs/smdk2410_defconfig .config

本人是用的CPU是S3C2410,选择了一个配置文件smdk_defconfig,你可以根据你的需要选择

# make ARCH=arm menuconfig

退出时

Do you wish to save your new kernel configuration?

< Yes > < No >

选择Yes

检查/include/linux/autoconf.h时间是否最新

复制内核头文件

linux-#cp -a include/linux ${SYSROOT}/usr/include/linux

#cp -a include/asm-arm ${SYSROOT}/usr/include/asm

#cp –a include/asm-generic ${SYSROOT}/usr/include/asm-generic

5. 编译glibc头文件

#patch -d glibc- -p1 < ioperm.c.diff

#patch -p1 -d glibc- < 6200_all_arm-glibc-2.3.4-ioperm.patch

#tar zxvf glibc-linuxthreads-.tar.gz

#./configure --prefix=/usr --host=${TARGET} --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include

# make cross-compiling=yes install_root=${SYSROOT} install-headers

# touch ${SYSROOT}/usr/include/gnu/stubs.h

# touch ${SYSROOT}/usr/include/bits/stdio_lim.h

6. 编译gcc 第一阶段

gcc--stage1#patch -d gcc- -p1 < flow.c.diff

#patch -d gcc- -p1 < t-linux.diff

#./configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c --with-sysroot=${SYSROOT}

注意: 不能加上--disable-shared

#make all-gcc

#make install-gcc

7. 编译完整的glibc

glibc-# BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld ./configure --prefix=/usr --build=i386-fedora-linux --host=arm-linux-gnu --target=arm-linux-gnu --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include

# make

# make install_root=${SYSROOT} install

8. 编译完整的gcc

gcc-#./configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ --with-sysroot=${SYSROOT}

#make

#make install

附录. GNU交叉工具链的下载

工具链的官方下载地址:

http://www.arm.linux.org.uk/

可以从该站点下载2.95.3, 3.0以及3.2工具链