您的位置:首页 > 其它

ubuntu10.10下内核编译,解决开机启动出现Could not load /lib/modules/.../modules.dep的问题

2011-06-02 16:40 716 查看
一:下载内核源码的方法:

1、ubuntu 下下载内核源码:apt-get install linux-source

查找内核源码包:apt-cache search kernel-source,之后安装对应的源码包,也可直接执行apt-get install linux-source

在此种情况下下载的内核源码可能与当前使用的内核版本不同(我的ubuntu内核为2.6.35-22,而下载下来的内核为2.6.35.11)。

2、下载特定版本的Linux内核,可以参考:http://forum.ubuntu.org.cn/viewtopic.php?t=134404 Linux编译内核详解

例:$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.2.tar.bz2
二、编译源码

安装完内核源码后,进入/usr/src/后解压,解压完成后:

1、make menuconfig:配置内核

2、make:编译内核

3、make modules_install :将编译得到的内核模块复制到/lib/modules/<kernel-version>/目录下;

4、安装内核:make install

(启动配置文件grub.cfg是/boot/grub/grub.cfg(fedora是在menu.lst文件中))

三、make install

此时只是把压缩的内核镜像vmlinuz拷贝到了/boot下,还没有生成initrd.img,如果此时在grub.cfg文件中增加新编译的内核镜像的话(将其他内核版本的img作为此内核的img),开机后会出现:Could not load /lib/modules/.../modules.dep

到这里本来已经绝望了,感觉浪费了这么久的时间竟然失败啊!在网上找着了,有人提供了一个方案,就是使用initramfs-tools生成initrd.img,命令如下:update-initramfs -c -k 2.6.35.2之后会利用lib/modules下的文件生成initrd.img-2.6.35.2(位置在boot文件夹下),修改grub.cfg的img的路径。重新启动选择2.6.35.2,启动成功!参考http://www.linuxquestions.org/questions/debian-26/modprobe-fatal-could-not-load-lib-modules-modules-dep-335214/

在启动的过程中发现,ubuntu默认启动下是看不到grub的启动菜单的(在多系统的机器上可以看到,但虚拟机中无法看到),因此需要修改grub.cfg中关于时间的控制即timeout,有两个地方:

if [ "${recordfail}" = 1 ]; then
set timeout=-1
else
set timeout=10
fi



if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep --interruptible 3 ; then
set timeout=0
fi
fi
fi

前者为系统失败或成功的等待时间,后者为启动时按住shift或不按shift的等待时间,在虚拟机中可以在启动时按住shift或者直接把后者的timeout全部改为10.参考资料:http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=323524

四、备注:

1、vmlinuz是可引导的、压缩的内核

2、initrd.img的作用:initrd.img是Linux启 动过程中很重要的一个文件,如果你编译内核时将一部分功能编译为可加载模块。如果系统的一些设备的驱动编译为可加载模,那么启动时如果没有指定 INITRD=/path_to_initrd.img,那么系统启动或者会失败,或者启动后会有设备无法使用(像网卡或者其它设备)。如果没指定initrd.img或者指定的initrd.img中并没有包含正确的驱动模块,则系统启动时会挂起,并报告"kernel panic: VFS: Unable to mount root fs on 08:06"的错误。

3、需提高:对于只是顺利的走完整个流程,对于各步骤的细节很不清楚,如对内核的配置(menuconfig),内核源码makefile的了解,以及生成vmlinuz和img的过程和两个文件的作用都不清楚,还需要再对其进行深入分析和学习!

参考资料:

1、ubuntu论坛上关于编译内核源码的流程,很详细,早找到这个就不会费这么大劲了:

http://forum.ubuntu.org.cn/viewtopic.php?t=134404

2、关于解决Could not load /lib/modules/.../modules.dep问题的方法:

http://www.linuxquestions.org/questions/debian-26/modprobe-fatal-could-not-load-lib-modules-modules-dep-335214/

3、vmlinuz和initrd.img的作用:

http://blogold.chinaunix.net/u3/100815/showart.php?id=2026646

4、Linux内核官方源代码路径:http://www.kernel.org/pub/linux/kernel/v2.6/

5、关于grub启动菜单的显示:http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=323524
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐