免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9257 | 回复: 11
打印 上一主题 下一主题

升级内核>2.6.21时的一篇文档. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-21 10:54 |只看该作者 |倒序浏览
gentoo(2.6.20.4)下使用mkinitrd(4.2.17)


由于遇到了在vmvare中,从2.6.9到2.6.21升级内核时,出现

Red Hat nash version 4.2.1.8 starting
Reading all physical volumes. This may take a while...
No volume groups found
Volume group “VolGroup00” not found
ERROR: /bin/lvm exited abnormally! (pid 302)

错误,scsi卡为
SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI

本以为google后会有结果,未果,只有自己动手了.(在gentoo下做实验)

首先觉得有必要使用新版的mkinitrd.下了一个,生成
文件: mkinitrd-4.2.17.tar.gz
大小: 85KB
下载: 下载


编译后安装.(此为我修改后的版本)

可以做实验了.
1.cp /usr/src/linux/arch/i386/bzImage  /boot/boot.img
2. cd /boot
3. mkinitrid -v --preload mptspi --preload dm-mod -f initrd-2.6.20.4 2.6.20.4
输出检查了一下没有问题.
4. vi grub/grub.conf
加入
title=Gentoo Linux (2.6.20.4)
root (hd0,0)
kernel /boot.img root=/dev/sda3 console=ttyS0,57600 console=tty0
(console=ttyS0,57600是从此虚拟机有一个串口,串口的输出为一个文件,这样可以更详细看到内核启动的问题)
initrd /initrd-2.6.20.4
5.用此项重启.失败
pivot root: pivot_root (/sysroot, /sysroot/initrd) failed:2
说我的/下没有initrd这个目录,看了一下redhat的,是空目录.
6.用正常项启动.
mkdir -p /initrd
7.用实验项重启.
ok,一切正常.

8.好了,比对一下2.6.9与2.6.20.4加载的有关scsi的模块.

2.6.20.4 (加载模块是有顺序的)
insmod /lib/mptbase.ko
insmod /lib/mptscsih.ko
insmod /lib/scsi_transport_spi.ko (此模块要在mptspi前加载,mkinitrd-4.2.1.8默认使用/etc/modprobe.conf文件,/etc/fstab,对于LABEL=的支持不好.)
insmod /lib/mptspi.ko
insmod /lib/dm-mod.ko

其它的不重要了.

9.结论,关于有使用scsi卡并要升级内核或自行编译内核,对于可能出现的kernel panic的解决方法就是.
1)要问是不是没有相关scsi设备驱动模块加载.
2)有相关驱动加载,新内核是不是有新的特性,需要其它模块支持如(scsi_transport_spi.ko)
3)用比较新的mkinitrd生成initrd文件来测试,确定模块依赖关系正确.确定设备能被正常识别.确定加载过程正常.(mkinitrd-5.1.19-1.i386.rpm)
4)在gentoo中使用,不要忘了建/initrd这个空目录.

此文是在翻阅大量相关文档分析mkinitrd和initrd文件后,得出的结论.相关分析命令.
1)老版的initramfs,用以下方法
mv initrd-2.6.20.4 initrd-2.6.20.4.gz
gunzip initrd-2.6.20.4.gz
losetup /dev/loop0 initrd-2.6.20.4
mount /dev/loop0 /mnt/temp

2)使用cpio生成的initrd-2.6.20.4
zcat initrd-2.6.20.4 | cpio -i
zcat initrd-2.6.20.4 | cpio -t | sort

对于新的内核使用的是cpio -H newc -o 方式生成的initrd,而非cpio -c -o要注意,否则无法正常使用.

附:在vmware中如何将ide虚拟盘当做scsi盘使用.
1.新生成一个scsi盘.
2.修改*.vmx文件.
scsi0.present = "TRUE"
scsi0.virtualDev = "lsilogic" (此处定义使用什么scsi设备)
scsi0:0.present = "TRUE"
scsi0:0.fileName = "1.vmdk" (1.vmdk原先定义的是ide,为有内容的盘,在这里被加给scsi0使用)

内核2.6.21使用Fusion MPT 3.04.04有问题,使用3.04.03,如下(至少LSI53C1030可以正常加载)
文件: fusion.tar.gz
大小: 223KB
下载: 下载


另一解决方法.
Edit /usr/src/linux/drivers/message/fusion/mptbase.c to match the following

--- drivers/message/fusion/mptbase.orig.c 2007-07-20 18:47:21.000000000 +0000
+++ drivers/message/fusion/mptbase.c 2007-07-20 11:23:32.000000000 +0000
@@ -2564,6 +2564,10 @@
pfacts->IOCStatus = le16_to_cpu(pfacts->IOCStatus);
pfacts->IOCLogInfo = le32_to_cpu(pfacts->IOCLogInfo);
pfacts->MaxDevices = le16_to_cpu(pfacts->MaxDevices);
+ /* Fix VMware bug */
+ if(pfacts->MaxDevices == 0) {
+ pfacts->MaxDevices = 16;
+ }
pfacts->PortSCSIID = le16_to_cpu(pfacts->PortSCSIID);
pfacts->ProtocolFlags = le16_to_cpu(pfacts->ProtocolFlags);
pfacts->MaxPostedCmdBuffers = le16_to_cpu(pfacts->MaxPostedCmdBuffers);

是VMware的模拟lsi的一个bug.

论坛徽章:
0
2 [报告]
发表于 2007-08-21 11:26 |只看该作者
第一种方法是替换/usr/src/linux-2.6.20/drivers/message/fusion
从原来的3.04.04为3.04.03
这个我试过了啊,启动时还是提示如下错误
Red Hat nash version 5.1.9 starting
Unable to access resume device (LABEL=SWAP-sda5)
mount : could not find filesystem '/dev/root'
setuproot : moving /dev failed : No such file or directory
setuproot : error mounting /proc : No such file or directory
setuproot : error mounting /sys : No such file or directory
switchroot : mount failed : No such file or directory
Kernel panic - not syncing : Attempted to kill init!

第二种方法打个补丁Fix VMware bug
我的不是VMware,是不是也要打这个补丁啊

论坛徽章:
0
3 [报告]
发表于 2007-08-21 11:36 |只看该作者

回复 #2 dzb_01 的帖子

请看initrd分析部分,看一下老的initrd加载的module与新的有什么不同.另外非vmare的话不用替换fusion.你的现象可能是相关的磁盘驱动没有加载.就是initrd生成的不对或是编译内核是没有编译相关驱动.

[ 本帖最后由 wysilly 于 2007-8-21 11:38 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-08-21 21:45 |只看该作者
楼主,能做个视频看看吗,我们这些都不行,我们看看吧,谢谢了,这里面都是这样的问题

论坛徽章:
0
5 [报告]
发表于 2007-08-31 15:10 |只看该作者
也说说ubuntu的内核换法

论坛徽章:
0
6 [报告]
发表于 2007-09-10 10:53 |只看该作者
原帖由 zhy1899 于 2007-8-21 21:45 发表
楼主,能做个视频看看吗,我们这些都不行,我们看看吧,谢谢了,这里面都是这样的问题



是啊

论坛徽章:
0
7 [报告]
发表于 2007-09-10 16:41 |只看该作者
晕。。。我就是在VM中升级到2.6.22.6时遇到这个问题。。。弄了很久。。。总算按改源代码的方法解决了。。。谢谢楼主。

论坛徽章:
0
8 [报告]
发表于 2007-09-10 16:45 |只看该作者
另外我不需要加载哪个SCSI_transport_sci模块。。。

论坛徽章:
0
9 [报告]
发表于 2007-09-10 22:49 |只看该作者
借此问一下,我在另一个虚拟机上升级内核,是进去了,但是网卡不能启动。
提示:eth0的mac地址与预期不符,忽略。
而在Net设置里去probe它的mac地址时,提示设备不存在。。。
但是在Hardware Browser里看得到网卡,而且内核编译之前AMD PCnet32 PCI support也是选中的。。。
请问是什么问题?

另外能不能把我另一个正常编译好的虚拟机的内核.config导出来?

论坛徽章:
0
10 [报告]
发表于 2007-09-11 16:20 |只看该作者
是卷不兼容吗?不做卷试试呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP