1. **結構為:
setup ---> 源**壓縮包
:~/code/cross-compile$ ls setup/
binutils-2.24.tar.bz2 gcc-4.7.1.tar.bz2 gdb-7.6.2.tar.bz2 glibc-2.18.tar.bz2 linux-3.10.tar.bz2
gcc-4.6.4.tar.bz2 gcc-4.8.0.tar.bz2 glibc-2.17.tar.bz2 glibc-linuxthreads-2.5.tar.bz2 termcap-1.3.1.tar.gz
src --->原始碼
~/code/cross-compile$ ls src/
binutils-2.24 gcc-4.7.1 gdb-7.6.2 glibc-2.18
build --> 編譯目錄
:~/code/cross-compile$ ls build/
binutils gcc gdb glibc
kernel ----> 核心**:
~/code/cross-compile/kernel$ ls
linux-3.10
2.編譯 binutils
在build/binutils 下,執行命令:
../../src/binutils-2.24/configure --target=mipsel-linux-gnueabi --prefix=/home/charles/code/cross-compile/embedded-toolchain/cross-tools --with-sysroot=/home/charles/code/cross-compile/embedded-toolchain
然後,執行 make, make install 安裝
3. 編譯 gcc stage 1
在 build/gcc目錄下,執行
ar=ar ldflags="-wl,-rpath=/home/charles/code/cross-compile/embedded-toolchain/cross-tools/lib" ../../src/gcc-4.7.1/configure --prefix=/home/charles/code/cross-compile/embedded-toolchain/cross-tools --target=mipsel-linux-gnueabi --with-sysroot=/home/charles/code/cross-compile/embedded-toolchain --with-gmp=/usr/local --with-mpfr=/usr/local --with-ppl=/usr/local --with-newlib --without-headers --disable-multilib --disable-nls --disable-decimal-float --disable-libgomp --disable-libmudflap --disable-libssp --disable-shared --disable-threads --enable-languages=c --with-float=soft --with-arch=mips32r2 --with-tune=mips32r2
然後,
make all-gcc all-target-libgcc
make install-gcc install-target-libgcc
4. 安裝核心標頭檔案
進入到核心**目錄,
執行命令:
arch=mips make mrproper
arch=mips make headers_check
arch=mips cross_compile=mipsel-gcc-linux-gnueabi make install_hdr_path=/home/charles/code/cross-compile/embedded-toolchain/usr headers_install
find /home/charles/code/cross-compile/embedded-toolchain/usr/include/ -name ".install" -or -name "..install.cmd" | xargs rm -fv ;\
5. 編譯 glibc
進入到 build/glibc,執行
build_cc=gcc cc=mipsel-linux-gnueabi-gcc ar=mipsel-linux-gnueabi-ar ranlib=mipsel-linux-gnueabi-ranlib ../../src/glibc-2.18/configure --prefix=/usr --host=mipsel-linux --enable-add-ons --with-fp=no libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_ctors_header=yes --with-tune=mips32r2 --with-arch=mips32r2 --with-headers=/home/charles/code/cross-compile/embedded-toolchain/usr/include
把步驟3生成的mipsel gcc 加入到 path:
export path=$path:/home/charles/code/cross-compile/embedded-toolchain/cross-tools/bin
執行
make
make install install_root=/home/charles/code/cross-compile/embedded-toolchain
6.編譯最後的gcc
ar=ar ldflags="-wl,-rpath=/home/charles/code/cross-compile/embedded-toolchain/cross-tools/lib" ../../src/gcc-4.7.1/configure --prefix=/home/charles/code/cross-compile/embedded-toolchain/cross-tools --target=mipsel-linux-gnueabi --with-sysroot=/home/charles/code/cross-compile/embedded-toolchain --with-gmp=/usr/local --with-mpfr=/usr/local --with-ppl=/usr/local --disable-multilib --disable-libssp --disable-nls --disable-libstdcxx-pch --with-arch=mips32r2 --with-tune=mips32r2 --enable-languages=c,c++ --with-float=soft --with-mips-plt --disable-libgomp --disable-libmudflap --enable-poison-system-directories --enable-symvers=gnu --enable-long-long --enable-threads --enable-shared --enable-lto --enable-__cxa_atexit --with-gnu-as --with-gnu-ld
再執行
make all-gcc -j10 -i -k
make all-target-libgcc
make install-gcc
make install-target-libgcc
make
make install
最後,看一下生成的gcc的資訊:
./mipsel-linux-gnueabi-gcc -v
using built-in specs.
collect_gcc=./mipsel-linux-gnueabi-gcc
target: mipsel-linux-gnueabi
configured with: ../../src/gcc-4.7.1/configure --prefix=/home/charles/code/cross-compile/embedded-toolchain/cross-tools --target=mipsel-linux-gnueabi --with-sysroot=/home/charles/code/cross-compile/embedded-toolchain --with-gmp=/usr/local --with-mpfr=/usr/local --with-ppl=/usr/local --disable-multilib --disable-libssp --disable-nls --disable-libstdcxx-pch --with-float=soft --with-arch=mips32r2 --with-tune=mips32r2 --enable-languages=c,c++ --with-float=soft --with-mips-plt --disable-libgomp --disable-libmudflap --enable-poison-system-directories --enable-symvers=gnu --enable-long-long --enable-threads --enable-shared --enable-lto --enable-__cxa_atexit --with-gnu-as --with-gnu-ld
thread model: posix
gcc version 4.7.1 (gcc)
參考:
交叉編譯工具鏈製作
交叉編譯就是在乙個平台上生成另乙個平台上的可執行 二進位制。這兩個平台可以是不同的體系結構和不同的作業系統。例如,在嵌入式系統 c c 開發過程中,常常需要在 x86 x86 64 主機上編譯出可執行程式,給 arm或 powerpc 體系結構的裝置執行。交叉編譯的兩個概念 宿主機 host 編譯程...
製作交叉編譯工具鏈 1
交叉編譯環境是由編譯器 聯結器和直譯器組合成的綜合開發環境。交叉編譯工具主要包括針對目標系統的編譯器gcc 目標系統的二進位制工具binutils 目標系統的標準c庫glibc和目標系統的linux核心標頭檔案 安裝上述檔案,並設定變數 prefix 指定可執行程式的安裝路徑 執行configure...
製作交叉編譯工具鏈 2
解壓crosstool ng tar jxvf crosstool ng 1.23.0 檢查依賴,完成依賴檢查後生成makefile configure prefix home forlinx crosstool install 編譯,編譯成功後進行安裝 make make install 新增環境...