前言

查看当前系统版本

1
2
3
4
5
6
7
8
9
10
$uname -a #查看linux 内核版本
Linux testSrv 6.7.0-rc1 #1 SMP PREEMPT_DYNAMIC Wed Nov 15 18:17:35 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

$lsb_release -a #查看ubuntu系统版本
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 23.10
Release: 23.10
Codename: mantic

截止本文档发布,Ubuntu最新LTS版本为22.04,最新发布版为23.10,每个Ubuntu版本都有其对应的内核版本,列表如下:

系统版本 Linux 内核版本
22.04 LTS 5.15
23.10 6.5.0

作为Linux开发的码农,紧跟社区版本,即时了解最新kernel的功能是非常有必要的,通常会有两个需求:

  • Ubuntu系统需要升级到更高的系统;
  • Ubuntu系统已是最新,但是希望把kernel版本升级到最新;

下面我们基于这两个需求总结了一些方法

Ubuntu系统升级

1.源码安装

这是最简单和直接的,通过查看Ubuntu 官网信息下载对应版本的安装包,然后制作启动盘,进行安装,网上参考资料比较多,在此就不做赘述。

2.使用do-release-upgrade命令更新

1
2
sudo apt-get install update-manager-core
sudo do-release-upgrade -m desktop #检查当前是否有desktop新版本,并升级到最新版本

Kernel内核升级

1. 使用mainline工具升级kernel

通常Ubuntu发布版本自带内核与Linux社区最新版本会同步更新,首先可以通过下面的命令来查看Ubuntu基于社区版本发现的可支持ubuntu系统的内核版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 下载安装脚本
wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh

# (可选)将该脚本安装到/usr/local目录下,以后可以在任意终端目录直接使用
sudo install ubuntu-mainline-kernel.sh /usr/local/bin/

# (可选)查看当前可用的内核版本号
sudo ubuntu-mainline-kernel.sh -r
......
v6.1.55 v6.1.56 v6.1.57 v6.1.58 v6.1.59 v6.1.60 v6.1.61 v6.1.62 v6.2.0 v6.2.1 v6.2.2
v6.2.3 v6.2.4 v6.2.5 v6.2.6 v6.2.7 v6.2.8 v6.2.9 v6.2.10 v6.2.11 v6.2.12 v6.2.13
v6.2.14 v6.2.15 v6.2.16 v6.3.0 v6.3.1 v6.3.2 v6.3.3 v6.3.4 v6.3.5 v6.3.6 v6.3.7
v6.3.8 v6.3.9 v6.3.10 v6.3.11 v6.3.12 v6.3.13 v6.4.0 v6.4.1 v6.4.2 v6.4.3 v6.4.4
v6.4.5 v6.4.6 v6.4.7 v6.4.8 v6.4.9 v6.4.10 v6.4.11 v6.4.12 v6.4.13 v6.4.14 v6.4.15
v6.4.16 v6.5.0 v6.5.1 v6.5.2 v6.5.3 v6.5.4 v6.5.5 v6.5.6 v6.5.7

# 安装具体版本的内核
sudo ubuntu-mainline-kernel.sh -i 6.5.7

该种方法可能会出现”error : you need to load kernel”的问题,解决方法是:通过F2或者F12进入系统启动设置,关闭Secure Boot即可。

2. 手动编译更新Kernel (慎用)

手动更新Kernel非常危险,可能导致启动失败、系统部分驱动失效,所以该方法仅仅用于实验或者调试。
1 获取社区最新版本tar源码, 当前最新版本6.7-rc1

1
2
wget https://git.kernel.org/torvalds/t/linux-6.7-rc1.tar.gz
tar -xf linux-6.7-rc1.tar.gz

2 安装必须的工具

1
2
sudo apt install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison dwarves
sudo apt install zstd # kernel 5.13之后支持zstd压缩

3 内核配置,生成.config文件
完全手工指定内核的配置选项不现实,一般都是找一个.config文件然后以这个文件为基础进行修改。这个起始的配置文件一般3种获取的方法:

  • 使用源码里自带的defconfig文件。如果是嵌入式系统,使用已有的defconfig配置是个不错的选择。
  • 可以使用Ubuntu系统自己的config文件作为配置的基础, 直接复制问题是,一些新内核新增加的配置需要自己手工配置了。
1
2
$ cd linux-6.7-rc1
$ cp /boot/config-$(uname -r) ./.config
  • 使用localmodconfig 对象获取一个精简的编译配置, Localmodconfig也是使用/boot/config-$(uname -r) ./.config作为基准的。输入命令后,两个kbuild会询问对于新内核增加的那些配置的选择。
    1
    2
    3
    $ cd linux-6.7-rc1
    $ lsmod > /tmp/lsmod.now
    $ make LSMOD=/tmp/lsmod.now localmodconfig

4 配置menuconfig,通过menuconfig配置其他需要的模块
5 编译

1
$ make -j8 #本地编译,如果电脑配置尚可,采用8线程编译,这样会快一些

编译可能会出错,提示:make[1]: *** No rule to make target ‘debian/canonical-certs.pem’, needed by ‘certs/x509_certificate_list’. Stop.
参考下面的设置可解决该错误,(详细信息参考连接 https://askubuntu.com/questions/1329538/compiling-the-kernel-5-11-11)

1
2
$ scripts/config --disable SYSTEM_TRUSTED_KEYS
$ scripts/config --disable SYSTEM_REVOCATION_KEYS

6 安装

1
2
3
$ sudo make modules_install  #安装模块
$ sudo make install #安装内核

7 重启
通常安装完成后会自动更新grub信息,也可以手动查看./boot/grub/grub.cfg文件,确认是否更新刚刚安装的内核版本。最后重启电脑,使用uname -a查看kernel信息是否升级成功。