WSL 2 即使更新到最新预发布版本, Linux Kernel 版本也是6.6.xxx. 一部分软件可能会需要更高的内核版本, 或者是用户想要测试最新的 Linux Kernel 特性. 因此, 网上替换 WSL 2 的 Linux Kernel 的教程才会如此涌现.

Caution

这可能会导致部分 GNU/Linux 发行版不稳定, 软件无法运行等问题. 所以不建议在生产环境中替换 WSL 2 的 Linux Kernel.

Tip

如果您在 WSL 2 中使用 Arch Linux, 建议先阅读这篇教程, 对 Arch WSL 进行基本的配置, 然后再阅读本教程.

1 安装依赖

Debian 系:

sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev

Arch 系:

sudo pacman -S base-devel flex bison pahole openssl libelf bc

2 下载 Linux Kernel 源代码

访问 The Linux Kernel Archive, 等待加载完成后, 可以看到网页中间的 Linux Kernel 源代码存档列表. 在此之前, 我们需要了解 Linux Kernel 的主要开发分支:

根据具体需求下载对应的 Linux Kernel, 然后通过 Windows 资源管理器复制到前面安装好依赖的 GNU/Linux 发行版的用户家目录中.

然后执行以下命令 (将 <File> 替换为您的 Linux Kernel 压缩包文件名, 将 <Dir> 替换为您的 Linux Kernel 压缩包解压后的目录名):

cd ~
tar xf <File>
cd <Dir>

3 编译内核

Note

如果您在中国大陆, 此步骤可能需要使用网络代理.

执行以下命令下载适用于 WSL 2 的 Linux Kernel 构建配置并保存:

wget https://raw.githubusercontent.com/microsoft/WSL2-Linux-Kernel/linux-msft-wsl-6.1.y/arch/x86/configs/config-wsl -O arch/x86/configs/config-wsl

然后执行以下命令来使用全部线程编译内核:

make KCONFIG_CONFIG=arch/x86/configs/config-wsl -j$(nproc)

途中的编译配置选择一路按回车即可.

4 保存并替换

执行以下命令 (将 <PATH> 替换为 C 盘下的文件路径, 例如 Data/WslLinuxKernel):

cp arch/x86/boot/bzImage /mnt/c/<PATH>

然后将文件名改为 kernel.

接着, 在当前 Windows 用户目录下创建文件 .wslconfig (有则不用), 添加 ([wsl2] 无需重复添加; 将 C:\\<PATH>\\kernel 替换为您的 Linux Kernel 文件路径; 把路径分隔符替换为\\):

[wsl2]
kernel=C:\\<PATH>\\kernel 

接着, 在 Windows Terminal 中执行以下命令:

wsl --shutdown

再次启动 WSL 2 中的 GNU/Linux 发行版, 执行:

uname -a

Linux Kernel 已经成功替换, 一切大功告成!

© 转载请注明出处