分类: LINUX
2009-08-27 10:31:58
在VMware6.0下我经过无数次编译,苦战差不多两个星期,终于把内核编译成功,不过还是在换了一台主机的情况下编译成功的,而且换了linux虚拟机,我原先那台机子老是在启动后不久突然断电,用不了,就换了一台,我也在怀疑我在原先的那台机子上为什么总是在编译成功后却启动不了,我估计是和硬件有关,是不是哪个地方不兼容什么的,而我又对硬件了解得比较少,原先的机子用新内核启动时出现如下信息: Unable to find volume group "VolGroup00" 之后就死掉了.我已经充分考虑了编译配置选项,什么scsi,lvm什么的,都选上了.百度,Google没有一个解决方案,晕. 换了一台主机后终于成功了,要是出现和我上面一样错误的同胞(你们也已经充分考虑了编译配置选项)可以试着换一台机子(有条件的情况下).下面为升级的步骤: 1、查看一下你的内核版本# uname -a 2、下载2.6.18.8内核源码 下载地址: 3、下载内核升级工具 参考网上文章说要下载mkinitrd-4.1.18-2.i386.rpm,lvm2-2.00.25-1.01.i386.rpm 但是我Red Hat AS4中自带的版本都要比这些高,因此就不用下载了。 4、将下载好的内核源码包和一个升级工具都拷贝到/usr/src文件夹下 5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:
# cd linux-2.6.18.8(进入到/usr/src/linux-2.6.18.8目录下) (1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项; Device Drivers --->Character devices -à Serial derivers -à 8250/16650 and Compatiable serial support Device Drivers-->Fusion MPT device support à<*> Fusion MPT ScsiHost drivers for SPI Device Drivers-->Fusion MPT device supportà<*> Fusion MPT ScsiHost drivers for FC Device Drivers-->Fusion MPT device supportà<*> Fusion MPT ScsiHost drivers for SAS Device Drivers-->Fusion MPT device supportà (128) Maximum number of scatter gather entries (16 - 128) Device Drivers-->Fusion MPT device support à<*> Fusion MPT misc device (ioctl) driver Device Drivers-->Fusion MPT device supportà<*> Fusion MPT LAN driver Device Drivers---> File Systems --> Miscellaneous filesystems ---><*> Compressed ROM file system support (cramfs) 注意: 如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选: 在/usr/src/linux-2.6.18.8目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧! # make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过) # make clean (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过) # make bzImage (注意大小写。这一步才是真正编译内核) 内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。 # make modules (编译可加载模块) # make modules_install (安装可加载模块) 安装成功后,系统会在/lib/modules目录下生成一个2.6.18.8子目录,里面存放着新内核的所有可加载模块。 # make install (安装新内核) 9、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令: # cp /usr/src/linux-2.6.18.8/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18.8 # cp /usr/src/linux-2.6.18.8/System.map /boot/System.map-2.6.18.8 # cd /boot (进入boot目录) # rm –rf System.map (删除原来的连接) # ln –s System.map-2.6.18.8 System.map (重新建立连接) 注:这一步(网上看到的)其实在make install的时候就已经建立了,我们没有必要再去输这些命令了。 10、你会发现在你的/boot目录下已经有一个initrd-2.6.18.8.img的文件了,你可以用以下命令来更新它: # new-kernel-pkg --mkinitrd --depmod --install 2.6.18.8 这时/boot/grub/grub.conf已经配置好了,可以不要动它。 11、ok了,你可以用命令reboot重启了,重启之后选择那个2.6.18.8的内核版本就行了。 12、我在启动时又遇到了一个问题: ......(前面的信息省略)Enforcing mode requested but no policy loaded, halting now. Kernel panic - not syncing : Attempted to kill init! 我之前编译2.6.7成功后,启动也遇到了这个问题,我在启动时编辑了这个:kernel /vmlinuz-2.6.18.8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet 修改为:kernel /vmlinuz-2.6.18.8 ro root=/dev/VolGroup00/LogVol00 enforcing=0 rhgb quiet 就是加了enforcing=0就可以启动了. 至此,启动后查看内核版本#uname -r 显示:2.6.18.8 成功了,但是在编译中有好多问题我现在都还没有搞懂,以后再慢慢研究吧。 |