wsl2为了驱动开发编译内核
试了各种错之后结果发现还是得用自己编译的才行,单纯的头文件还是会出现各种错误。
基本参考了How to use the Microsoft Linux kernel v6 on WSL2 | Microsoft Learn这篇文章的内容。可以选择不用v6只用官方github上默认的。具体步骤也是一样的。
1. 构建
-
打开wsl终端运行发行版如ubuntu
-
选择github上的Microsoft Linux kernel库
git clone https://github.com/microsoft/WSL2-Linux-Kernel.git --depth=1 -b linux-msft-wsl-6.1.y
-
安装需要的包
sudo apt update && sudo apt install build-essential flex bison libssl-dev libelf-dev bc python3 pahole
-
到内核源码目录下
cd WSL2-Linux-Kernel
-
构建内核
make -j$(nproc) KCONFIG_CONFIG=Microsoft/config-wsl
-
安装模块和头文件
sudo make modules_install headers_install
-
拷贝内核镜像到windows文件系统
cp arch/x86/boot/bzImage /mnt/c/
这里直接放到了C盘根目录了,其实可以放到任意你喜欢的位置。到时候安装那一步的时候在.wslconfig上别填错就好了
一开始用的是和wsl同一版本的源代码编译的,但是没有进行第7步,自己动手写的简单驱动能编译通过但是不能加载出现BTF:-22的错误。
如果在用github上release的包的时候出现了类似
CONFIG_X86_X32
的错误,需要将对应选项的=y
改为=n
2. 安装
-
编辑
%USERPROFILE%\.wslconfig
添加下面的内容:[wsl2] kernel=C:\\bzImage
地址记得根据之前自定义的位置进行相应修改
-
关闭wsl
wsl --shutdown
3. 使用
再次打开wsl然后查看内核版本
uname -r