LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2696|回复: 4

用交叉编译的方法编译lfs

[复制链接]
发表于 2003-5-4 20:45:25 | 显示全部楼层 |阅读模式
首先声明,我不保证这方法一定成功!也许可以在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/binPATH

第二步:
用交叉编译方法编译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/binPATH
修改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。
发表于 2003-5-5 09:20:00 | 显示全部楼层
你现在是用这个方法编译的么?
 楼主| 发表于 2003-5-5 12:09:30 | 显示全部楼层
是啊,三步我都做了。不过我觉得第三步没必要,交叉编译是不会包含主系统的东西的。
发表于 2003-5-5 13:13:19 | 显示全部楼层
高!LFS就要这样玩,随心所欲的感觉,呵呵!
发表于 2003-7-4 09:04:02 | 显示全部楼层
有时间试试,但手头上可控制的只有x86机器(linux +win)
看看在win下,能不能作出linux,
若有时间装个freebsd,然后在它上面看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表