(最终篇)LFS笔记之三——编译最终系统
前两篇地址
http://topic.csdn.net/u/20110522/01/4a998446-b94f-46e4-9184-a31ad1dee0fd.html
http://topic.csdn.net/u/20110522/17/7f37b8ff-f2f5-4ee4-99b0-7e6d661d2f79.html
从前两篇的反应看,似乎大家并不太对LFS感兴趣,不过按照有始有终的原则,本次的最终篇必须写完。
在第二篇中,我们完成了临时系统的构建,这个临时系统加上等会编译的最后一遍glibc实际上是最终系统构建环境,这个临时系统的输出将是独立于宿主系统的。
开始构建最终系统前,LFS文档会要求你挂载虚拟文件系统,/dev、/proc等,这几个目录不是真正存在于硬盘上的,跟着文档来就行了,挂载的命令行如果感兴趣可参考手册页。
然后chroot进你构造的文件系统,以后的编译都在这个文件系统中进行,硬盘文件系统我用的是ext4,没理睬文档里推荐的ext3。
关于包管理系统,LFS作为一个实验系统,一般不会用于实用,所有没有包管理没太大问题,如果想移植deb或rpm包管理系统,可参考网上相应教程。
按照教程提取Linux头文件(用于glibc编译),安装手册页。
如果之前的构建可能出错,下面的glibc和gcc构建是很容易体现错误的地方,测试程序一定不要忽略,虽然耗时很长(尤其是gcc,core i7都测试了2个小时),测试完之后如果没有什么严重错误,那基本就没事。gcc和glibc规模很大,基本没有测试完全通过的情况,glibc里可以不担心的错误,LFS文档已经给出,我就出了tst-cpuclock的错误,是没关系的。gcc要复杂些,测试冲出现上百个错误都正常,LFS文档提供了gcc网站的测试上传页,对比一下人家的测试,我发现我的错误还算是少的,也没有关系。
这两道坎过了之后,余下的就比较轻松了,余下的某几个测试程序耗时也比较长,建议都跑一下吧,构建LFS就别怕多花点时间。我记得我的perl测试也出过一个错误,不过没关系。
最终系统的软件包全部装完后,清理调试符号,删除临时系统,最终系统基本就构建好了,还差最后一个重要的软件包——Linux内核,以及一些脚本配置工作。
大部分的与具体机器无关的脚本都在LFS提供的bootscripts里面,不用自己写。
随后会配置几个与自己机器相关的脚本,需要关注的是bash和网络,注意LFS没有装中文字库和zhcon,bash的locale老老实实选英文。网络配置方面,LFS没有dhcp客户端,请配置静态ip,像vmware的话,只要你查询一下你的vmware虚拟网卡(取决于你用的是NAT、bridge还是其他)的可用ip段,随便指定一个就行了。hosts文件建议抄宿主系统的,hostname自定义。
强调一下/etc/fstab,如果你是像我一样用的第二块硬盘配置LFS,这里面的硬盘最好不要用文档中的/dev/xxx,以后你卸载宿主系统硬盘的话这个值可能会变,建议像debian那样用UUID。LFS之所以相对是较高级的发行版,其实前面的包安装过程一路复制粘贴就可以了,再菜的菜鸟都可以做到不出错,真正考验人的地方正是这一块配置和内核编译后的处理,许多LFS失败都在这最后一步。
下面是编译Linux内核和配置grub。
我今天不讲什么最优化内核配置,我已经研究吐了,也编译过许多遍,发现除非是嵌入式系统资源的确紧张,PC这个内核定制根本没什么意义……最大的作用除了能学习点东西外就是看着成倍成倍的削减内核体积带来的那种所谓“成就感”吧。当然,你也得为这种成就感付出代价,在真机器上过分削减的内核不出问题的可能性很小……我的经验是定制内核编译后打包的体积最好别小于主流发行版的三分之一。
为什么说内核定制在PC上没有什么实际意义?我告诉你直接copy我宿主系统debian6的config文件编译出的内核,LFS成功启动后内存占用也不过30M而已,绝大部分modules是不载入的。确实,除了嵌入式系统和刻意去学习,一般来说PC上使用还是用主流发行版配置比较好。
构建LFS系统,最快捷的方式就是直接使用宿主系统的内核配置,当然,如果仅仅是如此的话我几乎可以肯定你会遭遇kernel panic无法启动,原因是大部分发行版内核都有initrd,所以编译为modules的东西非常多,甚至于很基本的ext3/4文件系统、PATA/SATA/SCSI驱动,在一个没有initrd的LFs系统里,这几个驱动如果不内建在kenel里,而是modules,会导致内核无法挂载硬盘而kernel panic,这是许多LFs玩家的遭遇。
前面说过我不愿意再花无谓的时间定制内核了,而且你即便把这几个驱动选为内建了也不能保证你的内核就一定能启动成功,怎么办,最简单的办法——如果嫌移植initramfs麻烦(一些依赖关系要解决),把你编译好的内核config、System、vmlinuz、/lib/modules/2.6.xx……copy到宿主机上,用宿主机的mkinitramfs/mkinitrd制作一个initrd就行了,这是让你的LFS能够在最短的时间的启动的捷径,而且,这样的LFS基本上是一个有实用价值的linux基础系统,因为内核配置用的主流发行版的,软硬件适应性极强。
最后,grub-install、grub-mkconfig,注意!老情况,如果你是第二硬盘上编译的LFS,这里的grub.cfg按需调整!虽然grub.cfg官方不推荐修改,没关系,进了LFS再grub-mkconfig一次就没问题了。
安装LFS成功!
由于所有的工作都在第二硬盘里,这块硬盘的碎片不少,推荐使用DiskGenius等工具按文件拷贝一次虚拟硬盘,然后用dd命令清理可用空间,最后用vmware把磁盘压缩一遍。
[解决办法]
UP!!!!
[解决办法]
顶一下 围观
[解决办法]
强大!!!!
[解决办法]
路过一下~~
[解决办法]
我尝试着看完
可惜自己水平实在太低
完全看不完
[解决办法]
十几个小时~~~~
楼主真有时间
[解决办法]
顶一个。
[解决办法]
好东西,收藏!
谢谢楼主!!
[解决办法]
[解决办法]
虽然不太明白,但依然顶起。支持楼主。
[解决办法]
路过顶