第13章 LiveCD问题分析
1,关于qemu命令行里的 -boot d -cdrom myfuntoo.iso。
-cdrom myfuntoo.iso 让qemu虚拟机里输出一个cdrom设备,并有光盘output.iso在里面。
-boot d 让qemu从cdrom里开始加载。
如果output.iso正常,qemu会从iso里找到isolinux/isolinux.bin,开始从光盘引导。
为什么是isolinux/isolinux.bin?这个是在mkisofs时指定的。 isolinux/isolinux.bin会开始解释isolinux/isolinux.cfg里参数,开始一个启动选择菜单或简单的交互,开始一个内核的启动。
2,关于iso里的长文件名,
为了能在光盘的文件系统里存放非8.3的文件名,需要在mkisofs时,带上 -joliet -joliet-long -full-iso9660-filenames -allow-leading-dots。
3,在启动过程中停下来检查。
在做iso时,isolinux/isolinux.cfg里要指定kernel/initrd/loop,将loop指定的文件更名,让启动走到initrd时,做不成根文件系统,就可以进入一个busybox的shell里。
4,内核对文件系统的支持。
内核被加载后,如果内核的配置正确,工作正常,会生成设备/dev/sr0,对应于光驱设备,如果没能有/dev/sr0生成,需要检查内核的编译配置。
initrd会执行其中的/linuxrc来执行最后的根文件系统的加载,需要mount /dev/sr0,这需要内核对iso文件系统的支持,在内核配置里要找开isofs的相关支持,ISO9660_FS JOLIET ZISOFS 几项。如果isofs以module方式编译支持,而要在/usr/share/genkernel/arch/x86_64/modules_load里加上isofs的支持,使得genkernel时,将模块带上,启动地会加载。否则,linuxrc会报出不认得/dev/sr0里的介质。
initrd在linuxrc里去mount /dev/sr0并不是最后的根目录,livecd启动还要将iso里的squashfs映象文件mount上来,做为最后的根文件系统。因此,要打开内核配置里和SQUASHFS有关的选项。如果是以模块方式编译,也要将它加到/usr/share/genkernel/arch/x86_64/modules_load里。