构建ARM GCC工具链(更新版)

这个文章和之前的主要不同在于,没有使用系统的  gmp, mpfr, mpc, cloog等,而是使用源代码编译。

1.编译 binutils:

把 binutls 代码解压到 src 目录下, 同时在  build 目录下建立 binutil 目录。

在 build/binutils目录下执行:

 ../../src/binutils-2.25/configure --prefix=/home/charles/code/build_toolchain/toolchain --with-sysroot=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot --target=arm-linux-gnueabi

make -j10 -i -k
make install

2.安装内核头文件

把内核代码解压到 src 目录下,然后进入到内核代码目录,执行:

make mrproper  
make ARCH=arm vexpress_defconfig  
make ARCH=arm headers_check  
make ARCH=arm INSTALL_HDR_PATH=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot/usr headers_install
find ../../toolchain/arm-linux-gnueabi/sysroot/usr/include/ -name ".install" -or -name "..install.cmd" | xargs rm -fv  

3. 依次进入目录:

gmp-6.0.0   mpc-1.0.2  mpfr-3.1.2 ppl-1.1  cloog-0.18.1

执行:

./configure --prefix=/home/charles/code/build_toolchain/toolchain
make 
make install

4. 创建 bootstrap GCC 

建立目录 build/gcc_first,并进入到这个目录,执行:

../../src/gcc-4.8.2/configure --build=i686-pc-linux-gnu  --target=arm-linux-gnueabi --prefix=/home/charles/code/build_toolchain/toolchain --with-sysroot=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot  --with-newlib --without-headers --disable-threads  --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-nls  --disable-shared  --disable-decimal-float  --with-gnu-ld  --with-gnu-as --with-arch=armv7-a --with-mode=arm  --with-float=softfp --with-fpu=vfpv3  --enable-languages=c   --with-gmp=/home/charles/code/build_toolchain/toolchain --with-mpfr=/home/charles/code/build_toolchain/toolchain --with-ppl=/home/charles/code/build_toolchain/toolchain --with-cloog=/home/charles/code/build_toolchain/toolchain

make all-gcc -j10 -i -k
make install-gcc
make all-target-libgcc
make install-target-libgcc

5. 编译 GLIBC

先执行:

export PATH=$PATH:/home/charles/code/build_toolchain/toolchain/bin
建立目录 build/glibc, 进入这个目录,执行:

CC=arm-linux-gnueabi-gcc AR=arm-linux-gnueabi-ar  RANLIB=arm-linux-gnueabi-ranlib ../../src/glibc-2.21/configure   --build=i686-pc-linux-gnu  --host=arm-linux-gnueabi --prefix=/usr  --with-headers=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot/usr/include  --enable-add-ons --with-mode=arm

make install install_root=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot 
6.编译最终的gcc:

建立目录 build/gcc_final, 执行:

../../src/gcc-4.8.2/configure --build=i686-pc-linux-gnu --target=arm-linux-gnueabi --prefix=/home/charles/code/build_toolchain/toolchain --with-sysroot=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot --disable-libmudflap --disable-libssp --disable-nls --disable-libstdcxx-pch --with-interwork --with-mode=arm --with-fpu=vfpv3 --with-arch=armv7-a --with-float=softfp --enable-libgomp --enable-poison-system-directories --enable-symvers=gnu --enable-long-long --enable-threads --enable-languages=c,c++ --enable-shared --enable-lto --enable-__cxa_atexit --with-gnu-as --with-gnu-ld --enable-__cxa_atexit  --with-gmp=/home/charles/code/build_toolchain/toolchain --with-mpfr=/home/charles/code/build_toolchain/toolchain --with-ppl=/home/charles/code/build_toolchain/toolchain --with-cloog=/home/charles/code/build_toolchain/toolchain  


生成的工具链如下:

$ ./bin/arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./bin/arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/charles/code/build_toolchain/toolchain/libexec/gcc/arm-linux-gnueabi/4.8.2/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../../src/gcc-4.8.2/configure --build=i686-pc-linux-gnu --target=arm-linux-gnueabi --prefix=/home/charles/code/build_toolchain/toolchain --with-sysroot=/home/charles/code/build_toolchain/toolchain/arm-linux-gnueabi/sysroot --disable-libmudflap --disable-libssp --disable-nls --disable-libstdcxx-pch --with-interwork --with-mode=arm --with-fpu=vfpv3 --with-arch=armv7-a --with-float=softfp --enable-libgomp --enable-poison-system-directories --enable-symvers=gnu --enable-long-long --enable-threads --enable-languages=c,c++ --enable-shared --enable-lto --enable-__cxa_atexit --with-gnu-as --with-gnu-ld --enable-__cxa_atexit --with-gmp=/home/charles/code/build_toolchain/toolchain --with-mpfr=/home/charles/code/build_toolchain/toolchain --with-ppl=/home/charles/code/build_toolchain/toolchain --with-cloog=/home/charles/code/build_toolchain/toolchain
Thread model: posix
gcc version 4.8.2 (GCC) 


P. S.

1) 刚开始,用的 gcc 版本是  4.9.2, 在第4步的时候,出现类似 “ -meabi=5 not found ”的错误,始终没有找到解决方法,最后只好改用4.8.2的版本。

2) 这几个  gmp-6.0.0   mpc-1.0.2  mpfr-3.1.2 ppl-1.1  cloog-0.18.1 模块的动态库,只有使用

export LD_LIBRARY_PATH=/home/charles/code/build_toolchain/toolchain/lib

才会用到,否则还是用的系统的。

3)  可以使用gcc代码里的脚本 ./contrib/download_prerequisites 自动下载上面的几个模块,也可以到各自的官方网站上去下载。


你可能感兴趣的:(ARM,toolchain)