作者: lvjinhua
日期:2005.11.13
昨天创建了一个基本的工作空间,总结一下:首先在一个新分区上构建ext2文件系统,作为以后LFS系统的主分区,如果可能最好有一个swap分区;然后将此分区挂载到一个目录下,我们选择 /mnt/lfs , 并设置环境变量 $LFS=/mnt/lfs; 接下来在 $LFS下新建目录 tools 并将其在宿主系统 /tools处建立一个符号连接, 我们马上就要构建的临时编译环境将全部存放到此目录中; 创建目录 $LFS/sources用于存放解压后待编译的源代码 ;紧接着在宿主系统新建一个用户 lfs , 赋予其 $LFS/tools, $LFS/sources目录的所有权, 后续步骤将使用 lfs 用户进行; 最后运行 su - lfs 进入新建的用户, 为新用户设置一些环境参数, 目的是使我们在此用户下编译的内容尽可能小地依赖于宿主系统. 复习完成了以前的内容, 下边进入今天的主题->
1. 什么是临时编译环境
见文知义啊,也就是说此编译环境并不进入到我们最终建成的LFS系统,而只是一个中间内容;这里边包含了一个完整的开发环境,包括C/C++编译器, 调试器,文件编译器和各种Linux 常用工具集.
2. 为什么要构建临时编译环境
构建临时编译环境的目的是为了使我们最终的LFS系统完全地与宿主系统隔离. 之所以要隔离的原因是因为真实的操作系统为了减少可执行文件的大小和最大限度地重用一些通用库, 因此把这些通用库做成可在运行时动态加载的动态链接库形式, Linux 下常以 *.so 表示, 而Windows下常以 *.DLL 的形式表示. 实际上我们的宿主主机就已经是一个编译环境了,为什么还要构建一个临时的呢? 原因是这样滴::宿主上的编译环境是高度依赖于宿主主机的, 基于这样的原因, 非常不便于我们对编译后软件的测试. 因此这里利用交叉编译的基本方法, 首先从宿主系统编译一个基本上不依赖于宿主的编译环境, 然后利用这个环境再编译最终的LFS.
3. 第一步:第一次编译基本部件 binutils 和 gcc
首先你得知道自己下载的LFS源代码包在哪个位置, 由于我是使用 LFS6.1-LiveCD 启动的系统, 因此源代码包位于 /sources 目录下, 新建环境变量 export $SRC=/sources 指代此源代码目录
LFS的作者假设我们已经非常熟悉Linux的使用, 因此对于一个压缩的源代码包如何解压缩都没说, 我这里简单的说一下: 首先进入解压后源代码欲存放的目录, cd $LFS/sources , 然后使用 tar 命令解压binutils工具包, tar -xf $SRC/binutils-2.15.94.0.2.2.tar.bz2 , 稍等片刻, 就可在 $LFS/sources目录下发现一个新的目录 binutils-2.15.94.0.2.2 , 解压过程完成.
新建一新目录来编译binutils工具, mkdir $LFS/sources/binutils-build , cd binutils-build , 进入目录, 执行 ../binutils-2.15.94.0.2.2/configure --prefix=/tools --disable-nls 对源代码进行自动配置, configure 后的参数 --prefix=/tools 指明其编译生成的内容存入 /tools 目录中, 注意, 此目录是 $LFS/tools 目录的一个符号连接, --disable-nls 参数将禁止国际化特性. 配置无错完成后, 可接着运行 make ; make install 对源代码进行编译并安装, 注意这里它将安装到 $LFS/tools 目录下. 下边的这步将调整连接器, make -C ld clean ; make -C ld LIB_PATH=/tools/lib , 作用就是使用刚生成的库文件重新编译连接器.
在目录 $LFS/sources 解压 gcc3.4.3.tar.bz2 , 然后按照LFS安装说明上的讲解去安装就行.
4. 第二步:编译其它工具
实际上这没有什么好说的, 只要按照LFS安装说明, 打补丁, 配置, 编译, 安装, 调整, 一路下去就行.
好了, 临时环境的构建就到这里, 下面将进入 LFS 系统基本软件的安装过程.