1. 简介
WSL1中可以直接使用Windows的串口,其对应关系就是COMx
对应WSL的/dev/ttySx
,例如COM2
对应WSL的/dev/ttyS2
。WSL2是不支持USB设备的,但可以通过usbipd-win
程序将windows上的usb设备映射到wsl2中,参考微软官方文档连接 USB 设备。
2. usbipd安装和使用
- 前往https://github.com/dorssel/usbipd-win/releases下载
usbipd-win.msi
程序,我下载的是usbipd-win_4.3.0.msi大概4.55MB。 - 双击进行安装,安装后以管理员身份打开命令行终端。
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. 补充现象
- 将USB设备拔出重新插入电脑时,如果设备之前是
Shared
或Attached
状态,则会保持在Shared
状态,如果想重新给wsl使用,则需要在windows终端上重新执行usbipd attach --wsl -busid <设备id>
命令。 - 没有驱动的设备也可以被
usbipd list
识别,也可以正常映射到wsl中,如果wsl中有驱动,则可以正常使用。
下一篇:wsl(4) -- 编译驱动模块
目录:wsl -- 集合
7. 参考
Windows 10 linux 子系统 WSL 使用串口
Linux笔记:串口通讯工具minicom基础使用
连接 USB 设备