centos升级内核

Catalogue
  1. 1. 手动升级
    1. 1.1. 下载并解压
    2. 1.2. 编译配置
    3. 1.3. 安装依赖包
    4. 1.4. 编译
    5. 1.5. 安装内核
    6. 1.6. 安装内核核心文件
  2. 2. 可能遇到的问题
    1. 2.1. gcc版本过低

centos自带的内核一般比较老旧,会导致一些技术无法使用,这时候就需要升级内核了

升级内核的方式一般有两种:

  • 手动编译
  • 使用rmp包自动升级

手动升级

Linux 最新版本的内核可以通过 https://www.kernel.org/ 网站获取

下载并解压

1
2
3
4
5
6
7
[root@centos_vbox ~]# ls /data2
linux-5.14.10 linux-5.14.10.tar
[root@centos_vbox ~]# cd /data2/linux-5.14.10
arch COPYING Documentation include Kbuild lib Makefile modules.builtin.modinfo Module.symvers samples sound usr vmlinux.o
block CREDITS drivers init Kconfig LICENSES mm modules-only.symvers net scripts System.map virt vmlinux.symvers
certs crypto fs ipc kernel MAINTAINERS modules.builtin modules.order README security tools vmlinux

编译配置

将/boot下的配置文件拷贝过来使用,作为编译目标目录下的.config文件。这样对内核没有精简。

cp /boot/config-3.10.0-1160.el7.x86_64 ./.config

从boot目录拷贝原内核的config文件过来主要是为了方便,这个文件保存了在安装系统时内核所安装的模块配置信息(这个是最简单的,否则需要重新手动指定每一个模块的编译配置)。

参考链接:精简Linux内核编译的简单方法

安装依赖包

使用menuconfig,安装开发工具包组

1
yum -y groupinstall "development tools"

安装ncurse-devel包 (make menuconfig 文本界面窗口依赖包)

1
yum -y install ncurses-devel

编译

运行 make menuconfig,开启文本界面的编译选项菜单窗口,可以对内核加载的模块编译选项进行调整,如修改编译后的内核名称、新添加之前系统缺少的模块等。

参考链接:CentOS 7下源码编译安装新版本内核

1
make -j 4  #根据CPU核数开启多线程编译以加快编译速度

安装内核

编译完成后执行 make modules_install 安装内核模块

用此方法安装的内核极大(4G左右)

原因分析:

1
2
3
4
5
默认内核配置配置为支持尽可能多的硬件。 具有默认配置的非剥离内核导致大小为 1897996 kB(包括内核 + 模块)。 当剥离许多不必要的驱动程序和选项时,它的大小为 892892 kB,与库存内核相比,大小减少了 53%。

安装内核模块时,附加 INSTALL_MOD_STRIP=1 选项。 这将去除所有调试符号并将我的大小减少 92%(从 892892 kB 到 69356 kB)。 请注意,这只会影响要安装的模块,而不影响内核 (vmlinuz) 本身。

使用 INSTALL_MOD_STRIP 选项删除调试符号:

想让内核变得更小(200M左右)执行

1
make INSTALL_MOD_STRIP=1 modules_install

安装内核核心文件

1
make install

重启系统 reboot

如需将新版本内核设置为默认启动内核,可以使用此命令

grub2-set-default 0 #0表示 /boot/grub2/grub.cfg 文件中排在第一位的 menuentry 段

可能遇到的问题

gcc版本过低

升级gcc

安装centos-release-scl

1
yum install centos-release-scl

安装devtoolset,注意,如果想安装7.版本的,就改成devtoolset-7-gcc,以此类推

1
yum install devtoolset-7-gcc*

激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本

1
2
3
scl enable devtoolset-7 bash

这条激活命令只对本次会话有效,重启会话后还是会变回原来的4.8.5版本,要想随意切换可按如下操作。

切换到某个版本,只需要执行

1
source /opt/rh/devtoolset-7/enable

查看gcc版本

1
gcc -v

直接替换旧的gcc

旧的gcc是运行的 /usr/bin/gcc,所以将该目录下的gcc/g++替换为刚安装的新版本gcc软连接,免得每次enable

1
2
3
4
5
6
7
8
9
10
11
mv /usr/bin/gcc /usr/bin/gcc-4.8.5

ln -s /opt/rh/devtoolset-7/root/bin/gcc /usr/bin/gcc

mv /usr/bin/g++ /usr/bin/g++-4.8.5

ln -s /opt/rh/devtoolset-7/root/bin/g++ /usr/bin/g++

gcc --version

g++ --version

参考链接:CentOS 7升级gcc版本