编译wsl内核

Posted by 婷 on December 23, 2023 本文总阅读量

简介

编译wsl的内核,支持usbstorage相关驱动。

预备工作

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool bc dwarves

image-20231212003832113

下载代码

下载wsl代码,对准自己的版本,通过uname -r查看

https://github.com/microsoft/WSL2-Linux-Kernel

image-20231212002346895

这里我选择5.15的分支

image-20231212002451870

因为wsl直接clone很慢,所以直接把zip包下载下来,放到wsl里面,输入命令解压

unzip WSL2-Linux-Kernel-linux-msft-wsl-5.15.y.zip

image-20231212003548282

配置内核

make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

image-20231212004002933

勾选CONFIG_USB_STORAGE

image-20231219091715878

勾选CONFIG_USB_MASS_STORAGE

image-20231212004057811

还有其他的SCSI协议支持的选项,这里就不列举了,可以参考以前的文章

为了防止后面编译的时候出现load BTF xxx之类的错误,内核还要把CONFIG_DEBUG_INFO_BTFy改为n

image-20231212005107314

image-20231212005416062

image-20231212005437121

image-20231212005425992

最后保存为Microsoft/config-wsl

image-20231212004154433

再复制过来cp Microsoft/config-wsl .config

image-20231212232957713

编译

输入命令

make -j$(nproc) bzImage KCONFIG_CONFIG=Microsoft/config-wsl

image-20231212004222763

编译成功

image-20231212010220288

最终成果物在arch/x86/boot目录下,也即bzImage文件

image-20231212010248680

wsl,启动

我把编译的bzImage文件放在D:\WSL

image-20231212230837167

然后在 Windows 的用户目录(默认是C:\Users\{username})下创建一个名为.wslconfig的文件,输入下面的内容并保存。注意第二行的路径需要使用两个反斜杠,代替路径中的单个反斜杠。

image-20231212230912778

[wsl2]
kernel=D:\\WSL\\bzImage

我的.wslconfig文件如下

image-20231212231038818

最后在powershell中输入wsl --shutdown关闭wsl,然后再重新启动wsl,此时wsl就已经使用我们自己编译的内核启动了。

image-20231212010812023

启动后通过cat /proc/version可以确认是否用了我们编译的新内核

image-20231212231322076

其他

原本老的内核镜像是放在这个路径的,命名是kernel

C:\Windows\System32\lxss\tools

image-20231212010451445

查看内核是否支持某个CONFIG选项,可以通过如下方式来查看

zcat /proc/config.gz | grep -w CONFIG_USB_STORAGE

image-20231212234234878

参考链接