Centos5.5 内核2.6.18.194编译升级至2.6.37.3步骤
时间:2011-04-22 来源:小大大小大
1. 首先到www.kernel.org网站上发现最新稳定的内核版本为2.6.37.3,大小为70.2M,下载保存至硬盘。
2. 运行解压命令tar -jxvf linux-2.6.37.3tar.bz2 –C /usr/src,将源代码解压至当前文件夹下,然后将该源码文件夹移动到 /usr/src目录下,待安装使用。
3. 进入/usr/src下的内核源码文件夹,运行make menuconfig,进入内核编译选项配置。
期间提示
[root@localhost linux-2.6.37.3]# make menuconfig
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1
make: *** [menuconfig] 错误 2
这里提示说需要安装ncurses库文件,此时去网上搜索安装该库文件,运行yum install ncurses-devel命令后,自动去服务器上下载安装,成功后,进入配置界面。
4. 配置完成后,利用make modules 和 make modules_install编译和安装内核模块,期间等待很长时间。等模块编译安装完成后,make install 安装内核。
5. 完成后,利用mkinitrd /boot/initrd_2.6.37.3img 2.6.37.3命令生成该版本内核的映像文件。期间出现错误,找不到mkinitrd命令。分析其原因是bash的环境变量没有包含mkinitrd命令的目录。利用命令PATH=$PATH:/sbin/ 修改命令的环境变量,问题解决。
6. 查看系统/boot文件夹下是否生成了相应版本的内核文件。若没有,将编译目录文件夹下/arch/x86/boot/bzImage文件重命名为vmlinuz-2.6.37.3然后移至系统boot文件夹下。
7. 修改grub启动配置grub.conf文件,并修改系统默认的启动为最新版本的内核启动。
8. reboot系统,看是否成功。
期间遇到很多问题,将比较典型的问题总结如下:
其一,在重启系统时,提示错误:
mount: could not find filesystem '/dev/root'
Setting up other filesystems.
Setting up new root fs
setuproot: moving /dev failed: No such file or directory
no fstab.sys, mounting internal defaults
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
Switching to new root and running init.
unmounting old /dev
unmounting old /proc
unmounting old /sys
switchroot: mount failed: No such file or directory
Kernel panic - not syncing: Attempted to kill init!
去网上找相应的原因,其中有两个,第一个是新内核名字空间不兼容问题。解决方法是在make menuconfig配置内核编译选项时,应该在general setup里选择兼容老版本程序的名字空间编译选项(具体名字当时没有记下来)还有一个是,在内核源码包里的配置文件 ./config文件中有个选项是CONFIG_SYSFS_DEPRECATED_V2 将其标志位设置为真。这两项配置修改过以后,重新编译内核文件,问题解决。
其二,在insmod命令加载内核模块时,提示insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits错误。
为了解决这个问题,首先把内核文件复制到用户文件夹下,然后利用命令zcat ../initrd-2.6.37.3.img |cpio -i 解压内核镜像。在解压出的加载配置菜单init中,会发现
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
配置参数前后加载了两次,将其中的一段这个代码删除,然后重新打包内核镜像文件,然后将修改过启动配置的内核镜像覆盖掉/boot下的原镜像,问题解决。(这个问题不知道出现在哪一个步骤,但是很常见,但愿在下一版本的内核编译时会有所修改。)
最后将系统reboot后,新内核成功加载起来。由于我是在virtualbox虚拟机下完成的这一系列步骤(目的是利用增量备份功能来挽回一些错误),在以前内核下安装的virtualbox虚拟机的增强工具VBOXADDITIONS启动失效。重新安装以后问题已经解决。在进入shell后运行 uname –r 来查看版本号如下: