我做了四次 LFS, 第一次做 LFS 是根据 youbest 的 << 手把手教你建立自己的 linux 系统 >> 来做的 http://blog.chinaunix.net/u/13265/showart.php?id=477122, 做得很快 , 大概一天就做完了 , 基本上对照着命令敲 , 只要不敲错 , 基本上没有什么问题 , 可是做完第一次 LFS 之后 , 并没有感觉对 linux 系统的了解有多少的加深 ... 仍然有很多问题无法解决 , 很多问题不明白为什么 ... 这次又重新花了近一周的时间来重新做 LFS, 按照手册一步步走的 , 对里面的不懂的知识点都进行学习 .. 现在的确觉感觉到对 LFS 的理解深了一些 ...
所以这里建议 , 新手或者刚开始 LFS 的朋友 , 不要照着快速手册做 , 那是将 LFS 手册上命令的一些缩到一起了 , 没有讲到理 .. 所以即使做了 , 也只是敲过一堆命令而已 ...
下面是我做 LFS 时学习到的一些知识 , 也是新手需要了解而且比较容易搞晕的知识点 :
1) 关于工具链 :
搭建工具链的目的实际上是作了一个用来做目标系统的精简的 linux 临时系统 , 这样做的目的是 , 尽量的避免与宿主系统纠缠在一起 , 而这样做能够实现的原因则是工具链的高度自包含 , 自依赖的特性 .
在工具链中比较容易搞混淆的是动态连接器和标准连接器以及工具链的调整 .
动态连接器是由 Glibc 提供 , 用来找到并加载一个程序运行时所需要的共享库 , 会被嵌入到每个共享 ELF 的可执行文件里 , 因此通过 readelf 命令可以查到系统的动态连接器的名称 , 一般情况下是 ld-linux.so.2.
标准连接器则是处理库文件的搜索路径 , 确保程序仅连接在指定的库上 . 标准连接器和汇编器是包含在 Binutils 中 .
对工具链的调整有两次 , 第一次是在制作工具链的时候 , 要限制搜索路径在 /tools/lib 中 , 目的也是为了尽量避免和宿主系统纠结 , 然后会修改 gcc 的 specs 文件 , 使它指向新的动态连接器 ; 第二次是在开始制作目标系统的时候 , 则是为了使用目标系统下面的 /lib 和 /usr/lib 等库 , 这次的目的则是 , 避免程序编译的时候和 /tools/lib 相关联 , 方便等系统做好之后对 /tools 工具链进行删除 , 这也是说工具链是临时的原因 . 体会好 PATH 的设置就可以较清楚的明白这些实现的过程 .
2) 虚拟文件系统
在所有的 linux 发行版中 ,/dev,/sys,/proc 这些目录下的文件都是不可编辑的 , 因为这些都是虚拟内核文件系统 , 由内核在引导的过程中产生的 , 并不存在于硬盘上 , 他们是用来和内核进行通信的 .
在 /dev 下填充设备时 , 先在 /dev 上挂载虚拟文件系统 , 然后检测到新的设备的时候就动态的创建设备节点 . 这里涉及到我之前问的关于设备驱动的问题 , 对于已经编译进内核的驱动程序 , 当被内核检测到的时候 , 会直接在 sysfs 文件系统中注册其对象 ; 对于编译成模块的驱动程序 , 当模块载入的时候才会进行注册 . 一旦挂载了 sysfs 到 /sys 上 , 内建的驱动程序在 sysfs 上注册的数据就可以被用户空间的进程所使用 , 并提供给 udevd 创建相应的设备节点 .udevd 利用 modprobe 来支持热插拔的情况 .
3) 无法找到设备
看到有很多人问怎么没有找到 cdrom, 当时我做完了也是没有 , 我是用 lfslivecd 进去 , 然后查看 cdrom 的属性 , 才知道 cdrom 实际上是 /dev/hdc 的一个符号链接 , 因此 , 我在 LFS 出的系统中对 /dev/hdc 做了个链接 , 结果就好用了 .. 后来我又试了下 , 不建链接直接使用 hdc 也是可以的 ... 虽然是个很简单的问题 , 但是能自己想办法找到答案 , 感觉也不错 ... 这里想说的是 ,linux 下有很多设备是建立的一些链接而已 , 如果找不到 , 就看看原系统中 , 最本来的面目是什么就可以了 ...
LFS 手册有写得超好的一句话 : 理解 linux 系统是如何工作的关键在于明白每个包的用途以及为什么用户 ( 系统 ) 需要它 .---- 我觉得这句话也是新手需要使用 LFS 详细手册的原因 .
做 LFS 总结是 : 利用宿主系统 , 生成一个简单简洁的于宿主系统尽量无关的 linux 系统 ( 工具链 ), 然后利用工具链工具 , 将一块磁盘格式化成你目标系统的文件系统格式 , 然后再利用工具链来定制你所需要的 linux 系统 , 安装你所需要的软件 , 来实现定制 .
完了 .. 这是我这一周艰苦做 LFS 学习的知识点 ... 接下来准备做 BLFS 和 CLFS...good luck...