介绍一个不用编译源码的方式:用 ubuntu-mainline-kernel 脚本升级内核

在这里插入图片描述

工作原理:

安装模式

用户选择 否

用户选择 是

验证失败

验证成功

失败

成功

开始: 执行 ubuntu-mainline-kernel.sh -i

解析命令行参数

连接 kernel.ubuntu.com

获取最新的 Mainline 内核版本列表

检查是否有新版本可用?

结束: 已是最新版本或无操作

提示用户: 发现版本 vX.Y.Z, 是否继续?

确定需要下载的 .deb 包列表

下载内核 .deb 包和 CHECKSUMS 文件

验证 CHECKSUMS 文件和 GPG 签名

错误: 校验失败, 停止安装

使用 dpkg 安装所有 .deb 包

安装是否成功?

错误: 内核安装失败, 检查依赖或冲突

清理临时文件

提示用户: 安装完成, 请重启系统

结束

(1)下载ubuntu-mainline-kernel脚本

wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh

(2)安装脚本。

sudo install ubuntu-mainline-kernel.sh /usr/local/bin/

(3)下载安装 6.16.9 内核:

sudo ubuntu-mainline-kernel.sh -i 6.16.9

安装完成后,内核映像文件(vmlinuz)在 /boot 目录。

/boot/vmlinuz-6.16.9-061609-generic

(4)WSL2 只能加载位于 Windows 文件系统的内核映像文件。所以,创建内核存储目录:C:\Users\<你的用户名>\.wsl-kernels\

然后,在 WSL2 用 cp 命令把 /boo/ 的内核文件复制到刚才创建的 Windows 路径。

sudo cp /boot/vmlinuz-6.16.9-061609-generic /mnt/c/Users/$WINDOWS_USER/.wsl-kernels/bzImage-6.16.9

(5)在Windows的C:\Users\<你的用户名>\创建.wslconfig 的文件。输入如下内容:

[wsl2]
# 指定自定义内核的路径
kernel=C:\\Users\\<你的用户名>\\.wsl-kernels\\bzImage-6.16.9

(6)重启WSL2。然后你会发现出现如下错误:

由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
错误代码: Wsl/Service/CreateInstance/CreateVm/WSAENOTCONN
Press any key to continue...

这是因为 WSL2 的 内核镜像根本没被 Hyper-V 加载,导致 VM 没起来、套接字没连上。

最根本的原因是直接从 ubuntu-mainline-kernel.sh 下载的 vmlinuz 是不带 WSL2 补丁的、而且是 zImage,WSL2 识别不了。

ubuntu-mainline-kernel.sh升级内核只适合Ubuntu机器,不适合 WSL2。

所以,必须编译一个带微软 WSL2 补丁的 bzImage 才可以。还是老老实实编译源代码吧!!

先回退回到官方内核:删除 C:\\Users\\<你的用户名>\\.wslconfig 或注释掉 kernel= 这一行。

重启 WSL2,然后删除下载的 6.16.9 内核镜像。

sudo ubuntu-mainline-kernel.sh -u

要想安装微软官方 WSL2-Linux-Kernel 仓库没有的内核版本,只能手动下载主线 Linux 内核源码,进行配置和编译,然后配置 WSL2 使用编译的内核镜像。

基于

下载主线 Linux 内核源码

配置内核: 用 .config 文件或 make menuconfig

编译内核: 执行 make -jN

编译结果: 生成 vmlinux 或 vmlinuz 内核镜像文件

配置WSL2: 编辑 .wslconfig 文件,指定编译的内核路径

重启WSL2服务 (wsl --shutdown)

完成

WSL2-Linux-Kernel 的 .config

(1)准备编译环境:

sudo apt update
sudo apt install -y build-essential flex bison libssl-dev libelf-dev bc python3 pahole cpio

(2)获取微软 WSL 内核配置:

# 克隆微软的 WSL2 内核仓库,只要最新的配置
git clone --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel.git microsoft-wsl-kernel
# 复制配置到当前目录,重命名为 .config
cp microsoft-wsl-kernel/Microsoft/config-wsl .config

(3)克隆主线 Linux 6.16.9 源码:

# 克隆主线 Linux 内核仓库
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.16.9
cd linux-6.16.9
# 切换到 6.16.9 标签
git checkout v6.16.9
# 把 WSL 配置移动到当前源码目录
mv ../.config .

(4)因为用的是主线内核源码和旧版本的配置,要更新配置去匹配 6.16.9 的新特性。

# 更新配置
make oldconfig
# 按住回车键选择默认值即可。

(5)编译内核。用所有可用的 CPU 核心进行编译加快速度。

make -j$(nproc)

编译成功的内核镜像文件在 arch/x86/boot/bzImage

(6)安装内核镜像:

cp arch/x86/boot/bzImage /mnt/c/Users/<你的用户名>/.wslconfig/wsl-bzImage-6.16.9

(7)配置 WSL2 使用新内核。在 Windows 的C:\Users\<你的用户名>\.wslconfig 的文件输入如下内容:

[wsl2]
# 指定自定义内核的路径
kernel=C:\\Users\\<你的用户名>\\.wsl-kernels\\wsl-bzImage-6.16.9

(8)重启WSL2,验证内核版本:

uname -r

输出:

6.16.9-x86-core

升级完成!!!

贴一下我的环境:

~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.1 LTS
Release:        24.04
Codename:       noble

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐