WSL2更新自定义Linux内核
WSL内核
Windows 11 的 WSL2 的很多特性,带来了比传统虚拟机与主机更佳的集成。对于开发者而言,几乎免去了裸机装Linux的步骤。
微软为了权衡稳定性,并不以一个激进的方式推送内核。根据微软官方 WSL2 内核的 Git 仓库 显示,当前其 Linux 内核现在还停留在5.15.146.1
版本,但是 Linux 内核的长期稳定支持版本已经是6.6.20
了。
虽然官方Git 仓库给了一个6.1.y
的分支,但是并未提供编译好的内核文件。
由于wsl内核是在Linux内核的基础上进行了修改的,所以无法使用直接编译的原始内核进行替换,而应该使用微软官方提供的编译配置文件进行内核编译。
所以说,如果想在 WSL2 里使用新版本的 Linux 内核,只能通过手动编译并替换的方式来升级内核。
注意:升级到新的内核可以体验系统改进,但也可能会遇到新的不稳定因素,请谨慎操作!
编译 WSL2 内核
编译环境搭建
需要一个Linux系统环境,推荐使用 Ubuntu 。
WSL2下的Ubuntu也可以,Docker下的镜像同样可以。需要安装编译内核所依赖的一些包:
1
sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc
编译Linux内核
可以在 The Linux Kernel Archives 下载Linux的内核源代码。
这里我们下载最新的长期支持版本6.6.20。
进入Ubuntu系统,下载内核源代码:
1
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.20.tar.xz
解压:
1
tar xf linux-6.6.20.tar.xz
进入解压后的源码目录:
1
cd linux-6.6.20
下载微软提供的编译配置文件,并放在指定目录下:
1
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
使用多线程加速编译内核:
1
make KCONFIG_CONFIG=arch/x86/configs/config-wsl -j$(nproc)
编译开始会出现很多新的内核特性的选择和配置,需要进行手动输入选择,建议全部默认按回车。
编译成功,最后会输出:
1
Kernel: arch/x86/boot/bzImage is ready (#1)
编译好的内核文件在当前源码目录下:
1
arch/x86/boot/bzImage
需要将内核映像复制到 Windows 下的某个已有的文件夹下,具体位置自己决定:
1
cp arch/x86/boot/bzImage /mnt/C/WSLKernel
关闭 WSL2 虚拟机,需要以管理员身份打开 PowerShell 或 cmd 然后执行:
1
wsl --shutdown
编辑
C:\Users\此处是你的电脑用户名\.wslconfig
文件。如果文件不存在就新创建一个txt文件然后改名为.wslconfig
。 在文件中添加下面的内容:1
2[wsl2]
kernel=C:\\WSLKernel\\bzImage此时打开WSL2的Linux系统应该就可以看到新的内核替换成功了:
1
uname -a