主機環境:
ubuntu 12.04.1 64bit gcc version 4.6.3
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目錄中
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 # 配置編譯環境 . armenv2. 編譯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 ..
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 ..
4. 安裝內核頭文件
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=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 ..
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實際還未放入開發板中進行測試,待開發板環境搭好,測試過再做更新。