环境说明:
centos 6.5 mini desktop版本
备注说明:本文是根据《深度探索Linux操作系统构建和原理解析》的笔记
步骤
1. 准备工作环境,首先要建立工作目录和环境变量
在/home/sherlock下建立linux目录
#mkdir source build cross@H_301_15@-tool cross@H_301_15@-gcc@H_301_15@-tmp sysroot
命令vi ~/.bashrc
在.bashrc中添加如下内容
unset LANG
export HOST=i686@H_301_15@-pc@H_301_15@-linux@H_301_15@-gnu
export BUILD=$HOST
export TARGET=i686@H_301_15@-none@H_301_15@-linux@H_301_15@-gnu
export CROSS_TOOL=/home/sherlock/linux/cross@H_301_15@-tool
export CROSS_GCC_TMP=/home/sherlock/linux/cross@H_301_15@-gcc@H_301_15@-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@H_301_15@-build && cd binutils@H_301_15@-build
../binutils-2.23.1/configure --prefix=$CROSS_TOOL --target=$TARGET --with@H_301_15@-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@H_301_15@-sysroot=$SYSROOT
--with@H_301_15@-newlib --enable@H_301_15@-languages=c --with@H_301_15@-mpfr@H_301_15@-include=/home/sherlock/linux/build/gcc-4.7.2/mpfr/src --with@H_301_15@-mpfr@H_301_15@-lib=/home/sherlock/linux/build/gcc@H_301_15@-build/mpfr/src/.libs --disable@H_301_15@-shared --disable@H_301_15@-threads --disable@H_301_15@-decimal@H_301_15@-float --disable@H_301_15@-libquadmath --disable@H_301_15@-libmudflap --disable@H_301_15@-libgomp --disable@H_301_15@-nls --disable@H_301_15@-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 @H_301_15@-p1 < ../../source/glibc-2.15@H_301_15@-x86@H_301_15@-cpuid@H_301_15@-check@H_301_15@-no@H_301_15@-includes@H_301_15@-default.patch
patch @H_301_15@-p1 < ../../source/glibc-2.14.1@H_301_15@-fixed-1.patch
patch @H_301_15@-p1 < ../../source/glibc-2.14.1@H_301_15@-gcc_fix-1.patch
patch @H_301_15@-p1 < ../../source/glibc-2.14.1@H_301_15@-sort-1.patch
然后才可以开始编译glibc
#mkdir glibc@H_301_15@-build
#cd glibc@H_301_15@-build
../glibc-2.15/configure --prefix=/usr --host=$TARGET --enable@H_301_15@-kernel=3.7.4 --enable@H_301_15@-add@H_301_15@-ons --with@H_301_15@-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@H_301_15@-build
rm @H_301_15@-rf *
../gcc-4.7.2/configure --prefix=$CROSS_TOOL --target=$TARGET --with@H_301_15@-sysroot=$SYSROOT --with@H_301_15@-mpfr@H_301_15@-include=/home/sherlock/linux/build/gcc-4.7.2/mpfr/src --with@H_301_15@-mpfr@H_301_15@-lib=/home/sherlock/linux/build/gcc@H_301_15@-build/mpfr/src/.libs --enable@H_301_15@-languages=c,c++ --enable@H_301_15@-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"
相关资源:
原文链接:https://www.f2er.com/centos/379671.htmlglibc-patch补丁
深度探索Linux操作系统:系统构建和原理解析 :链接: http://pan.baidu.com/s/1c23grfU 密码: 6d8w