ubuntu如何识别windows的USB设备(WSL2)
一、简介
在wsl安装的文章中对比过WSL1和WSL2的区别,其中很重要一条就是WSL1可以直接识别到windows下的串口或USB设备,而WSL2是不行的,需要借助USB/IP工具。如果还没有搭建WSL环境的话,可以参考如下文章:win10下安装WSL_命令行安装wsl-CSDN博客
所以,本篇文章,就来介绍一下要如何操作。
前置条件:
WSL版本:WSL2
Windows版本:win11或者win10 21H2+
二、实操
安装windows端USB/IP工具
打开powerShell,执行如下命令安装usb/ip客户端。
winget install --interactive --exact dorssel.usbipd-win
一般默认安装在C盘
如果winget不可用,可以从usbipd-win官网 https://github.com/dorssel/usbipd-win/releases 下载安装,然后手动安装。
在ubuntu中安装usb/ip服务器工具
启动Ubuntu,执行下列命令安装依赖
sudo apt update
sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*/usbip 20
列出共享USB设备
在powerShell(管理员模式)中列出所有USB设备,找到目标设备的BUSID
usbipd list
看到多了一条BUSID为5-1的设备。
将目标USB设备共享给WSL
使用如下指令,将usb设备共享给WSL。注:共享后,Windows 将无法使用该设备。
usbipd bind --busid <busid>
usbipd attach --wsl --busid <busid>
可以看到,共享后,5-1设备的状态已经变成了Attached。
在Ubuntu中验证设备是否被识别
在Ubuntu中执行如下命令,查看是否识别到USB设备。
lsusb
断开设备与ubuntu的连接
使用完设备,在powershell中使用如下指令断开USB设备与ubuntu的连接。
usbipd detach --busid <busid>
三、FAQ
如果在Ubuntu下lsusb可以看到设备,但是lsblk看不到设备,且powershell下也能看到设备,可以在Ubuntu执行如下操作:
sudo modprobe -r usb_storage # 卸载驱动
sudo modprobe usb_storage # 重新加载驱动sudo partprobe # 刷新所有设备的分区表
lsblk # 再次查看