在編譯驅動的時候,需要內核頭文件和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