Linux内核升级

199 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

Linux内核

内核概述

组成部分:

  • 进程管理( process management)
  • 定时器(timer)
  • 中断管理(interrupt management)
  • 内存管理( memory management)
  • 模块管理(module management)
  • 虚拟文件系统接口(VFS layer)
  • 文件系统(file system)
  • 设备驱动程序(device driver)
  • 进程间通信(inter-process communication)
  • 网络管理( network management)
  • 系统启动( system init)等

内核种类:

  • 单内核
  • 微内核

在操作系统中,内核独立于应用程序,工作在内核空间。

单内核是个独立的大进程,而微内核被划分为多个独立的进程。每个进程都保持独立并运行在自己的地址空间上。

Linux内核是一个融合了微内核优势的单内核。

内核的开发与更新

Linux内核源码是开放的,任何遵循GPL协议的程序都可以使用内核源码或对内核源码进行修改并发布。

新版本内核发布有两种形式:

  • 完整的内核版本
  • patch文件(补丁)

内核版本

第一个内核版本发布至今,内核版本的命名大约经历了4个阶段:

  • 内核0.01版本到1.0版本,0.12版本开始遵循GPL规范。
  • 1.0版本到2.6版本,内核版本命名格式A.B.C。A是内核主版本号,B是内核次版本号,C是内核修订版本号。这一阶段内核版本出现了第四个数字,表示出现一个需要立即修复的严重错误,但已有的改变不足以发布新版本。
  • 2.6版本之后,7年时间里,内核版本前两个数保持2.6没变,这一阶段是比较稳定的发展阶段。
  • 2011年5月,内核版本提升到了3.0,但继续遵守2.6版本时引入的基于时间发布的规律。

内核的升级

yum在线升级

查看已安装的内核版本

uname -rs

安装第三方仓库ELRepo

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org	#导入该源的秘钥

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm	#启用该源仓库

查看最新内核版本

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available	#查看有哪些内核版本可供安装

image-20220614182349759

安装内核

yum --enablerepo=elrepo-kernel install kernel-lt -y

安装完成后重启系统就可以选择新安装的内核进行启动。

apt在线升级

首先查看当前内核版本:

uname -r

查看内核列表:

apt search linux-image

安装你想要的版本:

apt install linux-image-5.10.0-8-amd64

然后重启查看系统信息,确认原有功能服务正常后清理下无用包:

apt clean
apt --purge autoremove

离线编译升级

获取内核源码

image-20220613150246465

  • mainline:主线版本。
  • stable:稳定版。
  • longterm:长期支持版。

如果想下载其他版本,可以点击HTTP后面的链接,会弹出以下界面:

image-20220613150405551

单击linux/,进入到linux内核下载索引界面:

image-20220613150429206

继续单击kernel/,进入到Linux内核分支界面,这里面有各个分支的内核版本,根据自己需要进入不同分支下载相应版本:

image-20220613150453213

比如选择3.16.41版本,则单击v3.x/进入,选择版本单击下载:

image-20220613150556125

编译与安装(CentOS)

编译安装需要root权限,切换到root用户方便操作

uname -r		# 查看系统内核版本
下载

我们选取最新的稳定版进行下载升级:

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.18.3.tar.xz
解压

下载好的内核源码是压缩包格式,所以先进行解压:

tar -xf linux-5.18.3.tar.xz	# 解压内核源码

解压好后会生成相应的文件夹,内核源码保存在其中的kernel目录下。

内核源码在编译之前需要先对源代码树进行清理,第一次编译使用make mrproper命令清理:

cd linux-5.18.3/	# 进入文件夹
make mrproper		# 删除源码中的中间文件、配置文件和备份文件

注意:

  • make clean是只删除内核源码中的中间文件,不删除配置文件和编译支持的扩展模块
  • make distclean是删除源码中的各种文件、备份和补丁
内核环境配置
# 编译安装前的环境准备
yum install gcc make ncurses-devel openssl-devel flex bison  elfutils-libelf-devel  -y
cp /boot/config-3.10.0-514.e17.x86_64 .config		# 复制本机内核配置文件到新内核目录下
make menuconfig			# 保存配置文件

在保存配置文件时可能会提示错误如下错误:

image-20220614164446035

提示GCC版本过低,升级GCC版本即可:

yum -y install centos-release-scl 
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils 
scl enable devtoolset-8 bash

以上命令顺利执行后会弹出以下界面:

image-20220614164013781

选择Save按钮保存配置,弹出以下界面:

image-20220614164117691

选择Ok弹出以下退出界面,选择Exit按钮退出即可:

image-20220614164141002

选择退出后会返回到最开始的界面,继续选择Exit退出即可。

编译安装

由于内核源码较多,通过-j命令启动多个进程共同编译:

make -j4		# 启动4个进程

编译时间过长,耐心等待,编译完成后,进行模块安装:

make modules_install

模块安装完成后,安装内核:

make install

安装成功之后,重启系统,在开机引导界面就可以看到刚才安装的内核:

image-20220614181438939

至此,内核编译安装完成。最后进入内核源码目录下执行以下命令清除编译过程中产生的中间文件:

make clean		# 清除中间文件