WSL2 编译安装Linux内核模块

WSL2 编译Linux内核模块

编译内核

简单版本:

cd WSL2-Linux-Kernel
cp Microsoft/config-wsl .config
make -j $(nproc)

详细版本请参考我之前的博客: Windows11 WSL2 Ubuntu编译安装perf工具

安装新的内核镜像

编译完成之后

  1. 拷贝 WSL2-Linux-Kernel/arch/x86_64/boot/bzImage 到Windows系统中 %userprofile%\bzImage.
  2. 编辑WSL2配置文件: %userprofile%\.wslconfig,添加如下内容:
[wsl2]
kernel=C:\\Users\\WIN11_USER\\bzImage

注意上面的WIN11_USER需要替换为你的Windows用户名.

注意必须使用两个反斜杠\\. 两行的结尾不要有任何的空格.

  1. 重启WSL2, 打开PowerShell, 运行:
wsl --shutdown
  1. 重新打开WSL2.

编译自己的内核模块

在WSL2 的$home目录下创建一个新的目录study-kernel.

创建一个Makefile文件:

obj-m += hello_world.o

all:
	make -C ${HOME}/WSL2-Linux-Kernel M=$(shell pwd) modules

clean:
	make -C ${HOME}/WSL2-Linux-Kernel M=$(shell pwd) clean

创建一个hello_world.c文件:

#include<linux/module.h>
#include<linux/kernel.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Arong Xu");
MODULE_DESCRIPTION("A simple hello world module");
MODULE_VERSION("0.01");

static int __init hello_mod_init(void) {
    printk(KERN_ALERT "Hello world from kernel!! \n");
    return 0;
}

static void __exit hello_mod_exit(void) {
    printk(KERN_ALERT "Exiting hello world module from kernel !!!\n");
}

module_init(hello_mod_init);
module_exit(hello_mod_exit);

安装内核模块

  1. 为了观察打印, 首先清空内核日志:
sudo dmesg -C
  1. 安装编译好的内核模块:
sudo insmod hello_world.ko
  1. 观察安装过程打印:
[ 1609.505562] Hello world from kernel!!
  1. 卸载内核模块:
sudo rmmod hello_world
  1. 观察卸载过程打印:
[ 1642.989547] Exiting hello world module from kernel !!!
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值