关于如何编译内核的问题,见我的另一篇记录《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 好了,该升级的就升级,没有的东西就补上吧(除非不想开启该功能)。 首先,在编译之前,要做以下几个准备工作: $ 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 4、删除旧的软件,方法如下 rpm –e (旧的软件名,这里是软件名,不是软件包,如mkinitrd-4.1.18-2) --nodeps 接下来两步和上面一样,把旧的lvm和device-mapper删掉, 5、如果已执行了第四步,直接使用rpm –ivh package-name如果未执行第四步,使用rpm –ivh package-name ――nodeps 6、OK,编译前的准备工作做好了,如果不更新以上几个包在make install时会提示以下错误: 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 ---><*> B:Device Drivers ---> Fusion MPT device support ---> C:Device Drivers ---> USB support ---><*> 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你的系统,会发现在重启后,在引导的时候会有两个不同内核的系统可选,我们当然要选刚编译的系统啦。 |
从Linux kernel 2.4.18直升2.6.15的问题
最新推荐文章于 2024-10-12 15:42:39 发布