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 内核

编译环境搭建

  1. 需要一个Linux系统环境,推荐使用 Ubuntu 。
    WSL2下的Ubuntu也可以,Docker下的镜像同样可以。

  2. 需要安装编译内核所依赖的一些包:

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

编译Linux内核

  1. 可以在 The Linux Kernel Archives 下载Linux的内核源代码。

    这里我们下载最新的长期支持版本6.6.20。

  2. 进入Ubuntu系统,下载内核源代码:

    1
    wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.20.tar.xz
  3. 解压:

    1
    tar xf linux-6.6.20.tar.xz
  4. 进入解压后的源码目录:

    1
    cd linux-6.6.20
  5. 下载微软提供的编译配置文件,并放在指定目录下:

    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
  6. 使用多线程加速编译内核:

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

    编译开始会出现很多新的内核特性的选择和配置,需要进行手动输入选择,建议全部默认按回车。

  7. 编译成功,最后会输出:

    1
    Kernel: arch/x86/boot/bzImage is ready (#1) 
  8. 编译好的内核文件在当前源码目录下:

    1
    arch/x86/boot/bzImage 

    需要将内核映像复制到 Windows 下的某个已有的文件夹下,具体位置自己决定:

    1
    cp arch/x86/boot/bzImage /mnt/C/WSLKernel
  9. 关闭 WSL2 虚拟机,需要以管理员身份打开 PowerShell 或 cmd 然后执行:

    1
    wsl --shutdown
  10. 编辑 C:\Users\此处是你的电脑用户名\.wslconfig 文件。如果文件不存在就新创建一个txt文件然后改名为.wslconfig 。 在文件中添加下面的内容:

    1
    2
    [wsl2]
    kernel=C:\\WSLKernel\\bzImage
  11. 此时打开WSL2的Linux系统应该就可以看到新的内核替换成功了:

    1
    uname -a