一:源代码手动编译
1:需要的软件包
binutils: http://ftp.gnu.org/gnu/binutils/binutils-2.20.tar.gz
glibc: ftp://ftp.gnu.org/gnu/glibc/glic-2.9.tar.bz2 (MIPS ARM PowerPC 才需要单独下载glibc,其他体系结构可以使用通用的glibc)
ftp://ftp.gnu.org/gnu/glibc/glic-ports-2.9.tar.bz2 (解压到上面的glibc的目录里面)
gcc: ftp://gcc.gnu.org/pub/gcc/release/gcc-4.4.3/gcc-4.4.3.tar.gz
GMP: ftp://ftp.gmplib.org/pub/gmp-4.3.1/gmp-4.3.1.tar.bz2
MPFR: http://www.mpfr.org/mpfr-current/mpfr-2.4.1.tar.bz2
linux kernel: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.3.tar.bz2
2: 环境介绍
$SRCDIR (~/xtools/src) 源代码基础目录
$BINUTILS_SRC ($SRCDIR/binutils) binutils源码
$KERNEL_SRC 目标机的内核源代码位置
$GCC_SRC ($SRCDIR/gcc) gcc源码
$GLIBC_SRC ($SRCDIR/glibc) glibc源码
$GMP_SRC ($SRCDIR/gmp) GMP源码
$MPFR_SRC ($SRCDIR/mpfr) MPFR源码
$BUILDDIR (~/xtools/build) 交叉编译工具链的目录
$TARGETMACH (arm-none-linux-gnueabi) 执行交叉编译工具链的机子(宿主机)
arm-none-linux-gnueabi
CPU:arm mips i686 ppc powerpc
Manufacturer: none,i686对应pc
Operating system:linux
Kernel: gnuabignueabi uclibc
$BUILDMACH 编译交叉工具链的机子,就当前的机子(i686-pc-linux-gcc),不用设置也可以自动设置正常
$INSTALLDIR (/opt/arm) 交叉编译工具链安装的目录
$SYSROOTDIR ($INSTALLDIR/sysroot)目标系统所使用的库和头文件的目录
3:编译
$ [ -d $BUILDDIR/binutils ] && rm -fr $BUILDDIR/binutils
$ mkdir $BUILDDIR/binutils
$ cd $BUILDDIR/binutils
$ $BINNUTILS_SRC/configure --disable-werror --build=$BUILDMACH --target=$TARGETMACH --prefix=$INSTALLDIR --with-sysroot=$SYSROOTDIR
$ cd $BUILDDIR/binutils
$ make
$ make install
================================================================
$ cd $KERNEL_SRC
$ make mrproper
$ make ARCH=$TARGETMACH integrator_defconfig ## integrator_defconfig是最接近arm通用设备的一个deconfig,当然应该选择一个对应开发板的deconfig
$ mkdir -p $SYSROOTDIR/usr
$ make ARCH=$TARGETMACH headers_check
$ make ARCH=$TARGETMACH INSTALL_HDR_PATH=$SYSROOTDIR/usr header_install
================================================================
$ [ -d $BUILDDIR/bootstrap-gcc ] && rm -fr $BUILDDIR/bootstrap-gcc
$ mkdir $BUILDDIR/bootstrap-gcc
$ cd $BUILDDIR/bootstrap-gcc
$SRCDIR/$GCC/configure --build=$BUILDMACH --host=$BUILDMACH --target=$TARGETMACH --prefix=$INSTALLDIR --without-headers \
--enable-bootstrap --enable-languages="c" --disable-threads --enable__cxa_atexit --disable-libmudflap \
--with-gnu-ld --with-gnu-as --disable-libssp --disable-libgomp --disable-nls --disable-shared
$ make all-gcc install-gcc
$ make all-target-libgcc install-target-libgcc
$ ln -s $INSTALLDIR/lib/gcc/arm-none-linux-gnueabi/4.4.3/libgcc.a $INSTALLDIR/lib/gcc/arm-none-linux-gnueabi/4.4.3/libgcc_sh.a
================================================================
$ [ -d $BUILDDIR/libc ] && rm -fr $BUILDDIR/libc
$ mkdir $BUILDDIR/libc
$ cd $BUILDDIR/libc
$ echo "lib_cv_forced_unwind=yes" > config.cache
$ echo "libc_cv_c_cleanup=yes" >> config.cache
$ export PATH=$INSTALLDIR/bin:$PATH
$ export CROSS=arm-none-linux-gnueabi-
$ export CC=${CROSS}gcc
$ export LD=${CROSS}ld
$ export AS=${CROSS}as
$GLIBC_SRC/configure --build=$BUILDMACH --host=$BUILDMACH --target=$TARGETMACH --prefix=$SYSROOTDIR/usr \
--with-headers=$SYSROOTDIR/usr/inlcude --config-cache --enable-add-ons=glibc-ports-2.9,nptl --enable-kernel=2.6.0
$ make -k install-headers cross_compling=yes install_root=$SYSROOTDIR
$ ln -s $INSTALLDIR/lib/gcc/arm-none-linux-gnueabi/4.4.3/libgcc.a $INSTALLDIR/lib/gcc/arm-none-linux-gnueabi/4.4.3/libgcc_eh.a
================================================================
$ [ -d $BUILDDIR/libc ] && rm -fr $BUILDDIR/libc
$ mkdir $BUILDDIR/libc
$ cd $BUILDDIR/libc
$ echo "lib_cv_forced_unwind=yes" > config.cache
$ echo "libc_cv_c_cleanup=yes" >> config.cache
$ export PATH=$INSTALLDIR/bin:$PATH
$ export CROSS=arm-none-linux-gnueabi-
$ export CC=${CROSS}gcc
$ export LD=${CROSS}ld
$ export AS=${CROSS}as
$GLIBC_SRC/configure --build=$BUILDMACH --host=$BUILDMACH --prefix=/usr --with-headers=$SYSROOTDIR/usr/inlcude --config-cache\
--enable-add-ons=glibc-ports-2.9,nptl --enable-kernel=2.6.0
$ make -k install-headers cross_compling=yes install_root=$SYSROOTDIR
$ ln -s $INSTALLDIR/lib/gcc/arm-none-linux-gnueabi/4.4.3/libgcc.a $INSTALLDIR/lib/gcc/arm-none-linux-gnueabi/4.4.3/libgcc_eh.a
$ make
$ make install_root=$(SYSROOT) install
================================================================
$ [ -d $BUILDDIR/final-gcc ] && rm -fr $BUILDDIR/final-gcc
$ mkdir $BUILDDIR/final-gcc
$ cd $BUILDDIR/final-gcc
$ echo "lib_cv_forced_unwind=yes" > config.cache
$ echo "libc_cv_c_cleanup=yes" >> config.cache
$ export BUILD_CC=gcc
$SRCDIR/$GCC/configure --build=$BUILDMACH --target=$TARGETMACH --prefix=$INSTALLDIR --with-sysroot=$SYSROOTDIR --enable-languages=c\
--with-gnu-ld --with-gnu-as --disable-multilib --with-floate=soft --disable-sjlj-exceptions --disable-nls --enable-threads=posix --enable-long-longx
$ make all-gcc install-gcc
================================================================
$ [ -d $BUILDDIR/gmp ] && rm -fr $BUILDDIR/gmp
$ mkdir $BUILDDIR/gmp
$ cd $BUILDDIR/gmp
$ export PATH=$INSTALLDIR/bin:$PATH
$ export CROSS=arm-none-linux-gnueabi-
$ export CC=${CROSS}gcc
$ export LD=${CROSS}ld
$ export AS=${CROSS}as
$ export CFLAGS=-static
$ $GMP_SRC/configure --build=$BUILDMACH --host=$BUILDMACH --prefix=$INSTALLDIR --disable-shared
$ make
$ make install
================================================================
$ [ -d $BUILDDIR/mpfr ] && rm -fr $BUILDDIR/mpfr
$ mkdir $BUILDDIR/mpfr
$ cd $BUILDDIR/mpfr
$ export PATH=$INSTALLDIR/bin:$PATH
$ export CROSS=arm-none-linux-gnueabi-
$ export CC=${CROSS}gcc
$ export LD=${CROSS}ld
$ export AS=${CROSS}as
$ export CFLAGS=-static
$ $MPFR_SRC/configure --build=$BUILDMACH --host=$BUILDMACH --prefix=$INSTALLDIR --with-gmp=$INSTALLDIR
$ make
$ make install
================================================================
$ [ -d $BUILDDIR/final-gcc-2 ] && rm -fr $BUILDDIR/final-gcc-2
$ mkdir $BUILDDIR/final-gcc-2
$ cd $BUILDDIR/final-gcc-2
$ echo "lib_cv_forced_unwind=yes" > config.cache
$ echo "libc_cv_c_cleanup=yes" >> config.cache
$ export BUILD_CC=gcc
$SRCDIR/$GCC/configure --build=$BUILDMACH --target=$TARGETMACH --prefix=$INSTALLDIR --with-sysroot=$SYSROOTDIR --enable-languages=c\
--with-gnu-ld --with-gnu-as --disable-multilib --with-floate=soft --disable-sjlj-exceptions --disable-nls --enable-threads=posix \
--disable-libmudflap --disable-libssp --enable-long-longx --with-shared --with-gmp=$INSTALLDIR --with-mpfr=$INSTALLDIR
$ make
$ make install
================================================================
二:crosstool-NGhttp://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.3.2.tar.bz2
$ ./configure --prefix=~/ct
$ make install
$ ~/ct/bin/ct-ng list-samples
$ ~/ct/bin/ct-ng show-arm-unkown-linux-gnueabi
$ ~/ct/bin/ct-ng menuconfig (删除sstrip 关闭 fortran和java语言的编译前端)
$ ~/ct/bin/ct-ng
编译完成后会在 ~/x-tools/ 下生成对应的文件?