闲来无事,想把 WSL2 的 kernel 升级一下。GitHub 中微软官方发布的 WSL2 kernel 最新版本为5.10.74.3
,但是 Microsoft Update Catalog 中一直没有相应版本的安装包(截止本文发布)
于是打算自己动手编译一下
编译环境
WSL2 下的 Arch Linux
编译内核
整体编译思路就是利用微软的编译配置文件来编译 Linux kernel,并在相应的 Windows 目录下替换现有的内核
这里放一下 GitHub 中的 WSL2-Linux-Kernel
下载源码
在 GitHub 下载相应版本的 releases
1 | wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.10.74.3.tar.gz |
下载完成后解压缩并进入目录
1 | tar zxvf linux-msft-wsl-5.10.74.3.tar.gz |
为确保内核树绝对干净,进入内核目录并执行make mrproper
命令
1 | make clean && make mrproper |
安装编译工具
微软也在项目里告知了步骤,其中也包括编译工具
这个不能照葫芦画瓢直接复制下来,需要在 ArchWiki 中找一下 Arch Linux 中的包
build-essential
、flex
和bison
都集成在 Arch Linux 的base-devel
里了,其他两个也有相对应的包
1 | sudo pacman -S base-devel openssl libelf pahole xmlto kmod inetutils bc |
关于
pahole
:在多次编译时,最终都会报错
1
2
3 BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF一种方法是在
Microsoft/config-wsl
中对CONFIG_DEBUG_INFO_BTF
设置关闭✨ 另一种方法是下载
pahole
,此方法取自 Stack Overflow,其他发行版遇到此问题也可以看一下
关于其余四个包:
由 ArchWiki 推荐
2022-02-08
更新:
在最新推出的5.10.93.2
版本中,官方修复了关于以上提到的BTF
报错,针对 Ubuntu 给出依赖项dwarves
修改编译配置文件
打开Microsoft/config-wsl
文件,把内核号修改了一下,改成自己的名字
开始编译
1 | make KCONFIG_CONFIG=Microsoft/config-wsl -j |
编译开始时会出现编译选项,全部按照默认就可以了
然后就可以等着编译完成了
可以看到编译完成的内核所在的路径为arch/x86/boot/bzImage
这就是编译好的 WSL2 的内核了
替换内核
WSL2 使用的内核是放在 Windows 目录下的C:\WINDOWS\System32\lxss\tools
只需要把编译好的bzImage
复制到此路径下,并更名为kernel
即可
可以使用文件管理器复制内核
1 | explorer.exe . |
关闭所有 WSL,并将bzImage
复制到C:\WINDOWS\System32\lxss\tools
下并更名为kernel
替换内核前需要将所有 WSL 关闭
启动 Arch Linux,并截图
🌈 可以看到内核已经替换为5.10.74.3
版本了