arm-linux交叉编译器制作,ARM平台交叉编译器的制作

ARM平台交叉编译器的制作

主机环境:

Ubuntu 12.04.1 64bit

gcc version 4.6.3

ubuntu 12.04.1 64bit

gcc version 4.6.3

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.5.4.tar.bz2

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.5.4.tar.bz2

将以上源码包放入~/src目录中

1. 配置编译环境

cd ~/src

vim armenv

# 将以下内容写入armenv文件中保存退出

TARGET=arm-linux-gnueabi

PREFIX=/opt/cross/gcc-4.7.2/$TARGET

PATH=$PREFIX/bin:$PATH

export TARGET PREFIX PATH

# 配置编译环境

. armenv

cd ~/src

vim armenv

# 将以下内容写入armenv文件中保存退出

TARGET=arm-linux-gnueabi

PREFIX=/opt/cross/gcc-4.7.2/$TARGET

PATH=$PREFIX/bin:$PATH

export TARGET PREFIX PATH

# 配置编译环境

. armenv

2. 编译binutils

tar -xzf 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 ..

tar -xzf 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 ..

3. 第一次编译gcc

tar -xjf gcc-4.7.2.tar.bz2

mkdir gcc-bootstrap-build

tar -xf gmp-5.0.5.tar.xz

tar -xf mpfr-3.1.1.tar.xz

tar -xf mpc-1.0.1.tar.gz

cd gcc-4.7.2

mv -v gmp-5.0.5 gmp

mv -v mpfr-3.1.1 mpfr

mv -v mpc-1.0.1 mpc

cd ../gcc-bootstrap-build

../gcc-4.7.2/configure \

--target=$TARGET--host=x86_64-linux-gnu--build=x86_64-linux-gnu \

--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\

--disable-bootstrap --disable-libquadmath \

--with-mpfr-include=$(pwd)/../gcc-4.7.2/mpfr/src \

--with-mpfr-lib=$(pwd)/mpfr/src/.libs

make -j2 all-gcc

make -j2 all-target-libgcc

sudo make install-gcc

sudo make install-target-gcc

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 ..

tar -xjf gcc-4.7.2.tar.bz2

mkdir gcc-bootstrap-build

tar -xf gmp-5.0.5.tar.xz

tar -xf mpfr-3.1.1.tar.xz

tar -xf mpc-1.0.1.tar.gz

cd gcc-4.7.2

mv -v gmp-5.0.5 gmp

mv -v mpfr-3.1.1 mpfr

mv -v mpc-1.0.1 mpc

cd ../gcc-bootstrap-build

../gcc-4.7.2/configure \

--target=$TARGET --host=x86_64-linux-gnu --build=x86_64-linux-gnu \

--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 \

--disable-bootstrap --disable-libquadmath \

--with-mpfr-include=$(pwd)/../gcc-4.7.2/mpfr/src \

--with-mpfr-lib=$(pwd)/mpfr/src/.libs

make -j2 all-gcc

make -j2 all-target-libgcc

sudo make install-gcc

sudo make install-target-gcc

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 ..

4. 安装内核头文件

tar -xjf linux-3.5.4.tar.bz2

cd linux-3.5.4

makeARCH=armheaders_check

makeARCH=armINSTALL_HDR_PATH=destheaders_install

sudo cp -rv dest/include/* $PREFIX/$TARGET/include

注意:内核头文件的安装位置是$PREFIX/$TARGET/include,而不是$PREFIX

cd ..

tar -xjf linux-3.5.4.tar.bz2

cd linux-3.5.4

make ARCH=arm headers_check

make ARCH=arm INSTALL_HDR_PATH=dest headers_install

sudo cp -rv dest/include/* $PREFIX/$TARGET/include

注意:内核头文件的安装位置是$PREFIX/$TARGET/include,而不是$PREFIX

cd ..

5. 编译C库

tar -xf glibc-2.16.0.tar.xz

tar -xjf glibc-linuxthreads-2.5.tar.bz2 -C glibc-2.16.0

tar -xf glibc-ports-2.16.0.tar.xz

mv glibc-ports-2.16.0 glibc-2.16.0/ports

mkdir glibc-build

cd glibc-build

CC=$TARGET-gcc \

AR=$TARGET-ar \

RANLIB=$TARGET-ranlib \

../glibc-2.16.0/configure \

--host=$TARGET \

--prefix=$PREFIX/$TARGET \

--with-tls --disable-profile \

--enable-add-ons--with-headers=$PREFIX/$TARGET/include \

libc_cv_forced_unwind=yeslibc_cv_c_cleanup=yeslibc_cv_arm_tls=yes

注意:C库的安装位置是$PREFIX/$TARGET,编译完整的gcc时链接使用

sudo make -j2

sudo -s

. ../armenv

make install

exit

cd ..

tar -xf glibc-2.16.0.tar.xz

tar -xjf glibc-linuxthreads-2.5.tar.bz2 -C glibc-2.16.0

tar -xf glibc-ports-2.16.0.tar.xz

mv glibc-ports-2.16.0 glibc-2.16.0/ports

mkdir glibc-build

cd glibc-build

CC=$TARGET-gcc \

AR=$TARGET-ar \

RANLIB=$TARGET-ranlib \

../glibc-2.16.0/configure \

--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

注意:C库的安装位置是$PREFIX/$TARGET,编译完整的gcc时链接使用

sudo make -j2

sudo -s

. ../armenv

make install

exit

cd ..

6. 编译完整的gcc

tar -xf gmp-5.0.5.tar.xz

cd gmp-5.0.5

./configure--prefix=/usr

make -j2

sudo make install

cd ..

tar -xf mpfr-3.1.1.tar.xz

cd mpfr-3.1.1

./configure--prefix=/usr

make -j2

sudo make install

cd ..

tar -xf mpc-1.0.1.tar.gz

cd mpc-1.0.1

./configure--prefix=/usr

make -j2

sudo make install

cd ..

# 若系统中安装gmp,mpfr,mpc且版本满足要求,可不用编译安装。

# 构建期间,将三者安装到其他位置,并添加了链接搜索路径,试了几次都没有成功。

# 有时间再做尝试,估计是哪里配置不正确。

../gcc-4.7.2/configure--target=$TARGET \

--host=x86_64-linux-gnu--build=x86_64-linux-gnu \

--prefix=$PREFIX \

--enable-languages=c,c++ --enable-shared

make -j2

sudo make install

cd ..

tar -xf gmp-5.0.5.tar.xz

cd gmp-5.0.5

./configure --prefix=/usr

make -j2

sudo make install

cd ..

tar -xf mpfr-3.1.1.tar.xz

cd mpfr-3.1.1

./configure --prefix=/usr

make -j2

sudo make install

cd ..

tar -xf mpc-1.0.1.tar.gz

cd mpc-1.0.1

./configure --prefix=/usr

make -j2

sudo make install

cd ..

# 若系统中安装gmp,mpfr,mpc且版本满足要求,可不用编译安装。

# 构建期间,将三者安装到其他位置,并添加了链接搜索路径,试了几次都没有成功。

# 有时间再做尝试,估计是哪里配置不正确。

../gcc-4.7.2/configure --target=$TARGET \

--host=x86_64-linux-gnu --build=x86_64-linux-gnu \

--prefix=$PREFIX \

--enable-languages=c,c++ --enable-shared

make -j2

sudo make install

cd ..

7. 测试

(1) 动态编译

arm-linux-gnueabi-gcc -o hello hello.c

arm-linux-gnu-eabi-strip hello

file hello

hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, stripped

arm-linux-gnueabi-gcc -o hello hello.c

arm-linux-gnu-eabi-strip hello

file hello

hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, stripped

(2) 静态编译

arm-linux-gnueabi-gcc -o hello hello.c -static

arm-linux-gnu-eabi-strip hello

hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, stripped

arm-linux-gnueabi-gcc -o hello hello.c -static

arm-linux-gnu-eabi-strip hello

hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, stripped

实际还未放入开发板中进行测试,待开发板环境搭好,测试过再做更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值