一、概述

Linux kernel内核官网:https://www.kernel.org/

Kernel当前最新的稳定版为linux-3.16.2,而CentOS6.4的内核一直还是2.6.x,内核版本2.6.32系列有一些内核BUG,最终决定升级linux系统内核版本


二、准备

1、环境

操作系统:CentOS6.4 64bit

Kernel版本:linux-3.16.2.tar.xz


2、确认当前系统的内核

[root@kernel ~]# uname -r

2.6.32-358.el6.x86_64


[root@kernel ~]# cat /boot/grub/grub.conf | grep -v "^#"

default=0    #表示默认进入引导的系统,下标从0开始

timeout=5

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS (2.6.32-358.el6.x86_64) #指明了启动时显示的名字

root (hd0,0)  #指明了启动的分区,hd0表示第一块硬盘,0表示第一主分区(下标从0开始)

kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 

#指明了使用的内核文件

rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-358.el6.x86_64.img  #引导时使用镜像文件



三、升级内核

1、安装升级内核所需要的依赖包

[root@kernel ~]# yum -y install xz bc make perl ncurses ncurses-devel

[root@kernel ~]# yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp  libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel Tcl/Tk  cmake  ncurses-devel bison setuptool popt-devel rsynx openssh system-config-network-tui


[root@kernel ~]# xz -d linux-3.16.2.tar.xz 

[root@kernel ~]# tar xf linux-3.16.2.tar 

[root@kernel ~]# cd linux-3.16.2

[root@kernel linux-3.16.2]# make mrproper      #清除环境变量,即清除配置文件(如果是第一次编译可以不用)

[root@kernel linux-3.16.2]# make menuconfig  

#点击<save> ---> ./config <ok> ---> <Exit>

#在菜单模式下选择需要编译的内核模块

#在弹出来的菜单中选择需要编译的模块。默认情况是针对通用需求的,可以去掉那些用不着的模块以精简内核,特别时驱动模块,可以大幅度删减。

完成之后会生成一个.config文件,它保存了你的内核配置。另外,在CentOS的/boot下默认文件,这个就是当前内核的模块配置文件,跟上面生成的文件格式一样,

可以直接拷贝这个文件到内核源代码树中而不许要自己重新配置内核

[root@kernel linux-3.16.2]# cp /boot/config-2.6.32-358.el6.x86_64 ./.config 


2、解压当前稳定的kernel

[root@kernel ~]# xz -d linux-3.16.2.tar.xz 

[root@kernel ~]# tar xf linux-3.16.2.tar 

[root@kernel ~]# cd linux-3.16.2


3、清理系统内的环境变量及依赖

[root@kernel linux-3.16.2]# make mrproper     #清除环境变量、清除配置文件

[root@kernel linux-3.16.2]# make dep  #清除依赖

  HOSTCC  scripts/basic/fixdep

  HOSTCC  scripts/kconfig/conf.o

  SHIPPED scripts/kconfig/zconf.tab.c

  SHIPPED scripts/kconfig/zconf.lex.c

  SHIPPED scripts/kconfig/zconf.hash.c

  HOSTCC  scripts/kconfig/zconf.tab.o

  HOSTLD  scripts/kconfig/conf

scripts/kconfig/conf --silentoldconfig Kconfig

***

*** Configuration file ".config" not found!

***

*** Please run some configurator (e.g. "make oldconfig" or

*** "make menuconfig" or "make xconfig").

***

make[2]: *** [silentoldconfig] 错误 1

make[1]: *** [silentoldconfig] 错误 2

*** Warning: make dep is unnecessary now.


[root@kernel linux-3.16.2]# cp /boot/config-`uname -r` /usr/src/kernels/


四、升级内核

[root@kernel linux-3.16.2]# make menuconfig

[root@kernel linux-3.16.2]# make clean     #确保所有东西均保持最新状态

[root@kernel linux-3.16.2]# make bzImage   #生成内核文件

[root@kernel linux-3.16.2]# make modules   #编译模块(注:此处需要很长时间,请耐心等待)

[root@kernel linux-3.16.2]# make modules_install  #安装模块

[root@kernel linux-3.16.2]# make install    #安装,此处报了一个vmware的错,是虚拟机报错 无关紧要,可以继续

sh ./arch/x86/boot/install.sh 3.16.2 arch/x86/boot/bzImage \

System.map "/boot"

ERROR: modinfo: could not find module vmware_balloon


#如果以上步骤都顺利执行完成,那么恭喜你内核升级已基本完成。




五、修改系统启动菜单并重启服务器,使服务器在下次启动使用新的内核

[root@kernel linux-3.16.2]# cat /boot/grub/grub.conf  |grep -v "^#"

default=0   #原本是1修改成 0

timeout=5

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS (3.16.2)

root (hd0,0)

kernel /vmlinuz-3.16.2 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-3.16.2.img

title CentOS (2.6.32-358.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-358.el6.x86_64.img


[root@kernel linux-3.16.2]# init 0


六、确认内核版本升级成功

[root@Xen ~]# uname -r

3.16.2

[root@Xen ~]# cat /proc/version 

Linux version 3.16.2 (root@kernel) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Mon Sep 15 21:22:16 CST 2014