wsl(3) -- USB使用

1. 简介

WSL1中可以直接使用Windows的串口,其对应关系就是COMx对应WSL的/dev/ttySx,例如COM2对应WSL的/dev/ttyS2。WSL2是不支持USB设备的,但可以通过usbipd-win程序将windows上的usb设备映射到wsl2中,参考微软官方文档连接 USB 设备

2. usbipd安装和使用

  1. 前往https://github.com/dorssel/usbipd-win/releases下载usbipd-win.msi程序,我下载的是usbipd-win_4.3.0.msi大概4.55MB。
  2. 双击进行安装,安装后以管理员身份打开命令行终端。
shell 复制代码
# 列出所有外接usb设备
PS C:\Users\xflm> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
3-2    0a12:0001  Generic Bluetooth Radio                                       Not shared
3-4    1ea7:0064  USB 输入设备                                                  Not shared
4-1    1a86:7523  USB-SERIAL CH340 (COM5)                                       Not shared
4-5    1c4f:0002  USB 输入设备                                                  Not shared

Persisted:
GUID                                  DEVICE
# 选择要允许共享的USB设备,该步骤需要管理员权限,此时windows仍可以使用该USB设备
PS C:\Users\xflm> usbipd bind --busid 4-1
# 再次查看即可看到选择的设备已允许共享
PS C:\Users\xflm> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
3-2    0a12:0001  Generic Bluetooth Radio                                       Not shared
3-4    1ea7:0064  USB 输入设备                                                  Not shared
4-1    1a86:7523  USB-SERIAL CH340 (COM5)                                       Shared
4-5    1c4f:0002  USB 输入设备                                                  Not shared

Persisted:
GUID                                  DEVICE
# 此时需确保wsl的终端在打开着,该步骤不再需要管理员权限,此时windows将弹出该USB设备并挂载到wsl中,也即windows不能再使用该设备
PS C:\Users\xflm> usbipd.exe attach --wsl --busid 4-1
usbipd: info: Using WSL distribution 'Ubuntu-24.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 172.18.32.1 to reach the host.
# 再次查看即可看到选择的设备已被映射
PS C:\Users\xflm> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
3-2    0a12:0001  Generic Bluetooth Radio                                       Not shared
3-4    1ea7:0064  USB 输入设备                                                  Not shared
4-1    1a86:7523  USB-SERIAL CH340 (COM5)                                       Attached
4-5    1c4f:0002  USB 输入设备                                                  Not shared

Persisted:
GUID                                  DEVICE
# 当不需要映射时,执行以下命令,USB设备将从wsl中弹出并重新挂载到windows中
PS C:\Users\xflm> usbipd.exe detach --busid 4-1
# # 再次查看即可看到选择的设备已取消映射
PS C:\Users\xflm> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
3-2    0a12:0001  Generic Bluetooth Radio                                       Not shared
3-4    1ea7:0064  USB 输入设备                                                  Not shared
4-1    1a86:7523  USB-SERIAL CH340 (COM5)                                       Shared
4-5    1c4f:0002  USB 输入设备                                                  Not shared

Persisted:
GUID                                  DEVICE

3. wsl加载串口驱动

wsl2安装的ubuntu24.04中已带了串口驱动,但是需要手动安装一下,不安装驱动是看不见串口设备的。

shell 复制代码
# 这个文件记录了可以使用modprobe命令安装的驱动模块
$ cat /lib/modules/5.15.153.1-microsoft-standard-WSL2/modules.dep
kernel/drivers/block/nbd.ko:
kernel/drivers/net/bonding/bonding.ko:
kernel/drivers/net/dummy.ko:
kernel/drivers/net/vrf.ko:
kernel/drivers/usb/serial/usbserial.ko:
kernel/drivers/usb/serial/ch341.ko: kernel/drivers/usb/serial/usbserial.ko
kernel/drivers/usb/serial/cp210x.ko: kernel/drivers/usb/serial/usbserial.ko
kernel/drivers/usb/serial/ftdi_sio.ko: kernel/drivers/usb/serial/usbserial.ko
kernel/net/netfilter/xt_CT.ko:
kernel/net/netfilter/xt_bpf.ko:
kernel/net/netfilter/xt_u32.ko:
kernel/net/ipv4/ipip.ko: kernel/net/ipv4/tunnel4.ko
kernel/net/ipv4/tunnel4.ko:
kernel/net/ipv6/sit.ko: kernel/net/ipv4/tunnel4.ko
# 安装ch341驱动,需要管理员权限
$ sudo modprobe ch341
# 可以查看已安装的驱动模块
$ lsmod
Module                  Size  Used by
ch341                  20480  0
usbserial              36864  1 ch341
# 可以看到串口设备已存在
$ ls /dev/ttyUSB0

4. 安装命令行串口助手

minicom是一个命令行版本的串口助手。

shell 复制代码
# 安装陈程序
$ sudo apt install minicom
# 打开串口,即可正常收发,使用CTRL+A再按Z退出minicom
$ minicom -D /dev/ttySUSB0 -b 115200

5. 编写udev rule

创建sudo vi /etc/udev/rules.d/serial.rules,内容如下。这里的vid/pid是在usbipd list中看到的,这句话表示对于该类型的设备,加载ch341驱动,同时设置设备的访问权限为0666,即允许任意角色访问。

复制代码
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", RUN+="/sbin/modprobe ch341", MODE="0666"

6. 补充现象

  1. 将USB设备拔出重新插入电脑时,如果设备之前是SharedAttached状态,则会保持在Shared状态,如果想重新给wsl使用,则需要在windows终端上重新执行usbipd attach --wsl -busid <设备id>命令。
  2. 没有驱动的设备也可以被usbipd list识别,也可以正常映射到wsl中,如果wsl中有驱动,则可以正常使用。

上一篇:wsl(2) -- ubuntu24.04配置

下一篇:wsl(4) -- 编译驱动模块

目录:wsl -- 集合

7. 参考

Windows 10 linux 子系统 WSL 使用串口
Linux笔记:串口通讯工具minicom基础使用
连接 USB 设备

相关推荐
ホロHoro12 分钟前
数据结构非线性部分(二)review
linux·服务器·数据结构
wang60212521814 分钟前
Git部署项目配置密钥-Linux系统
linux·运维·git
xlp666hub17 分钟前
链表与它在 Linux 内核中的实现
linux·数据结构
倔强的石头10633 分钟前
【Linux指南】进程控制系列(四)进程替换 ——exec 系列函数全解析与应用
linux·运维·bash
悾说35 分钟前
xRDP实现Linux图形化通过Windows RDP访问Linux远程桌面
linux·运维·windows
tianyuanwo1 小时前
解决Anolis/CentOS 8下Python 3.11 SELinux模块缺失:从原理到实战的完整指南
linux·centos·python3.11
承渊政道1 小时前
Linux系统学习【Linux基础指令以及权限问题】
linux·服务器·学习
一个人听秋雨1 小时前
speedtest-x脚本优化
linux·运维
食咗未1 小时前
Linux SSH工具的使用
linux·网络·测试工具·ssh·远程登陆
HalvmånEver1 小时前
Linux:深入剖析 System V IPC下(进程间通信九)
linux·运维·服务器·c++·system v·管道pipe