WSL2编译和安装内核以支持驱动编译
在编译驱动的时候,需要内核头文件和modules
文件。
WSL2
的内核是修改过的,无法使用 ubuntu
上游的内核,因此,我们需要手动编译并安装一个版本。
主要步骤
首先应当更新WSL2
的内核至最新,以保持和github
上的最新代码一致。
# 1. 下载内核代码
git clone --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel
# 2. 编译和安装
# 默认情况下,从git编译出的代码带有+号,可以通过软链接的方式规避,也可以通过环境变量取消
cd WSL2-Linux-Kernel
LOCALVERSION= make KCONFIG_CONFIG=Microsoft/config-wsl -j8
sudo LOCALVERSION= make KCONFIG_CONFIG=Microsoft/config-wsl modules_install -j8
# 3. 安装headers (如果ubuntu内核版本比较新,该步骤不是必须的)
sudo make headers_install ARCH=x86_64 INSTALL_HDR_PATH=/usr
安装完成后,会在/lib/modules/
目录下生成和当前内核版本一致的文件夹:
驱动编译
如下所示:
➜ hello make
make -C /lib/modules/5.10.74.3-microsoft-standard-WSL2/build M=/home/dw/src/drivers/study/hello modules
make[1]: Entering directory '/home/dw/src/kernel/WSL2-Linux-Kernel'
CC [M] /home/dw/src/drivers/study/hello/hello.o
MODPOST /home/dw/src/drivers/study/hello/Module.symvers
CC [M] /home/dw/src/drivers/study/hello/hello.mod.o
LD [M] /home/dw/src/drivers/study/hello/hello.ko
make[1]: Leaving directory '/home/dw/src/kernel/WSL2-Linux-Kernel'
➜ hello sudo insmod ./hello.ko
➜ hello dmesg
[19254.803777] Hello World enter
➜ hello