+ -
当前位置:首页 → 问答吧 → kernel panic 是否只是编译内核不当引起的错误?

kernel panic 是否只是编译内核不当引起的错误?

时间:2008-04-02

来源:互联网

我已经很努力很仔细的重新编译了n此内核了
仍然是这个错误

VFS:Cannot open root device "hdb2" or unknown-block(0,0)
Please append a correct "root=" boot option
kernel panic: VFS: Unable to mount root fs on unknown-block(0,0)

clfs中是否还有其他步骤也会导致类似错误呢

作者: updavy   发布时间: 2008-04-02

文件系统发生错误也会这样的。

作者: kangtian   发布时间: 2008-04-02

多了,比方说,你给了错误的内核参数,编写grub时候出点错,都会导致这个问题发生。

作者: 地球发动机   发布时间: 2008-04-02

跟内核配置中硬盘控制器驱动配置的关系很大,建议仔细检查一下,把需要的驱动编译到内核中去。

作者: laowang_buaa   发布时间: 2008-04-03

clfs没有做过,建议好好看看vmlinuz、initrd、system.map这几个文件的分析,另外看一下文件系统在系统启动时的挂载问题(可结合内核分析一下,大致分析一下就可以),这对于问题的理解很有好处。
根据启动时显示的出错信息(VFS: Unable to mount root fs on unknown-block(0,0)
),很显然是VFS没有挂载上根文件系统,而要真正弄懂这个问题,你就要知道vmlinuz、initrd这两个文件的关系。或者可以参考一下我对于这个问题的解决。(标题: Kernel panic…… )

作者: luozhenwu   发布时间: 2008-04-03

引用:
作者: luozhenwu
clfs没有做过,建议好好看看vmlinuz、initrd、system.map这几个文件的分析,另外看一下文件系统在系统启动时的挂载问题(可结合内核分析一下,大致分析一下就可以),这对于问题的理解很有好处。
根据启动时显示的出错信息(VFS: Unable to mount root fs on unknown-block(0,0)
),很显然是VFS没有挂载上根文件系统,而要真正弄懂这个问题,你就要知道vmlinuz、initrd这两个文件的关系。或者可以参考一下我对于这个问题的解决。(标题: Kernel panic…… )
vmlinuz 是内核镜像吧 initrd可以动态的加在一些硬件驱动,主要是为了应对硬件改变?
如果硬件不变只要把所需要的驱动编译进内核就不需要initrd

作者: updavy   发布时间: 2008-04-04

我将我host机器上的 vmlinuz initrd 这个两个文件拷进target系统中
系统可以启动并能正常运行

-----这样就可以排除前面有位兄弟所说的文件系统错误吧

然后我就在target (运行的是host的内核)系统下直接编译内核,又经过了相当长时间的menuconfig
我怕再出现kernel panic 所以内核编译device drvier 下面的 ata/atapi/pfm/rll 分项下面的都尽量编译到内核

结果没有kernel panic的错误了.....
VFS:Mounted root (ext3 filesystem) readonly

作者: updavy   发布时间: 2008-04-04

但是却出现了下面的错误

INIT: version 2.86 booting
Mounting kernel-based file systems: /proc/sys [OK]
Creating /dev intmpfs.... [OK]
Copying static entries.... [OK]
Setting Permissons on /dev/shm..... [OK]
Starting udevd......
udevd[846]: init_udevd_socket: error getting socket: Address family not supported by protocol
udevd[846]: main: error initializing udevd socket: Illegal seek [FAIL]

Performing Coldplugging.... 好长时间后 [OK]
Mounting file systems....
/dev/hdb2:
The superblock could not be read or does not describe a correct ext2 filesystem If the device is valid and it really contains an ext2 filesystem (and not swap or ufs or someting else), then the superblock is corrupt, an you might try running e2fsck with an alternalte superblock:
e2fsck -b 8139 <device>
[FAIL]

作者: updavy   发布时间: 2008-04-04

我觉得
udevd[846]: init_udevd_socket: error getting socket: Address family not supported by protocol
udevd[846]: main: error initializing udevd socket: Illegal seek [FAIL]

这个是主要的,哪位兄弟给解释一下阿

作者: updavy   发布时间: 2008-04-04

请查看mount的用户和组是否已经设置为root,否则该命令无法正确执行,导致错误!

详细说明请参考:http://linuxman.blog.ccidnet.com/blo...id-230397.html

关于Kernel panic 的问题,也可以看看http://linuxman.blog.ccidnet.com/blo...id-226147.html

作者: laowang_buaa   发布时间: 2008-04-04

楼主的问题,似乎是因为 硬盘控制器 没编入进内核。当然,如果你用 initrd的话,那就是没驱动起来。在 libata 部分的,你配置内核的时候用 / 搜索就可以搜搜到叻

作者: 晨想   发布时间: 2008-04-04

引用:
作者: updavy
但是却出现了下面的错误

INIT: version 2.86 booting
Mounting kernel-based file systems: /proc/sys [OK]
Creating /dev intmpfs.... [OK]
Copying static entries.... [OK]
Setting Permissons on /dev/shm..... [OK]
Starting udevd......
udevd[846]: init_udevd_socket: error getting socket: Address family not supported by protocol
udevd[846]: main: error initializing udevd socket: Illegal seek [FAIL]

Performing Coldplugging.... 好长时间后 [OK]
Mounting file systems....
/dev/hdb2:
The superblock could not be read or does not describe a correct ext2 filesystem If the device is valid and it really contains an ext2 filesystem (and not swap or ufs or someting else), then the superblock is corrupt, an you might try running e2fsck with an alternalte superblock:
e2fsck -b 8139 <device>
[FAIL]

第一个,似乎是你没加入 socket支持。
第二个,也许是你不是用 ext2/3 的,但是你的 fstab没写好。

作者: 晨想   发布时间: 2008-04-04

引用:
作者: updavy
我将我host机器上的 vmlinuz initrd 这个两个文件拷进target系统中
系统可以启动并能正常运行

-----这样就可以排除前面有位兄弟所说的文件系统错误吧

然后我就在target (运行的是host的内核)系统下直接编译内核,又经过了相当长时间的menuconfig
我怕再出现kernel panic 所以内核编译device drvier 下面的 ata/atapi/pfm/rll 分项下面的都尽量编译到内核

结果没有kernel panic的错误了.....
VFS:Mounted root (ext3 filesystem) readonly
给你个懒人解决方案:
使用原host系统的vmlinuz引导target系统,注意仅仅是vmlinuz,不要initrd.img,不要modules。
如果能正常启动到登录界面,恭喜
代码:
cd your_linux_source_tree_dir/
cp /your_hostsystem_rootdir/boot/config* .config
make oldconfig
然后编译安装内核和模块
如果不能正常启动到登录界面
代码:
cd your_linux_source_tree_dir/
make defconfig
make menuconfig #仅添加你需要的
然后编译安装内核和模块

作者: 1987a   发布时间: 2008-04-04

引用:
作者: updavy
我觉得
udevd[846]: init_udevd_socket: error getting socket: Address family not supported by protocol
udevd[846]: main: error initializing udevd socket: Illegal seek [FAIL]

这个是主要的,哪位兄弟给解释一下阿
如果你是做clfs后第一次boot,有可能是udev交叉编译不正确。用target系统重新编译安装,看看是否还是这样。

作者: 1987a   发布时间: 2008-04-04

引用:
作者: laowang_buaa
请查看mount的用户和组是否已经设置为root,否则该命令无法正确执行,导致错误!

详细说明请参考:http://linuxman.blog.ccidnet.com/blo...id-230397.html

关于Kernel panic 的问题,也可以看看http://linuxman.blog.ccidnet.com/blo...id-226147.html
文件用户已经都改成root了
其中mount
-rwsr-xr-x 1 root root 57028 2008-01-11 22:17 mount

请问mount这个s位怎么解释呢? ?不大理解执行程序时使用所有者id 而不是用户id ms并不是普通用户得到了root权限,还是

作者: updavy   发布时间: 2008-04-04

引用:
作者: updavy
文件用户已经都改成root了
其中mount
-rwsr-xr-x 1 root root 57028 2008-01-11 22:17 mount

请问mount这个s位怎么解释呢? ?不大理解执行程序时使用所有者id 而不是用户id ms并不是普通用户得到了root权限,还是
s位是Set-UID位,意思是执行此命令时使用命令文件所有者的ID,而不是启动此命令执行的用户的ID。

作者: laowang_buaa   发布时间: 2008-04-05