wsl2编译升级linux内核

nxdong October 21, 2022 [wsl2, linux] #wsl2

如果想在wsl里使用还未正式发布的内核,可以通过手动编译替换的方式升级内核。

下载WSL2-Linux-Kernel项目的代码

在网站 kernel-release-notes 中查看wsl内核的发布日志,查找想要升级的版本号。

项目git地址: https://github.com/microsoft/WSL2-Linux-Kernel

可以通过git clone的方式下载代码。也可以在右侧的Release里下载指定版本的代码。

这里假设已经将代码clone到指定目录,或者下载解压到指定目录。并且已经cd进项目目录。

根据项目的文档安装编译环境,进行编译:

#Install the build dependencies:
$ sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev
#Build the kernel using the WSL2 kernel configuration:
$ make KCONFIG_CONFIG=Microsoft/config-wsl -j

这里可能有交互式的问题,需要按需选择。

编译成功后,会出现Kernel: arch/x86/boot/bzImage is ready (#1) 的日志。

内核已经编译成功,编译完成的内核文件为 bzImage

将这个文件复制到主机上。

提前在主机上创建一个E:\wsl2linuxkernel 文件夹,在wsl的linux中执行cp arch/x86/boot/bzImage /mnt/e/wsl2linuxkernel 命令,将编译好的内核复制到主机上。

这里的文件夹名字不一定叫这个,但是要前后一致。

修改wsl的配置

在windows的用户目录(在文件管理器的地址栏输入%UserProfile%后按回车)下,创建一个.wslconfig 文件。

并将这个文件的内容修改为:

[wsl2]
kernel=e:\\wsl2linuxkernel\\bzImage

这里kernel的值即为新的内核的路径。

重启wsl系统

这里可以直接重启计算机。
也可以通过命令重启,使用管理员权限打开命令行,运行:

#停止LxssManager服务
net stop LxssManager  
 
#启动LxssManager服务
net start LxssManager 

验证内核版本

重新启动之后,可以在linux子系统中通过命令查看内核版本:

uname -a
Linux win10-home 5.15.68.1-microsoft-standard-WSL2 #1 SMP Thu Oct 20 23:48:19 CST 2022 x86_64 x86_64 x86_64 GNU/Linux

可以发现,现在的内核版本已经是我们新编译的版本啦。

此时可以通过cat /proc/kallsyms 查看新内核的系统调用啦。

参考

build-your-kernel-for-wsl2

kernel-release-notes

WSL2-Linux-Kernel Repo

Windows下重启Linux子系统(WSL)