本文最后更新于 2025年3月5日 晚上
源码下载
在microsoft/WSL2-Linux-Kernel:
The source for the Linux kernel used in Windows Subsystem for Linux 2
(WSL2)下载源码
选择你需要的内核版本
源码编译
编译工具安装
1 2
| sudo apt update sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc pkg-config
|
1 2 3
| cp Microsoft/config-wsl .config make -j$(nproc) make modules -j$(nproc)
|
源码安装
1 2
| sudo make modules_install -j$(nproc) sudo make install -j$(nproc)
|
检查目录\lib\modules\$(uname -r)\build
是否存在
若该目录存在,则代表该内核的安装完毕
切换内核
进入源码
复制arch/x86_64/boot/bzImage
放入windows目录下
例子 1
| cp arch/x86_64/boot/bzImage /mnt/d/bzImage
|
在用户目录下的.wslconig文件中输入(若没有则可以自己创建)
1 2
| [wsl2] kernel=D:\\bzImage
|
重启wsl
在windows命令行中输入wsl --shutdown
关机再次打开wsl
使用uname -r
查看新内核
模块编译
这里给出测试案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h>
static int __init hello_init(void){ printk(KERN_ALERT"hello,world\n");
return 0; } static void __exit hello_exit(void){ printk(KERN_ALERT"goodbye\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); ~
|
1 2 3 4 5 6 7 8
| obj-m :=hello.o hello-objs :=myhello.o KDIR :=/lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: make -C $(KDIR) M=$(PWD) modules clean: make -C $(KDIR) M=$(PWD) clean
|
装载模块与卸载模块
1 2
| sudo insmod hello.ko sudo rmmod hello
|
查看输出
结果如下: 
至此就可以愉快地在wsl下完成操作系统实践的作业啦进行内核模块编写啦