1. 程式人生 > >Centos6.5 下交叉編譯最小linux kernel之一(工具鏈)

Centos6.5 下交叉編譯最小linux kernel之一(工具鏈)

環境說明:
centos 6.5 mini desktop版本
備註說明:本文是根據《深度探索Linux作業系統構建和原理解析》的筆記

步驟

1. 準備工作環境,首先要建立工作目錄和環境變數

在/home/sherlock下建立linux目錄

#mkdir source build cross-tool cross-gcc-tmp sysroot

命令vi ~/.bashrc
在.bashrc中新增如下內容

unset LANG
export HOST=i686-pc-linux-gnu
export BUILD=$HOST
export TARGET=i686-none-linux
-gnu export CROSS_TOOL=/home/sherlock/linux/cross-tool export CROSS_GCC_TMP=/home/sherlock/linux/cross-gcc-tmp export SYSROOT=/home/sherlock/linux/sysroot PATH=$CROSS_TOOL/bin:$CROSS_GCC_TMP/bin:/sbin:/usr/sbin:$PATH

2. 構建工具鏈分5個步驟

   1.  構建交叉編譯用的彙編和連結器

cd /home/sherlock/linux/build
tar xvf ../source/binutils-2.23.1.tar.
bz2 mkdir binutils-build && cd binutils-build ../binutils-2.23.1/configure --prefix=$CROSS_TOOL --target=$TARGET --with-sysroot=$SYSROOT make make install

   2.  構建沒有依賴C庫的交叉編譯器

cd /home/sherlock/linux/build
tar xvf ../source/gcc-4.7.2.tar.bz2
cd gcc-4.7.2
tar xvf ../../source/gmp-5.0.5.tar.bz2
mv gmp-5.0
.5 gmp tar xvf ../../source/mpfr-3.1.1.tar.bz2 mv mpfr-3.1.1 mpfr tar xvf ../../mpc-1.0.1.tar.gz mv mpc-1.0.1 mpc cd /home/sherlock/linux/build mkdir gcc-build && gcc-build

一下為配置和編譯的命令,需要注意的是mpfr目錄的配置,並且需要執行make install

../gcc-4.7.2/configure --prefix=$CROSS_GCC_TMP --target=$TARGET --with-sysroot=$SYSROOT
--with-newlib --enable-languages=c --with-mpfr-include=/home/sherlock/linux/build/gcc-4.7.2/mpfr/src --with-mpfr-lib=/home/sherlock/linux/build/gcc-build/mpfr/src/.libs --disable-shared --disable-threads --disable-decimal-float --disable-libquadmath --disable-libmudflap --disable-libgomp --disable-nls --disable-libssp

   3.  安裝核心標頭檔案

#cd /home/sherlock/linux/build
#tar xvf ../source/linux-3.7.4.tar.xz
#make mrproper
#make ARCH=i386 headers_check
#make ARCH=i386 INSTALL_HDR_PATH=$SYSROOT/usr/headers_include

這裡需要說明的是,如果因為在原始碼目錄沒有.config檔案
那麼你需要從make oldconfig 或者make allnoconfig
然後在執行以上命令

   4.  編譯目標系統可用的C庫
這裡需要打上4個補丁,相對於2.15的C庫

tar xvf ../source/glibc-2.15.tar.xz
cd glibc-2.15
patch -p1 < ../../source/glibc-2.15-x86-cpuid-check-no-includes-default.patch
patch -p1 < ../../source/glibc-2.14.1-fixed-1.patch
patch -p1 < ../../source/glibc-2.14.1-gcc_fix-1.patch
patch -p1 < ../../source/glibc-2.14.1-sort-1.patch

然後才可以開始編譯glibc

#mkdir glibc-build
#cd glibc-build
../glibc-2.15/configure --prefix=/usr --host=$TARGET --enable-kernel=3.7.4 --enable-add-ons --with-header=$SYSROOT/usr/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_ctors_header=yes
#make && make install

編譯完成以後標頭檔案安裝在 $$SYSROOT/usr/include
共享庫檔案和符號連結安裝在$SYSROOT/usr/lib

   5.  構建完整的交叉編譯器,用來編譯linux kernel

cd /home/sherlock/linux/gcc-build
rm -rf *
../gcc-4.7.2/configure --prefix=$CROSS_TOOL --target=$TARGET --with-sysroot=$SYSROOT --with-mpfr-include=/home/sherlock/linux/build/gcc-4.7.2/mpfr/src --with-mpfr-lib=/home/sherlock/linux/build/gcc-build/mpfr/src/.libs --enable-languages=c,c++ --enable-threads=posix
make && make install

3. 設定工具鏈的相關環境變數

/root/.bashrc

export CC="$TARGET-gcc"
export CXX="$TARGET-g++"
export AR="$TARGET-ar"
export AS="$TARGET-as"
export RANLIB="$TARGET-ranlib"
export LD="$TARGET-ld"
export STRIP="$TARGET-strip"

相關資源: