手斧Linux – 从LFS到Funtoo (131)

来源:互联网 发布:java中的单例模式 编辑:程序博客网 时间:2024/05/21 06:53

第16章 U盘启动遇到的问题

A. syslinux是否正常?

如果以下条件都成立:

· U盘的分区表正常,

· /dev/sdb1有指定是激活分区,

· syslinux正常安装到/dev/sdb1,

那么,就会显示出syslinux正在启动的信息,并显示选择菜单。可用tab键来查看菜单选项对应的参数,也可做临时的一次性修改。

B. kernel是否正常加载?

如果在syslinux.cfg里的kernel=项写对了,syslinux能理解/dev/sdb1的msdos文件系统格式,并从中取出kernel的img文件,加载后跳进去执行。这时在终端窗口(控制台,由syslinux.cfg里定义的console=指定。)上可以看到有内核启动的相关信息输出。

C. initramfs是否正常加载?

它是由kernel加载起来的。syslinux会将cfg文件里指定的initrd=指定的initramfs映像装内存,kernel会在加载的后期找到它,并开始解压缩。在kernel的启动信息输出中,会看到这条信息Unpacking initramfs......。

如果不能正常,要查看syslinux的cfg文件里initrd=指定的路径是不是对了。

D. rootfs是否正常加载?

rootfs由initramfs里的linuxrc发现并完成加载的。要完成这个工作,kernel+initramfs的系统要有能力将rootfs所在的文件系统mount上来。对于第1种方法做的U盘,kernel或initramfs里,要有能力支持访问msdos分区,得到image.squ,并要有能力支持访问loop 和squashfs的文件系统,能将image.squ mount上来,得到里面的rootfs。而对于第2种方法做的U盘,情况可能会顺利些,因在缺省情况下,对ext3的文件系统都是支持的,反而是U盘的第2分区可能被分配成别的设备文件(由具体的硬件配置决定),不是/dev/sdb2,syslinux.cfg里的root=指定的。

当rootfs找不到或装载出现困难时(或找不到指定的介质,或不能成功将指定的设备mount上来。),initramfs会停下来。让你有机会列换启动介质(如光盘软盘U盘);或输入指定一个新的rootfs所在的设备文件名;或输入shell进入到initramfs带来的busybox的命令行里,提供更大的调试空间。

进入到shell里,可以查看预期的设备文件(如/dev/sdb2)是否存在,如果找不到,可能是设备的硬件驱动没正常工作,驱动程序没有加载成功;可以用dmesg来查看系统启动过程中遇到的情况;可以用lsmod来查看动态加载了哪些ko模块;可以用mount命令来调试介质的加载情况。

E. msdos分区是否能正常加载?

syslinux只能安装在msdos或ntfs分区里。这就要求kernel+initramfs要能mount msdos分区。如果在busybox的shell里mount /dev/sdb1 (一个msdos分区),失败了,用dmesg能看到失败的原因,可能是缺少了msdos文件系统的支持,也可能是缺少了NLS_CODEPAGE_437 NLS_ISO8859_1字

0 0
原创粉丝点击