电脑技术学习

VMware环境下Linux内核编译过程详细解析

dn001
终于可以在vmware中使用新编译的内核调试驱动了,虽然也比较经常在vmware里使用linux,但是还从没有在里面编译过内核,所以不知道居然还有这么多的道道。编译内核的过程就不说了,除了通用的编译过程,各个发行版可能还会有自己特有的编译命令,比如我使用的debian。下面只列出我在编译过程中尝试过的步骤。

1、从kernel.org上下了2.6.18的sourcecode,编译安装后使用新的内核启动,看到下面让人讨厌的错误:

VFS:Cannot open root device "sda" or unknow-block(0,0)

Please append a correct "root=" boot option

kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)

这样的错误到也不是第一次亲密接触了,比如很久以前使用dd将系统copy到另一块硬盘上,并使用新的硬盘启动时也遇到过这样的错误,那是因为没有将硬盘接到与原来硬盘对应的IDE接口上,不过这绝对不是让它追随我在这里出现的原因,当然久经风浪脸皮已经跟brass一样厚的我是觉得不会在这里倒下的,于是没有多想(惭愧),随即使用大家都最常使用的重启大法,寄望于它刚才是一时的疏忽。但是在几十秒之后,它又赧然出现在我的眼前,无它,只好google了。

2、从google的结果来看,同道(一同着道)中人还真不少,五花八门的过程揭露了大致无二的解决方法。主要是内核的配置选项了,并且主要集中在

Device Drivers--->SCSI device support--->SCSI low-level drivers--->BusLogic SCSI support

主要是因为使用scsi时,vmware需要它,还有文件系统,我用的是ext3,因为看到有人说没有将它们直接编译进内核导致启动仍然不成功,给自己个懒的理由,也就不多尝试了,直接将它们built-in了,然后执行

make-kpkg revision=1.0 kernel-image

编译,且使用dpkg安装后重启,让人沮丧的是,前面那几行可爱的错误又出现了。

3、再回头检查内核的配置选项,觉得相关的都已经选上了,按理说不应该会再找不到root文件系统了啊,要不试试initrd?虽说已经将上面的几个模块编进了内核,是不是还需要创建initrd那?权且试试吧,于是重新编译内核

make-kpkg revision=1.0 kernel-image initrd

再安装重启,居然甩开了那个粘人的panic,不过仍然还有点云里雾里的,呵呵,linux上的这些事儿好像多是这样子,抽空深入研究下initrd去。