为了解决某处linux kernel升级失败而采取的快速方法,不需要无数次的编译测试
主要思想为,根据正常启动的intrd文件制作新kernle的intrd文件,来保证系统正常引导
copy升级后的initrd-2.4.20-28.7smp.img文件,解压mount 后和正常启动的 initrd-2.4.18-3.img 文件内容进行比较,发现了问题。
1.查看正常情况下的磁盘驱动情况
grep scsi_mod /proc/modules | tr '[]' " " | cut -c33-
2.对initrd文件做解压成image文件,然后mount后进行对比
RD=/boot/initrd-2.4.18-3smp.img
cp ${RD} ${RD}.Original
gunzip < $RD > /tmp/initrd.img
mkdir /tmp/initrd.mnt
mount -o loop /tmp/initrd.img /tmp/initrd.mnt
同样操作对升级后的initrd文件,mont到另外一个位置,然后对比文件核心驱动模块加载文件linuxrc发现有一下不同
< echo "Loading aic7xxx module"
< insmod /lib/aic7xxx.o
---
> echo "Loading aacraid module"
> insmod /lib/aacraid.o
对7.3 kernel的升级(土法秘制高汤。谨慎使用)分2种情况
1.有raid的机器
A.直接从以前正常的机器copy /boot 下面需要升级的kernel文件,initrd等文件 /lib/modules//lib/modules/2.4.20-28.7
B.修改lilo 或者grub即可
2.没有raid的机器,先按照有raid的机器做好上面A,B 两步然后
A. 解开升级后的initrd驱动文件
RD=/boot/ /boot/initrd-2.4.20-28.7smp.img
cp ${RD} ${RD}.Original
gunzip < $RD > /tmp/initrd.img
mkdir /tmp/initrd.mnt
mount -o loop /tmp/initrd.img /tmp/initrd.mnt
B.修改/tmp/initrd.mnt/linuxrc 文件中的
echo "Loading aacraid module"
insmod /lib/aacraid.o
2行为
echo "Loading aic7xxx module"
insmod /lib/aic7xxx.o
C.copy /lib/modules/2.4.20-28.7smp/kernel/drivers/scsi/aic7xxx/aic7xxx.o 文件到 /tmp/initrd.mnt/lib/
D.对修改好的initrd文件打包,替换/boot下有问题的initrd img文件
Sync
Umount /mnt/initrd.img
Cd /tmp ; Gzip < initrd.img > initrd-2.4.20-28.7smp.img
Cp initrd-2.4.20-28.7smp.img /boot/
至此完成自制的驱动的修改,由于 /lib/modules/<kernel> 下面的驱动文件非常丰富,这样就比较省事的替换了驱动,驱动和kernel版本要严格一直。tKiLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论