两篇官方参考
(1)微软:Connect USB Devices
(2)Git:Linux下usbipd安装
一、系统配置需求
1.已成功安装wsl2
2.window版本
win10版本号2004以上
3. WSL版本
wsl2的linux内核版本号5.10.60.1及以上,查看方法:linux命令行界面输入 uname -a
最新内核地址:Windows Subsystem for Linux Updatehttps://www.catalog.update.microsoft.com/Search.aspx?q=wsl,更新内核时要关闭wsl。
二、在Windows下安装usbipd-win
下载安装usbipd-win
三、在Linux下安装USB/IP client工具
sudo apt install linux-tools-virtual hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*/usbip 20
若要在linux下能访问usb设备,尤其是嵌入式开发板,还需要配置udev规则,最直接的方式是安装openocd,然后将share/openocd/contrib/60-openocd.rules文件拷贝到/etc/udev/rules.d文件夹下,并执行:udevadm control --reload。如果出现"Failed to send reload request: No such file or directory"错误,执行sudo service udev restart命令,并重新执行udevadm control --reload。
四、WSL命令实现USB相机映射
在window下安装成功usbipd后,需要将usb相机映射到linux。
1. 首先确保wsl控制台开启,在window下以管理员身份运行控制台,输入如下命令查看usb设备信息
C:\WINDOWS\system32> usbipd wsl list
BUSID VID:PID DEVICE STATE
1-1 05a3:8830 HD USB Camera Not attached
1-7 093a:2510 USB 输入设备 Not attached
1-8 1c4f:0002 USB 输入设备 Not attached
2. 其次在window控制台执行映射
C:\WINDOWS\system32> usbipd wsl attach --busid 1-1
最终结果如下
C:\WINDOWS\system32> usbipd wsl list
BUSID VID:PID DEVICE STATE
1-1 05a3:8830 HD USB Camera Attached - Ubuntu-22.04
1-7 093a:2510 USB 输入设备 Not attached
1-8 1c4f:0002 USB 输入设备 Not attached
3. 最后,在wsl控制台下查看映射结果
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 05a3:8830 ARC International USB 2.0 Camera
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
如上所示,设备004,ID为05a3:8830为映射成功的usb相机
4. 在 WSL 中使用完设备后,可以直接Windows弹出USB 设备或者直接拔掉,即从物理层面断开USB设备连接,也可以在控制台运行命令:
usbipd wsl detach --busid <busid>
注意:设备重连后要重新执行映射操作
至此,wsl下已能连接上usb相机,其他usb存储也可参照此方法连接。但usb相机还无法正常读取,实质在于wsl下没有相机驱动,将在后面的文章中讨论opencv的安装,并读取相机数据时,解决这个问题。
注:下面这条命令可安装camera工具,先记录下来
sudo apt install libcamera-tools
2022.06.17
很遗憾的发现wsl虽然能识别usb相机,但是opencv的capture语句无法识别相机,应该是wsl中没有相机驱动,网上有一些资料,但是有点复杂要重新编译内核,中间有一步出错,后面都接不上。