解决wsl linux kernel drivers:disagrees about version of symbol module_layout

1、执行wsl -l -v,查看当前是否已经从wsl1切换到wsl2,若没有则要切换到wsl2:

 2、执行wsl -v,查看当前wsl绑定的内核版本为5.15.90.1:

3、执行cat /proc/version,查看当前完整的内核版本为5.15.90.1-microsoft-standard-WSL2,gcc版本为x86_64-msft-linux-gcc (GCC) 9.3.0

4、在Ubuntu环境下执行相关命令(保证内核版本和gcc版本均与WSL2中的全部匹配):

(1)下载匹配的WSL Linux Kernel版本5.15.90.1

git clone --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel --branch linux-msft-wsl-5.15.90.1

(2)cd WSL2-Linux-Kernel

(3)从.config文件中核对一下即将编译所使用的gcc版本,这里需要注意的是:若使用在ubuntu下通过sudo apt-get install gcc安装的gcc版本进行编译,则可能会出错。所以此处需要选择WSL Linux Kernel中携带的gcc版本进行编译:

vi .config

删除配置(×):CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0"

修改配置为(√):CONFIG_CC_VERSION_TEXT="x86_64-msft-linux-gcc (GCC) 9.3.0"

(4)LOCALVERSION= make -j8

编译OK后,编译的内核存放在:arch/x86/boot/bzImage

cp arch/x86/boot/bzImage /mnt/c/HP/

将拷贝到C:\Users\HP目录下的bzImage重命名为kernel后,拷贝到C:\Windows\System32\lxss\tools下进行kernel的覆盖替换;

(5)sudo make modules_install -j 8

/lib/modules/5.15.90.1-microsoft-standard-WSL2

(6)uname -r

5.15.90.1-microsoft-standard-WSL2

 

5、编译hello驱动举例:

(1)在WSL2-Linux-Kernel/drivers下建立hello目录,在hello目录下建立hello.c文件:

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

static int __init hello_init(void)
{
    printk(KERN_ALERT "welcome, hello\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_ALERT "bye, hello\n");
}

MODULE_LICENSE("GPL");

module_init(hello_init);
module_exit(hello_exit);
 

(2)在WSL2-Linux-Kernel/drivers/hello下建立Makefile文件:

obj-m := hello.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
    $(MAKE) -C $(KERNEL_PATH) M=$(PWD) clean

(3)在WSL2-Linux-Kernel/drivers/hello下执行make;

(4)在WSL2-Linux-Kernel/drivers/hello下执行加载驱动:

        sudo insmod ./hello.ko

       dmesg|tail

(5)在WSL2-Linux-Kernel/drivers/hello下执行卸载驱动:

       sudo rmmod hello

       dmesg|tail

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值