ARM交叉编译工具链制作

 

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 xjvf mpfr-3.1.1.tar.bz2

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

 

#编译.安装

make -j2 all-gcc  

make -j2 all-target-libgcc 

sudo make install-gcc

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

sudo make install

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值