经历了千辛万苦,终于编译完了全部LFS系统,怀着激动的心情重启机器,期待着自己亲手构建的LFS顺利运行时,遇到了Kernel panic ——内核打出类似下面的一段话,然后死机:
VFS: Cannot open root device "hda0" or unknown-block(0,0) Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
经研究分析,得知是硬盘驱动器的驱动模块没有加入到Linux内核中。
解决的也很直接:找到硬盘控制器的型号,然后把相应的驱动程序编译到内核中。更详细的解决步骤是:
1、在构建LFS的host系统上,运行lspci命令,列出机器的硬件信息。
2、在硬件信息中,查找 IDE interface 或 SATA Controller 或 SAS Controller 等关键字,得到到硬盘控制器的型号
3、在内核配置中,把对应的驱动程序编译到内核(不能编译成模块)。对 IDE硬盘,驱动程序在DeviceDrivers-->ATA/ATAPI/MFM/RLL配置项下找;对于 SATA硬盘,驱动程序在DeviceDriver-->SCSI device support-->SCSI low-level drivers配置项下找。
4、重新编译内核,copy到相应的/boot文件夹,重启机器,在LFS的新内核下,问题解决。
#lspci
得到00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01),
所以加入的硬盘驱动器驱动模块是Intel Corporation 8237 PIIX series
eth0:
ethernet Controller:AMD 79c970 PCnet32 LANCE
驱动程序在DeviceDriver-->Ethernet Device
选择 AMD PCnetII
在VMWare+LFS 6.3安装Framebuffer支持
笔者想在LFS6.3中运行Qt Embedded版本的WebKit,需要Framebuffer的支持。即设备/dev/fb0。尝试多次得知需要在编译内核 make menuconfig时加入support for framebuffer device、framebuffer console support、vesa VGA graphics support
启动的时候需要配置vga参数,使用LILO则修改/etc/lilo.conf,使用grub则修改/etc/grub.conf。笔者当前grub配置文件放在/boot/grub/下。
修改方式为:
修改/boot/grub/menu.lst文件,为kernel增加启动参数“vga=xxx”。(xxx表示分辨率和色彩,具体数值见相关资料)。
vga=788
进入系统后可以看到/dev/fb0 、/dev/fb1已经安装。
另外一个编译错误:编译安装grub-0.97时出现
asmstub.c:614: error: `KEY_LEFT' undeclared (first use in this function)
asmstub.c:616: error: `KEY_RIGHT' undeclared (first use in this function)
asmstub.c:618: error: `KEY_UP' undeclared (first use in this function)
asmstub.c:620: error: `KEY_DOWN' undeclared (first use in this function)
asmstub.c:622: error: `KEY_DC' undeclared (first use in this function)
asmstub.c:624: error: `KEY_BACKSPACE' undeclared (first use in this function)
研究分析得知,undeclared的这几个宏,是在ncurses里面定义的,出现这个问题的原因可能是ncurses没有安装或安装失败,导致使用curses.h失败,回退到前面的安装过程,没有发现错误。
于是采用新的解决办法:
加 --with-ncurses-include-dir=/usr/includes 到./configure之后,显示的指明ncurses的路径。