制作arm-linux soft float cross toolchain

ARM 82浏览

整个系统的搭建和开发,离不开一个完备的交叉编译工具链和调试工具,

因为本系统无浮点协处理器,用硬件浮点和linux的模拟速度较慢,所以

在这里编译了一个nptl 线程库 的 支持 soft float 的 arm cross toolchain.

将在以后整个系统的交叉编译过程中使用该交叉编译工具链,

关于arm cross toolchain 网上有很多,可以直接下载,也可以自己编译,过程如下:

1:下载source 和 patch
下载源码:

binutils-2.18.tar.bz2
glibc-2.7.tar.bz2
glibc-ports-2.7.tar.bz2
gcc-4.2.3.tar.bz2
linux-2.6.24.3.tar.bz2
gdb-6.7.1.tar.bz2

下载补丁:

glibc-2.7-alpha_ioperm_fix-1
glibc-2.7-alpha_PTR_MANGLE_fix-1
glibc-2.7-branch_update-1.patch
glibc-2.7-branch_update-1A.patch
glibc-2.7-libgcc_eh-1.patch
glibc-2.7-localedef_segfault-1.patch

解压源码并打补丁:
tar -jxvf binutils-2.18.tar.bz2
tar -jxvf linux-2.6.24.3.tar.bz2
tar -jxvf glibc-2.7.tar.bz2
tar -jxvf gcc-4.2.3.tar.bz2
tar -jxvf gdb-6.7.1.tar.bz2
cd glibc-2.7
tar -jxvf ../glibc-ports-2.5.tar.bz2
mkdir build ToolChain
cd build
mkdir gcc glibc binutils

2:设置环境变量:
HOME = /home/arm/src
BUILD = $HOME/build
PREFIX = $HOME/ToolChain
TARGET = arm-linux
SYSROOT= $PREFIX/$TARGET
export PATH=/PREFIX/bin:$PATH

3:制作 binutils
cd $build/
../../binutils-2.18/configure --target=$TARGET --prefix=$PREFIX --
with-sysroot=$SYSROOT –disable-nls
make
make install

4: 内核头文件的生成
cd $HOME/linux-2.6.24.3/
make ARCH=arm menuconfig 保存配置
cp -dR $HOME/linux-2.6.24.2/include/asm-arm
$PREFIX/$TARGET/usr/include/asm
cp -dR $HOME/linux-2.6.24.2/include/linux
$PREFIX/$TARGET/usr/include/linux
cp -dR $HOME/linux-2.6.24.2/include/asm-generic
$PREFIX/$TARGET/usr/include/asm-generic

5: first build gcc
根据 t-arm-elf 修改 t-linux
vi gcc/config/arm/linux-elf.h -- remove line that defines
LIBGCC_SPEC
cd $BUILD/gcc
../../gcc-4.2.3/configure --target=arm-linux --prefix=$PREFIX --withsysroot=$
SYSROOT /
--with-newlib --disable-threads --with-softfloat-supp --enablelanguages=
c --disable-shared --with-float=soft --disable-nls
make all-gcc
make install-gcc

6:build glibc
cd $BUILD/glibc
echo libc_cv_forced_unwind=yes > config.cache
echo libc_cv_c_cleanup=yes > config.cache
echo libc_cv_arm_tls=yes > config.cache
CC=arm-linux-gcc AS=arm-linux-as LD=arm-linux-ld RANLIB=arm-linuxranlib/
../../glibc-2.7/configure --with-tls --without-fp --host=arm-linux -- /
build=i686-pc-linux-gnu --prefix=/usr /
--enable-shared --enable-static --enable-add-ons --cachefile=config.cache
make
make install_root=$SYSROOT install

7:build final gcc
cd $BUILD/gcc
../../gcc-4.2.3/configure --target=arm-linux --prefix=$PREFIX --withsysroot=$
SYSROOT /
--enable-threads=posix --enable-__cxa_atexit --with-softfloat-supp
--with-float=soft –disable-nls /
--enable-shared –enable-languages=c,c++ --withlibs=$
SYSROOT/usr/lib
make
make install

8: build gdb
../../gdb-6.7.1/configure --target=arm-linux –prefix=$PREFIX 

 经过以上工作,一个完整的交叉编译工具链就成功了,下面将介绍用这个工具链生成系统所需要的基本库文件。