+ -
当前位置:首页 → 问答吧 → 内核启动,搞不明白

内核启动,搞不明白

时间:2003-04-04

来源:互联网

在lilo.conf里有
image=/boot/vmlinuz-2.4.20
label=New
read-only

image=/vmlinuz //vmlinuz-->/boot/vmlinuz-2.4.18.686
label=Linux
read-only

image=/vmlinuz.old //vminuz.old-->vmlinuz-2.4.18-bf2.4
label=LinuxOLD
read-only

升级后,启动,选Linux,启动提示
request_module[block-major-3]:Root fs not mounted
Please append a correct "root=" boot option
Kenel panic:VFS:Unable to mount root fs on 03:01
我在Linux 的配置里加了 root=/dev/hda1 没有用
而LinuxOLD引导就没有问题。为什么?
vmlinuz-2.4.18.686 和vmlinuz-2.4.18-bf2.4有什么不同? 不能启动的原因是什么?
谢谢

作者: goophy   发布时间: 2003-04-04

你是用apt-get或dselect直接装的已编译好内核镜像包吧?
我原来装过一个kernel-image-2.4-k6 - Linux kernel image for version 2.4 on AMD K6/K6-II/K6-III.也是出相同的问题,出错信息是说:内核无法加载root分区,找不到root目录,可能是编译时有关FS模块的选项没有打开,建议下载源码包自己手工编译。

以下是我对有关编号的理解(若有不对请大家指正)
386基于16位处理器架构的版本(386、486)
586基于16/32位混合处理器架构的版本(Pentium)
686基于纯32位处理器架构的版本(Pentium Pro/Celeron/Pentium II/Pentium III)

作者: LYOO   发布时间: 2003-04-04

我用的是编译的方法!不过提示找不到modules,可是我已经make modules, make modules_install.唉,不知道原因,以前看过帖子,说要改 /usr/include/里的asm,scsi,..的联接,指到新的内核路径,我晚上再试试。谢谢

作者: goophy   发布时间: 2003-04-04

:)

作者: goophy   发布时间: 2003-04-04

我也遇到过。编译内核时要生成initrd文件,试试在lilo.conf中加上initrd=initrd.img-xxx-x。

作者: ziyouwa   发布时间: 2003-04-07

引用:
最初由 ziyouwa 发表
我也遇到过。编译内核时要生成initrd文件,试试在lilo.conf中加上initrd=initrd.img-xxx-x。
为什么我编译内核,就是不产生initrd.img-xxx-x文件啊!

作者: hoby   发布时间: 2003-08-17

编译默认是不产生 initrd.img 的,initrd.img 可以简单理解为 /lib/modules/kernel-xxxx 的打包。
一般情况都不需要它,除非有些特殊的硬件设备,需要在引导时提供驱动支持,那么 initrd.img 就会在引导时事先在内存中做个映象,把模块解压到这个映象中。
如果你需要,可以用 --initrd (没记错的话) 选项产生。

看你的情况,估计和分区使用的文件格式有关。
对你的 root 分区,一定要选上对应的文件格式,如 reiserfs 就应该明确的用 <*> 而不该用 <M>.其它你不需要的文件格式,最好不要,或用 <M>.

对于 debian 提供的内核,都连带了 initrd.img,如果在引导时不加上它(也就是在 lilo.conf 里添上),可能会出现引导失败,我想原因也就是 debian 内核对文件格式都是做成模块支持的,而非内置的原故吧!

作者: quanliking   发布时间: 2003-08-17

你的root fs是什么类型的文件系统?
是否把它的支持编译进了内核?作为module是没有用的。

作者: ultralix   发布时间: 2003-08-17

其实,/usr/include里面的linux asm scsi这三个没有必要指象新的文件.反正我在2.5.69里面指象了新的文件以后,反而发生错误了.

在编译2.5.69内核的时候,建议看看quanliking的"编译2.5.69需要注意..."

作者: hoby   发布时间: 2003-08-22

引用:
最初由 quanliking 发表
编译默认是不产生 initrd.img 的,initrd.img 可以简单理解为 /lib/modules/kernel-xxxx 的打包。
一般情况都不需要它,除非有些特殊的硬件设备,需要在引导时提供驱动支持,那么 initrd.img 就会在引导时事先在内存中做个映象,把模块解压到这个映象中。
如果你需要,可以用 --initrd (没记错的话) 选项产生。

看你的情况,估计和分区使用的文件格式有关。
对你的 root 分区,一定要选上对应的文件格式,如 reiserfs 就应该明确的用 <*> 而不该用 <M>.其它你不需要的文件格式,最好不要,或用 <M>.

对于 debian 提供的内核,都连带了 initrd.img,如果在引导时不加上它(也就是在 lilo.conf 里添上),可能会出现引导失败,我想原因也就是 debian 内核对文件格式都是做成模块支持的,而非内置的原故吧!
我的也是但是我已经加上了
initrd=/boot/intrd.img-2.4.21-3-k7
还是出错。
说什么 要 devfs=mount
但是加上还是错。居然是Unrecognized token

作者: onlyclimb   发布时间: 2003-08-22

现在的 debian 提供的内核里都带了 devfs ,这东西还再开发,大伙估计没几个人会使,不用也罢。
$ vi /etc/lilo.conf
append="devfs=nomount"

$ lilo -v -v -v
这样可以在引导时去掉 devfs 支持。

作者: quanliking   发布时间: 2003-08-23

引用:
最初由 LYOO 发表

以下是我对有关编号的理解(若有不对请大家指正)
386基于16位处理器架构的版本(386、486)
586基于16/32位混合处理器架构的版本(Pentium)
686基于纯32位处理器架构的版本(Pentium Pro/Celeron/Pentium II/Pentium III)
386 是 32 位处理器
486DX 包含了协处理器,相当于80386+80387,当然还有一些指令的优化。
586(pentium)包含了两个整数处理单元,所以有 64 位的数据总线

作者: gnawux   发布时间: 2003-08-30

既然必须手动添加initrd等选项,那为什么程序不自动添加呢?

作者: zxwmail   发布时间: 2003-08-31

又不是所有的内核都需要initrd...

作者: carlos   发布时间: 2003-08-31

热门下载

更多