Ubuntu系统更新Linux内核的方法
前言
查看当前系统版本
1 | uname -a #查看linux 内核版本 |
截止本文档发布,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 | sudo apt-get install update-manager-core |
Kernel内核升级
1. 使用mainline工具升级kernel
通常Ubuntu发布版本自带内核与Linux社区最新版本会同步更新,首先可以通过下面的命令来查看Ubuntu基于社区版本发现的可支持ubuntu系统的内核版本:
1 | 下载安装脚本 |
该种方法可能会出现”error : you need to load kernel”的问题,解决方法是:通过F2或者F12进入系统启动设置,关闭Secure Boot即可。
2. 手动编译更新Kernel (慎用)
手动更新Kernel非常危险,可能导致启动失败、系统部分驱动失效,所以该方法仅仅用于实验或者调试。
1 获取社区最新版本tar源码, 当前最新版本6.7-rc1
1 | wget https://git.kernel.org/torvalds/t/linux-6.7-rc1.tar.gz |
2 安装必须的工具
1 | sudo apt install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison dwarves |
3 内核配置,生成.config文件
完全手工指定内核的配置选项不现实,一般都是找一个.config文件然后以这个文件为基础进行修改。这个起始的配置文件一般3种获取的方法:
- 使用源码里自带的defconfig文件。如果是嵌入式系统,使用已有的defconfig配置是个不错的选择。
- 可以使用Ubuntu系统自己的config文件作为配置的基础, 直接复制问题是,一些新内核新增加的配置需要自己手工配置了。
1 | cd linux-6.7-rc1 |
- 使用localmodconfig 对象获取一个精简的编译配置, Localmodconfig也是使用/boot/config-$(uname -r) ./.config作为基准的。输入命令后,两个kbuild会询问对于新内核增加的那些配置的选择。
1
2
3cd 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 | scripts/config --disable SYSTEM_TRUSTED_KEYS |
6 安装
1 | sudo make modules_install #安装模块 |
7 重启
通常安装完成后会自动更新grub信息,也可以手动查看./boot/grub/grub.cfg文件,确认是否更新刚刚安装的内核版本。最后重启电脑,使用uname -a查看kernel信息是否升级成功。