从Linux kernel 2.4.18直升2.6.15的问题

关于如何编译内核的问题,见我的另一篇记录《Linux 2.6 内核编译行记》。可以看到,在make bzImage和make modules这些步骤中,相继有些deprecated的警告,不过所幸的是都能编译通过。

当mkinitrd时,问题来了。

[root@research boot]# mkinitrd /boot/initrd-2.6.15.4 2.6.15.4
No module BusLogic found for kernel 2.6.15.4

可是BusLogic的驱动明明在/lib/modules/2.6.15.4/kernel/drivers/scsi/中。如果把/etc/modules.conf中的BusLogic模块注解掉,虽然能制作成功initrd,可是启动的时候报错:无法挂在root分区。

大致翻了一下/sbin/mkinitrd的脚本代码,报错的代码大致在:

findmodule() {
...
    fmPath=`(cd /lib/modules/$kernel; echo find . -name $modName.o | /sbin/nash --quiet)`

     if [ ! -f /lib/modules/$kernel/$fmPath ]; then
         if [ -n "$skiperrors" ]; then
             return
         fi

         # ignore the absence of the scsi modules
         for n in $PRESCSIMODS; do
             if [ "$n" = "$modName" ]; then
                 return;
             fi
         done;

         echo "No module $modName found for kernel $kernel" >&2
         exit 1
     fi

脚本找的是.o,可是编译完的是.ko文件。取巧一下,把 -name $modName.o 改称 -name $modName.ko,果然initrd文件顺利生成了。哈,心中窃喜,reboot,可是问题还是来了:

RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
Red Hat nash version 3.4.28 starting
Loading scsi_mod. module
insmod: /lib/scsi_mod..0:
ERROR: /bin/insmod exited abnormally
...

insmod异常退出,什么原因呢?可能是nash、insmod认不出kernel 2.6.x的模块造成的。用原内核启动,然后查查。

$ rpm -qf /sbin/nash
mkinitrd-3.4.28-1
$ rpm -qf /sbin/mkinitrd
mkinitrd-3.4.28-1
$ rpm -qf /sbin/insmod
modutils-2.4.18-2

再查一下内核源码Documentation/Changes说明档,看看版本差异。

$ gcc --version
gcc (GCC) 3.2 20020903 (Red Hat Linux 8.0 3.2-7) #OKay (>= 2.95.3)
...
$ tune2fs
tune2fs 1.27 (8-Mar-2002) ##Failed (>= 1.29)
$ fsck.jfs -V
fsck.jfs version 1.0.17, 02-Apr-2002 ##Failed (>= 1.1.3)
$ reiserfsck -V 2>&1|grep reiserfsprogs
reiserfsprogs 3.6.2 ##Failed (>= 3.6.3)
$ xfs_db -V
-bash: xfs_db: command not found
...
$ quota -V
Quota utilities version 3.06. ##Failed (>= 3.09)
...
$ showmount --version
showmount for nfs-utils 1.0.1 ##Failed (>= 1.0.5)
$ ps --version
procps version 2.0.7 ##Failed (>= 3.2.0)
$ oprofiled --version
-bash: oprofiled: command not found
$ udevinfo -V
-bash: udevinfo: command not found

好了,该升级的就升级,没有的东西就补上吧(除非不想开启该功能)。
以下援引 http://www.cublog.cn/u/10887/showart.php?id=52702 的一篇文章,来说明处理办法:

首先,在编译之前,要做以下几个准备工作:
1、下载module-init-tools-3.1.tar.bz2, 下载地址:http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/
下载完后进行如下操作:

$ tar –zxvf module-init-tools-3.1.tar.bz2
$ ./configure --prefix=/
$ make moveold          
$ make all install          
$ ./generate-modprobe.conf /etc/modprobe.conf

2、下载mkinitrd-4.1.18-2.i386.rpm,下载地址:http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm

3、下载lvm2-2.00.25-1.01.i386.rpm和device-mapper-1.00.19-2.i386.rpm
下载地址:http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm

4、删除旧的软件,方法如下

rpm –e (旧的软件名,这里是软件名,不是软件包,如mkinitrd-4.1.18-2) --nodeps

接下来两步和上面一样,把旧的lvm和device-mapper删掉,
记住,这里要加――nodeps参数,不然是删不掉的[*浏览了很多的资料,发现都是没有提及这一步的,都说使用――nodeps强制安装就可以,可我装的时候却出现了错误,所以大家可以先省略这一步,先做第五步,出了问题再做一下第4步]

5、如果已执行了第四步,直接使用rpm –ivh package-name如果未执行第四步,使用rpm –ivh package-name ――nodeps

6、OK,编译前的准备工作做好了,如果不更新以上几个包在make install时会提示以下错误:
mkinitrd failed
make[1]: *** [install] Error 1
make: *** [install] Error 2

7、现在可以编译了吧!!NO,还得去下内核呢!http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.13.tar.gz

8、把下载的tar包CP到/usr/src目录下,并使用tar –zxvf linux-2.6.13.tar.gz9、cd /usr/src/linux-2.6.13

10、好了,万事俱备!!哦,对了,忘了提醒一点了,请确保你有足够的磁盘空间,具体要求多少空间我不知道,记得大一点的好,有一次编译到最后就提示空间不足

11、OK,接下来就正式开始make了:  #make menuconfig 使用这个命令后会打开一个编译对话框,以后的事就你自己慢慢去发挥吧,我也是新手,对那里面的东西也不是很熟悉,大家可以到网上去找一下关于那方面的资料,但是针对于在vmware5.0中做的朋友来说,以下几点是要特别注意的

A:Device Drivers --->SCSI device support ---><*>
SCSI disk support Device Drivers --->SCSI device support --->SCSI low-level drivers ---> <*>
BusLogic SCSI support,
如果这几项不选,等编译完成后重启后会发现系统会提示:No module BusLogic found for kernel的错误,然后死掉   

B:Device Drivers ---> Fusion MPT device support --->
Fusion MPT (base + ScsiHost) drivers和
Fusion MPT misc device (ioctl) driver(这个要不要,不确定)
注意:只能选模块方式,直接编译进内核,就出错,不知道为什么,这个浪费了我好多时间才找到,编译了几十次的成果。
出错信息如下:No module mptbase found for kernel vmware(*我使用默认方式并没有出现这个提示,这一段是一个网友所述,不知为何!)   

C:Device Drivers ---> USB support ---><*>
USB Mass Storage support Device Drivers ---> Networking support --->Ethernet (10 or 100Mbit) --->
<*> AMD PCnet32 PCI support(*这两段也是从那位网友那CP来的,不知这个USB不设会不会启不来,第二段是设置网卡的,VMWARE是使用AMD PCnet32的)   

D:还有一点切记,把所有的有关ext3(Ext3 journalling file system support, Ext3 Security Labels和JBD (ext3) debugging support等等)的选项都编译到内核里面去,记住,是内核<*>不是模块,否则重启系统后会提示:Mount: error 19 mounting ext3

E:差不多了,还有其它的一些什么自己看看吧,或者上网搜一下,介绍一个不错的网站http://www.chinaunix.net/jh/4/484867.html。

12、make modules_install

13、make install

14、OK,这样就行了,init 6你的系统,会发现在重启后,在引导的时候会有两个不同内核的系统可选,我们当然要选刚编译的系统啦。

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值