升级系统内核前准备工作
查看系统版本
[root@webserver02 ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
查看内核版本
uname -r
2.6.32-504.el6.x86_64
YUM升级方法
一、安装elrepo的yum源
升级内核需要使用elrepo的yum源,在安装yum源之前还需要我们导入elrepo的key,如下:
导入elrepo KEY
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装ELRepo到CentOS (安装elrepo的yum源)
可以去http://elrepo.org/tiki/tiki-index.php选择要安装的ELRepo
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
注:如果导入elrepo的key时报如下错误:
[root@webserver02 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
curl: (35) SSL connect error
error: https://www.elrepo.org/RPM-GPG-KEY-elrepo.org: import read failed(2).
解决方法:
yum -y install nss
正确安装结果
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
Retrieving http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
Preparing… ########################################### [100%]
1:elrepo-release ########################################### [100%]
二、升级内核
在yum的elrepo源中有ml和lt两种内核,其中ml(mainline)为最新版本的内核,lt为长期支持的内核。
如果要安装ml内核,使用如下命令:
yum --enablerepo=elrepo-kernel -y install kernel-ml
如果要安装lt内核,使用如下命令:
yum --enablerepo=elrepo-kernel -y install kernel-lt
内核升级完毕后,不会立即生效,还需要我们修改grub.conf文件。
三、修改grub.conf文件
内核升级完毕后,需要我们修改内核的启动顺序,默认启动的顺序应该为1,升级以后内核是往前面插入为0,如下:
vim /etc/grub.conf
default=0
四、重启系统并查看系统内核
[root@webserver02 ~]# uname -r
4.17.6-1.el6.elrepo.x86_64
源码升级
下载指定源码,安装内核
https://mirrors.edge.kernel.org/pub/linux/kernel/
例:
https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.9.tar.gz
安装前准备工作
yum -y install ncurses-devel
解压到指定路径
tar xf linux-3.9.9.tar.gz -C /usr/src
cd /usr/src/
创建链接
ln -s linux-3.9.9 linux
编译内核功能模块
为防止编译新内核造成遗漏选项,无法启动的后果,我们使用现有正常系统的内核模块文件
cp /boot/config-2.6.32-504.el6.x86_64 /usr/src/linux/.config
在原有基础上可以增删改查
[root@webserver02 linux]# make menuconfig
选好模块后开始安装
make
make modules_install
make install
修改grub.conf文件
内核升级完毕后,需要我们修改内核的启动顺序,默认启动的顺序应该为1,升级以后内核是往前面插入为0,如下:
vim /etc/grub.conf
default=0 (要默认启动的内核版本)
实现部分编译
1 只编译谋子目录下的相关代码
make /usr/src/linux/目录
例:
make /usr/src/linux/arch
注:arch目录下是跟硬件相关的内核核心,不包括模块的内核核心
2 只编译部分模块
make M=/usr/src/linux/drivers/net
注:只编译驱动目录下的网络模块中的内容
3 只编译某一模块
make /usr/src/linux/drivers/net/pcnet32.ko
4 将编译完成的结果防止于别的目录中
make o=/tmp/kernel