|
首先声明,我不保证这方法一定成功!也许可以在freebsd中编译lfs
创建三个目录stage1,stage2和stage3,设置环境变量。方法同plfs。
第一步:
编译一个主系统的工具链,这一部是可选的。我是在woody中编译lfs,gcc版本为gcc-2.95.4,这一版本是不能编译glibc-2.3.2的,所以必须升级工具链。这一步相当于pure lfs的静态工具链。
编译binutils-2.13.2.1(可选)
mkdir ../binutils-build &&
cd ../binutils-build &&
../binutils-2.13.2.1/configure --prefix=stage1 &&
make &&
make install
编译gcc-3.2.2
mkdir ../gcc-build &&
cd ../gcc-build &&
../gcc-3.2.2/configure --prefix=stage1 --enable-languages=c &&
make &&
make install
修改PATH变量,确保第二步编译使用新工具链。
PATH=/stage1/bin PATH
第二步:
用交叉编译方法编译glibc-2.3.2 、binutils-2.13.2.1和gcc-3.2.2。
安装头文件
make mrproper &&
make include/linux/version.h &&
make symlinks &&
mkdir -p /stage2/include &&
cp -HR include/asm /stage2/include &&
cp -R include/asm-generic /stage2/include &&
cp -R include/linux /stage2/include &&
touch /stage2/include/linux/autoconf.h
编译glibc-2.3.2
mkdir -p /stage2/etc &&
touch /stage2/etc/ld.so.conf &&
mkdir ../glibc-build &&
cd ../glibc-build &&
CFLAGS="-O2 -pipe" ../glibc-2*/configure --prefix=/stage2 \
--enable-add-ons --disable-profile \
--with-binutils=/stage1/bin --with-headers=/stage2/include \
--without-gd \
--host=i686-pc-linux-gnu \
--build=i686-pc-linux-gnu \
--target=i686-pc-linux-gnulibc2.3.2 &&
make &&
make check &&
make install &&
make localedata/install-locales
编译binutils-2.13.2.1
mkdir ../binutils-build &&
cd ../binutils-build &&
../binutils-2.13.2.1/configure --prefix=/stage2 --enable-shared \
--host=i686-pc-linux-gnu \
--build=i686-pc-linux-gnu \
--target=i686-pc-linux-gnulibc2.3.2 &&
make &&
make install
编译gcc-3.2.2
mkdir ../gcc-build &&
cd ../gcc-build &&
../gcc-3.2.2/configure --prefix=/stage2 --enable-shared \
--enable-threads=posix --with-slibdir=/stage2/lib \
--enable-__cxa_atexit --enable-clocale=gnu \
--enable-languages=c \
--host=i686-pc-linux-gnu \
--build=i686-pc-linux-gnu \
--target=i686-pc-linux-gnulibc2.3.2 \
--with-headers=/stage2/include \
--with-libs=/stage2/lib \
--with-newlib &&
make bootstrap &&
make install
实际上,--target也是i686-pc-linux-gnu,仅仅为了交叉编译改为i686-pc-linux-gnulibc2.3.2。如果--host、--build和--target不同,configure就认为是交叉编译。
修改PATH变量
PATH=/stage2/i686-pc-linux-gnulibc2.3.2/bin:/stage2/bin PATH
修改specs文件,用gcc -v看看specs在哪,把/lib/ld-linux.so.2改为/stage2/lib/ld-linux.so.2
第三步:
重复第二步工作,把--host、--build和--target去掉,prefix改为--prefix=/stage3。完成后修改PATH变量和specs文件。
这一步是完全没有必要。
剩下的工作和pure lfs是一样的。
util-linux无法动态编译,我忽略了。可以编译静态的mount、umount代替,或者第六章创建目录后用主系统挂接proc。 |
|