poxiaozi6264的专栏

arm平台交叉编译器的制作

主机环境:

ubuntu 12.04.1 64bit gcc version 4.6.31. 下载最新源码包 binutils-2.22.tar.gzgcc-4.7.2.tar.bz2 gmp-5.0.5.tar.xz mpfr-3.1.1.tar.xz mpc-1.0.1.tar.gzglibc-2.16.0.tar.xz glibc-linuxthreads-2.5.tar.bz2 glibc-ports-2.16.0.tar.xzlinux-3.5.4.tar.bz2 将以上源码包放入~/src目录中1. 配置编译环境cd ~/srcvim armenv# 将以下内容写入armenv文件中保存退出TARGET=arm-linux-gnueabiPREFIX=/opt/cross/gcc-4.7.2/$TARGETPATH=$PREFIX/bin:$PATHexport TARGET PREFIX PATH# 配置编译环境. armenv2. 编译binutilstar -xzf binutils-2.22.tar.gzmkdir binutils-buildcd binutils-build../binutils-2.22/configure –target=$TARGET –prefix=$PREFIXmake -j2sudo make installcd ..

3. 第一次编译gcc

tar -xjf gcc-4.7.2.tar.bz2mkdir gcc-bootstrap-buildtar -xf gmp-5.0.5.tar.xztar -xf mpfr-3.1.1.tar.xztar -xf mpc-1.0.1.tar.gzcd gcc-4.7.2mv -v gmp-5.0.5 gmpmv -v mpfr-3.1.1 mpfrmv -v mpc-1.0.1 mpccd ../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/.libsmake -j2 all-gcc make -j2 all-target-libgccsudo make install-gccsudo make install-target-gccsudo 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.bz2cd linux-3.5.4make ARCH=arm headers_checkmake ARCH=arm INSTALL_HDR_PATH=dest headers_installsudo cp -rv dest/include/* $PREFIX/$TARGET/include注意:内核头文件的安装位置是$PREFIX/$TARGET/include,而不是$PREFIXcd ..5. 编译C库tar -xf glibc-2.16.0.tar.xztar -xjf glibc-linuxthreads-2.5.tar.bz2 -C glibc-2.16.0tar -xf glibc-ports-2.16.0.tar.xzmv glibc-ports-2.16.0 glibc-2.16.0/portsmkdir glibc-buildcd glibc-buildCC=$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 -j2sudo -s. ../armenvmake installexitcd ..6. 编译完整的gcctar -xf gmp-5.0.5.tar.xzcd gmp-5.0.5./configure –prefix=/usrmake -j2sudo make installcd ..tar -xf mpfr-3.1.1.tar.xzcd mpfr-3.1.1./configure –prefix=/usrmake -j2sudo make installcd ..tar -xf mpc-1.0.1.tar.gzcd mpc-1.0.1./configure –prefix=/usrmake -j2sudo make installcd ..# 若系统中安装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-sharedmake -j2sudo make installcd ..7. 测试(1) 动态编译arm-linux-gnueabi-gcc -o hello hello.carm-linux-gnu-eabi-strip hellofile hellohello: 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 -staticarm-linux-gnu-eabi-strip hellohello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, stripped实际还未放入开发板中进行测试,待开发板环境搭好,,测试过再做更新。

为我祈祷平安就好。我的旅行,会有你们的故事陪伴,所以我不会孤单。放心吧。

poxiaozi6264的专栏

相关文章:

你感兴趣的文章:

标签云: