文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>gentoo(2.6.20.4)下使用mkinitrd(4.2.17)

gentoo(2.6.20.4)下使用mkinitrd(4.2.17)

时间:2007-05-09  来源:wysilly

由于遇到了在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

3)gentoo的initramfs
zcat /boot/initramfs-genkernel-x86-2.6.22.6 | (while true; do cpio -t -H newc --no-absolute-filenames || exit; done)

 zcat /boot/initramfs-genkernel-x86-2.6.22.6 | (while true; do cpio -i -H newc --no-absolute-filenames || exit; done)

对于新的内核使用的是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.

   
相关阅读 更多 +
排行榜 更多 +
拉力竞速2

拉力竞速2

体育竞技 下载
文字乱舞水浒

文字乱舞水浒

角色扮演 下载
蓝图公考

蓝图公考

学习教育 下载