ARM交叉编译工具链制作
1. 软件包下载
binutils-2.22.tar.gz
gcc-4.7.2.tar.bz2
gmp-5.0.5.tar.xz
mpfr-3.1.1.tar.xz
mpc-1.0.1.tar.gz
glibc-2.16.0.tar.xz
glibc-linuxthreads-2.5.tar.bz2
glibc-ports-2.16.0.tar.xz
linux-3.0.21.tar.bz2(根据目标板的内核版本来选择)
下载地址:
http://mirror.bjtu.edu.cn/gnu/glibc/
http://mirror.bjtu.edu.cn/gnu/gcc/
http://mirror.bjtu.edu.cn/gnu/gmp/
http://mirror.bjtu.edu.cn/gnu/mpfr/
http://mirror.bjtu.edu.cn/gnu/mpc/
http://mirror.bjtu.edu.cn/gnu/binutils/
http://mirror.bjtu.edu.cn/kernel/linux/kernel/
2. 编译环境准备:
Centos 6.5 32bit/64bit
sudo yum update #漫长的下载更新……
cd ~/arm-tools
vim armenv
# 将以下内容写入armenv文件中保存退出
TARGET=arm-linux-gnueabi
PREFIX=/opt/cross/gcc-4.7.2/$TARGET
PATH=$PREFIX/bin:$PATH
export TARGET PREFIX PATH
# 配置编译环境
source armenv
3. 编译binutils
tar xzvf binutils-2.22.tar.gz
mkdir binutils-build
cd binutils-build
../binutils-2.22/configure --target=$TARGET--prefix=$PREFIX
make -j2
sudo make install
cd .. #回到arm-tools
4. 第一次编译gcc
mkdir gcc-bootstrap-build
tar xzvf gcc-4.7.2.tar.gz
tar xzvf mpc-1.0.1.tar.gz
tar xjvf gmp-5.0.5.tar.bz2
cd gcc-4.7.2/
#将解压后的 mpfr-3.1.1 mpc-1.0.1 gmp-5.0.5分别拷贝到gcc-4.7.2中,并分别重命名mpfr,mpc,gmp
cp -rfv ../mpfr-3.1.1 mpfr
cp -rfv ../mpc-1.0.1 mpc
cp -rfv ../gmp-5.0.5 gmp
#配置configure …
cd ../gcc-bootstrap-build
../gcc-4.7.2/configure --target=$TARGET --enable-targets=all --prefix=$PREFIX--enable-languages=c --with-newlib --without-headers --disable-nls--disable-threads --disable-shared --disable-libmudflap --disable-libssp--disable-libgomp --disable-decimal-float --enable-checking=release --with-mpfr-include=$(pwd)/../gcc-4.7.2/mpfr/src --disable-bootstrap--disable-libquadmath --with-mpfr-lib=$(pwd)/mpfr/src/.libs --with-mpfr-lib=$(pwd)/mpfr/src/.libs--enable-initfini-array
#编译.安装
sudo make install-target-libgcc
sudo cp -v libiberty/libiberty.a $PREFIX/lib
# 以下添加libgcc_eh.a,libgcc_s.a到libgcc.a的软链接,防止编译C库时出错
sudo ln -vs libgcc.a `arm-linux-gnueabi-gcc-print-libgcc-file-name | sed 's/libgcc/&_eh/'`
sudo ln -vs libgcc.a `arm-linux-gnueabi-gcc-print-libgcc-file-name | sed 's/libgcc/&_s/'`
cd ..
5. 安装内核头文件
tar xjvf linux-3.0.21.tar.bz2
cd linux-3.0.21/
make ARCH=arm headers_check
make ARCH=arm INSTALL_HDR_PATH=destheaders_install
sudo mkdir $PREFIX/$TARGET/include
sudo cp -rv dest/include/*$PREFIX/$TARGET/include
cd ..
#注意:内核头文件的安装位置是$PREFIX/$TARGET/include,而不是$PREFIX
6. 编译C库
tar xzvf glibc-2.16.0.tar.gz
tar xjvf glibc-linuxthreads-2.5.tar.bz2 -Cglibc-2.16.0
tar xzvf glibc-ports-2.16.0.tar.gz
mv -v glibc-ports-2.16.0 glibc-2.16.0/ports
mkdir glibc-build
cd glibc-build/
../glibc-2.16.0/configureCC=$TARGET-gcc AR=$TARGET-ar RANLIB=$TARGET-ranlib --host=$TARGET --prefix=$PREFIX/$TARGET --with-tls --disable-profile --enable-add-ons--with-headers=$PREFIX/$TARGET/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_arm_tls=yes
make -j2
#将安装目录下的相关的文件夹都改成777权限,然后makeinstall,不要执行sudo make insall。
make install
cd ..
#make install的过程中,需要什么文件夹的权限就修改该文件夹的权限为777
/****
sudo chmod 777/opt/quectel/tools-chain/gcc-4.7.2/arm-linux-gnueabi/arm-linux-gnueabi/lib
sudo chmod 777/opt/quectel/tools-chain/gcc-4.7.2/arm-linux-gnueabi/arm-linux-gnueabi/include/
sudo chmod 777/opt/quectel/tools-chain/gcc-4.7.2/arm-linux-gnueabi/arm-linux-gnueabi/
sudo chmod 777/opt/quectel/tools-chain/gcc-4.7.2/arm-linux-gnueabi/arm-linux-gnueabi/bin/
sudo chmod 777/opt/quectel/tools-chain/gcc-4.7.2/arm-linux-gnueabi/arm-linux-gnueabi/include/scsi/
*****/
7. 编译完整的gcc
cd gmp-5.0.5
./configure --prefix=/usr
make -j2
sudo make install
cd ..
cd mpfr-3.1.1
./configure --prefix=/usr
make -j2
sudo make install
cd ..
cd mpc-1.0.1
./configure --prefix=/usr
make -j2
sudo make install
cd ..
# 若系统中安装gmp,mpfr,mpc且版本满足要求,可不用编译安装。
# 构建期间,将三者安装到其他位置,并添加了链接搜索路径,试了几次都没有成功。
# 有时间再做尝试,估计是哪里配置不正确。
cd gcc-bootstrap-build/
rm -rf *
../gcc-4.7.2/configure--target=$TARGET --prefix=$PREFIX --enable-languages=c,c++--enable-shared
/*******
在64bit系统中编译不过:
./gcc-4.7.2/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++--enable-shared --with-mpfr-include=$(pwd)/../gcc-4.7.2/mpfr/src --disable-bootstrap--disable-libquadmath --with-mpfr-lib=$(pwd)/mpfr/src/.libs --with-mpfr-lib=$(pwd)/mpfr/src/.libs
********/
make -j2
cd ..
8. 测试
(1) 版本信息
图
(2) 动态编译
图
(3) 静态编译
图
参考文档:
http://www.linuxidc.com/Linux/2012-10/71938.htm
http://blog.csdn.net/dragon101788/article/details/17559215#t0
http://www.cppblog.com/iuranus/archive/2011/07/22/151615.html
附上已编译好的工具链
http://pan.baidu.com/s/1c016DyC