【记录在WSL2中尝试编写一个简单的驱动遇到的问题】

记录在WSL2中尝试编写一个简单的驱动遇到的问题

-

尝试在WSL2中编写一个简单驱动,但是遇到了很多问题,在此记录。

WSL2的安装

在windows下安装linux ubuntu子系统可以参照一下帖子:

关于使用这个子系统需要知道的事情:
windows访问linux:
文件夹内搜索 \wsl$
linux访问windows:
cd /mnt/c

WSL需要另外安装内核

在WSL下,如果你试图直接编译一个驱动,会出错,原因是WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个版本。解决方法可以参考如下链接:
WSL安装内核

如何写一个简单的驱动

如何在linux下写一个简单的驱动如下:
简单驱动

在加载驱动时遇到一个还没有解决的问题:

wenjuan@LAPTOP-0NP9KHL3:~/learn/dri/test1$ insmod hellomodule.ko
insmod: ERROR: could not insert module hellomodule.ko: Operation not permitted

可以看到上面显示无法正确insert模块。
dmesg一下看看内核报的什么错误:

wenjuan@LAPTOP-0NP9KHL3:~/learn/dri/test1$ dmesg
[32479.309951] hellomodule: disagrees about version of symbol module_layout

可以看到有什么版本不匹配了
但实际上我在makefile中用到的kernel版本和uname-r的实际版本是一致的。经过dump也确实一样,这个问题还没有解决。

wenjuan@LAPTOP-0NP9KHL3:~/learn/dri/test1$ modprobe --dump-modversion /lib/modules/5.15.153.1-microsoft-standard-WSL2/kernel/drivers/block/nbd.ko | grep module_layout
0xd83ae36e      module_layout
wenjuan@LAPTOP-0NP9KHL3:~/learn/dri/test1$ modprobe --dump-modversions hellomodule.ko | grep module_layout
0xd83ae36e      module_layout

看到有个帖子说比较modinfo,尝试了一下还是没有问题:

wenjuan@LAPTOP-0NP9KHL3:~/learn/dri/test1$ modinfo /lib/modules/5.15.153.1-microsoft-standard-WSL2/kernel/drivers/block/nbd.ko
filename:       /lib/modules/5.15.153.1-microsoft-standard-WSL2/kernel/drivers/block/nbd.ko
license:        GPL
description:    Network Block Device
srcversion:     7E843666F1C12A522904EB6
depends:
retpoline:      Y
intree:         Y
name:           nbd
vermagic:       5.15.153.1-microsoft-standard-WSL2 SMP mod_unload modversions
parm:           nbds_max:number of network block devices to initialize (default: 16) (int)
parm:           max_part:number of partitions per device (default: 16) (int)
wenjuan@LAPTOP-0NP9KHL3:~/learn/dri/test1$ modinfo hellomodule.ko
filename:       /home/wenjuan/learn/dri/test1/hellomodule.ko
license:        GPL
srcversion:     4B81F55C06B3C267070B4B0
depends:
retpoline:      Y
name:           hellomodule
vermagic:       5.15.153.1-microsoft-standard-WSL2 SMP mod_unload modversions

尝试用lsmod看了一下,发现是空。查阅之后发现是正常现象。
https://github.com/microsoft/WSL/issues/7231
但同时提醒了我上面用来做比较的 /lib/modules/5.15.153.1-microsoft-standard-WSL2/kernel/drivers/block/nbd.ko,其实是我自己编译出来的,并不是系统自带的

往上面重新倒腾看看哪一步有没有遇到问题我没注意到,发现:

wenjuan@LAPTOP-0NP9KHL3:~/learn/dri/WSL2-Linux-Kernel-linux-msft-wsl-5.15.153.1$ sudo make -j $(nproc) modules_install
arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support

实际上我已经装了binutils了,安装步骤如下

下载安装包:wget http://ftp.gnu.org/gnu/binutils/binutils-2.32.tar.gz
解压安装包:tar -xzvf binutils-2.32.tar.gz
定位到binutils的目录:cd binutils-2.32/
配置安装目录:./configure --prefix=/usr/local/binutils
编译并安装binutils:make && make install
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值