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
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
相关文章推荐
- Debian编译升级内核(could not load /lib/modules/2.6.28/modules.dep问题)
- Debian编译升级内核(could not load /lib/modules/2.6.28/modules.dep问题)
- linux2.6.35编译出现错误could not load /lib/modules/2.6.35/modules.dep
- Ubuntu上出现无法获得锁“Could not get lock /var/lib/apt/lists/lock”问题的解决
- 解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题
- linux 解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题
- 解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题
- 解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题
- fedora 25 升级更新内核后,开机出现:failed start load kernel modules 的解决;还有更新内核后maya viwePort2.0不能用的问题
- 解决ubuntu编译内核uImage出现问题"mkimage" command not found - U-Boot images will not be built问题
- Tomcat启动失败:Could not load java.net.URLEncoder 问题解决
- 关于Ubuntu中Could not get lock /var/lib/dpkg/lock问题解决方法
- ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决
- 解决Opentaps/OFBiz在Eclipse启动时"Could not load VFS configuration"的问题
- modprobe:FATAL: could not load /lib/modules/2.6.35-22-generic/modules.dep No such file or directory
- ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决
- cloudera-scm-server启动时出现Caused by: java.io.FileNotFoundException: /var/lib/cloudera-scm-server/.keystore (No such file or directory)问题解决方法(图文详解)
- cloudera-scm-server启动时出现Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection问题解决方法(图文详解)
- QT运行exe时出现“could not find or load the QT platform plugin windows”问题的解决办法
- 解决nim db_mysql could not load: libmysql.dll的问题