红联Linux门户
Linux帮助

大菜叶子:26.由编译2.6.32内核引发的问题Welcome to CentOS!(3)

发布时间:2009-12-12 18:17:32来源:红联作者:一米短绳
先总结:

1,决不能依赖书本文章,要自己思考,这样甚至能得到额外的收获。
2,遇到某些问题,当你遇到的时候毫无头绪,但是一步步的走下来,思考/发掘/一层一层的推敲之后,顺藤摸瓜,只要不放弃,哪怕有一点想法都记下来,问题也会成为你的朋友。
像lenka的歌: trouble is a firend …… 一句歌词:So don't be alarmed if he takes you by the arm .
大家加油!
=====================================

=====================================
经过摸索和分析
已经证明造成kernel panic的原因不是出在initrd上面,因为内核源码的make install 也是利用linux发行版本身自带的自动化制作initrd文件的脚本工具。
再者进一步,结合一些已经查阅的资料,有些时候,initrd可以互用,而我也一开始尝试了用成功过2.6.20版kernel利用2.6.18的initrd文件作为辅助引导,成功进入系统,这就说明2.6.18的initrd是没问题的,我给它加了相应的驱动模块进去,尝试引导2.6.32内核,却依然 kernel panic
这又说明,是已编译完成的kernel 的问题。

我到底哪个选项选错了?或者是冲突了?

解开initrd.img : zcat intrd.img | cpio -id =====>这条简练精壮的指令串是从那些资料中某个文章中学来的,不用在一步步gzip/ find ……cpio了,虽然我知道zcat和cpio,但是看到这条指令的时候实在让我感到linux指令的灵活实在强大。有人说“在linux下解决一个问题是一件很有乐趣的事情,因为每个人解决的方式都不相同,linux太灵活了。” 现在想想果然如此!
根据kernelpanic时候在屏幕上最后能记录下的最后一屏信息
又比较了initrd中哪个几十行的nash脚本init的内容。
这是nash脚本init中相应的代码:[code] 3 mount -t proc /proc /proc
4 setquiet
5 echo Mounting proc filesystem
6 echo Mounting sysfs filesystem
7 mount -t sysfs /sys /sys
8 echo Creating /dev
9 mount -o mode=0755 -t tmpfs /dev /dev
[/code][code] 79 resume LABEL=SWAP-sda9
80 echo Creating root device.
81 mkrootdev -t ext3 -o defaults,ro sda8
82 echo Mounting root filesystem.
83 mount /sysroot
84 echo Setting up other filesystems.
85 setuproot
86 echo Switching to new root and running init.
87 switchroot
[/code]这是kernel panic之前的最后一屏幕的错误信息:[code]Unable to access resume device (LABEL=SWAP-sda9)
mount : could not find filesystem '/dev/root'
setup other filesystem
setting up now root fs
set up root :moving /dev faild:No such file or directory
no fstab.sys,mounting inernal defaults
setuproot:error mounting /proc :No such file or directory
setuproot:error mounting /sys:No such file or directory
switching to new root and running init
umounting old /dev
umounting old /proc
umounting old /sys
switchroot : mount faild : No such file or directory
kernel panic:not syncing :attempted to kill init
call trace[/code]从init这个nash脚本中的代码可以确认,问题肯定出现在这个环节上!最后一步就是交接了,switchroot。
这个脚本并不复杂,而且没有任何类似上一步执行成功才能执行下一步的机制,它的一条一条指令串只是简单的依次执行排列,即使上一步不成功也不会耽误下一步的执行,即使上一步的执行结果影响到下一步的执行,下一步也会按照上一步错误的结果继续执行!
那么,switchroot无法执行,根本原因是上面的某个指令无法顺利执行而导致一连串的无法顺利执行。
======
我设计了一个比较,将原带的内核源码配置记录.config 来与 我所配置的相比较,
1,先复制两份32版内核源码包,在其中一个里用centos的18内核配置记录.config覆盖掉32内核源码包中我的.config && 执行了 make olconfig 来自动对比
并全部默认原始.config 。然后make menuconfig 以作对比待用。
2,在我副本32内核源码包中 执行 make menuconfig 来与上面的内容作比较。

进一步分析,能引起initrd那个nash脚本init出错的大选项只有两个,一个是device driver 一个是general setup!!
而我敢肯定我的driver部分决无重大的差错!需要注意的那些驱动选项我都可以打保票稳拿。
那么,百分之九十的原因在于general setup中,

这次是仔仔细细的进行比对的,凡是遇到不一致或者新的选项我都会再一次查阅它的相关HELP文档。
终于让我锁定到一个选项上:
enable deprecated sysfs features which may confuse old userspace tools
我没选,而那个让我用来比对的make menuconfig 中却编译进了核心!而且,在centos自带的源码中用make menuconfig 查看,居然没有这个选项!
猛的看这个选项,当时我只是看到deprecated 和old这两个单词,我也没仔细的翻译,草草就是觉得这个选项是不推荐的比较老的玩意儿。
这次我仔细的看了一遍它的HELP文档,这下傻眼了,原来这个选项是有关内存中的sysfs文件系统的两种不同的机制,文中提到最新的linux发行版几乎已经都用了最新的那个机制!而且文中强调了这个选项的作用非常,新旧系统对于两种sysfs机制并不能完美的兼容----等于就是说新旧对于这个选项非常的不兼容。
而且最后的文档也说的非常明白,假如主机上的linux发行版原装的内核源码编辑配置选项中没选这个选项才能够不把它编译进核心!!
而我的centos原装核心选项中甚至都没有这个选项,当然需要编译进核心了!!
=================================

==================================
这下豁然开朗了,我敢肯定这个是就是kernel panic的根源了!
刚开始学习编译内核的时候,曾看到几乎所有有关这一项的介绍都是用“2008年以后的发行版就不用选这个了” 这句来一带而过,我就深受其害!
的确,这个选项的HELP文档中的确提到了“几乎07/08年之后的主要发行版都采用了新的可拓展sysfs机制而没有选择这个选项“,但是这句话并不是重点,我想它是针对求新的发行版而言,
重要解释应该是文档中的最后一句话:”
Do not say Y, if the original kernel, that came with your distribution, has this option set to N.”
也就是:“ 主机上的linux发行版原装的内核源码编辑配置选项中没选这个选项才能够不把它编译进核心”!

====================================

编译好后,用make install 自动安装了一个,
又用手工安装了一个。----虽然经过证明已经知道了make install 和手工设置的步骤是一样的,区别就在于一个是利用自动化的几个脚本来安装,一个是手工安装。
重启分别切换两个安装方法的所安装的新内核,这下顺利的开机了,再没出现kernelpanic。
当看到
Welcome to CentOS !
那一刹那,激动万分……



=============
以下是这两天的所有思路和分析过程的连接:
菜鸟大菜叶子:23.由编译2.6.32内核引发的问题kernel panic(1)
大菜叶子:26.由编译2.6.32内核引发的问题kernel panic(2)
文章评论

共有 5 条评论

  1. qing_dc 于 2010-01-03 09:12:04发表:

    没编译过

  2. qu898 于 2010-01-02 19:30:02发表:

    跟楼主同样的问题,现在正用楼主的方法编译中

  3. alick 于 2009-12-13 13:04:52发表:

    很强的帖子,顶了

  4. 一米短绳 于 2009-12-13 01:13:07发表:

    第一次实时记录报告~~嘿嘿……
    其实俺特别高兴,下午还特意多吃了一碗饭!

  5. ocsatv 于 2009-12-12 21:59:46发表:

    贺楼主