参照:http://300second.blog.51cto.com/7582/816758
下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.35/linux-2.6.35.13.tar.bz2
将下载的内核文件放置/usr/src/kernel目录下,并解压缩:
tar jxvf linux-2.6.35.13.tar.bz2
开始编译内核
#make mrproper #删除之前编译所生成的文件和配置文件,备份文件等
出现错误提示,不能继续,不知道上面的大侠是咋过去的,不过错误提示中让我先运行大侠的第二步,即先运行 make menuconfig,不知道是不是因为是我第一次编译的原因,所以不需要运行此命令?
#make menuconfig #在以菜单模式进入内核配置界面
还有另外两种选择
接着执行make all,
#make all
执行结果如下:
WARNING: modpost: Found 2 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
产生了两个不匹配的警告,不知是否能忽略???
按照提示:运行make CONFIG_DEBUG_SECTION_MISMATCH=y
#make CONFIG_DEBUT_SECTION_MISMATCH=y
然后接着执行make modules命令
#make modules #编译内核模块
能够顺利运行,然后再运行make modules_install命令
#make modules_install #安装内核模块
也能够顺利运行,
安装成功后 /lib/modules目录会有一个2.6.35.13的子目录,里面放的是新内核可加载的所有模块,接着执行make install进行编译安装
#make install #编译安装
顺利通过,不过据作者说,仅修改这些的话,重启加载新内核会报错,原因是在加载逻辑卷,因此在执行完“make all”之后“linux-2.6.35.13”文件夹下会生成配置文件“.config”, 要先编辑此文件:
改“#CONFIG_SYSFS_DEPRECATED_V2 is not set”为“CONFIG_SYSFS_DEPRECATED_V2=y”
或者直接用下面sed命令更改:
[root@server linux-2.6.35.13]# sed -i 's/# CONFIG_SYSFS_DEPRECATED_V2 is not set/CONFIG_SYSFS_DEPRECATED_V2=y/' .config
修改完此配置文件后再次“make all”以及完成后续步骤。
不过我这里先跳过,不过后来确实变化启动内核 后重启确实出现这个错误。
4)解压initrd文件
[root@server linux-2.6.35.13]# cp /boot/initrd-2.6.35.13.img /tmp
[root@server linux-2.6.35.13]# cd /tmp/
[root@server tmp]# mkdir newinitrd
[root@server tmp]# cd newinitrd/
[root@server newinitrd]# zcat ../initrd-2.6.35.13.img | cpio -i
[root@server newinitrd]# vi init
# 删掉重复的两行其中一行
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
5)重新打包initrd文件
[root@server newinitrd]# find .|cpio -c -o > ../initrd
11286 blocks
[root@server newinitrd]# cd ../
[root@server tmp]# gzip -9 < initrd > initrd-2.6.35.13.img
[root@server tmp]# rm -rf /boot/initrd-2.6.35.13.img
[root@server tmp]# cp initrd-2.6.35.13.img /boot
6)修改默认以新的内核启动
[root@server tmp]# less /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hdd3
# initrd /initrd-version.img
#boot=/dev/hdd
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.35.13)
root (hd0,0)
kernel /vmlinuz-2.6.35.13 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.35.13.img
title CentOS (2.6.18-194.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.18-194.el5.img
[root@server tmp]# vi /boot/grub/grub.conf
把default=1改为default=0,然后重新启动系统
[root@server tmp]# reboot
7)重启后验证内核版本
uname -r
成功显示,如果以后不出错的话,就表明成功升级,哈哈
make xconfig 是在图形界面模式进入内核配置界面
make gconfig 在图形界面模式进入内核配置界面