WSL2使用串口

在WSL2中串口无法直接使用,需要访问串行端口或 USB 设备时,可以通过USBIPD-WIN 项目为 WSL 2 提供 USB 设备支持。

本文源自微软官网WSL教程

配置要求

  • Win11 (版本号22000及以上,Win10请参考官方教程:Win10连接USB设备官方教程

  • 需要具有 x64/x86 处理器的机器。 (usbipd-win 目前不支持 Arm64)。

  • 已安装 Linux 发行版并设置为 WSL 2。

  • 运行 Linux 内核 5.10.60.1 或更高版本。可通过uname -a查看

安装usbipd-win

Windows环境中需要安装 usbipd 工具

下载连接

直接下载 .msi 双击运行即可

WSL

在Ubuntu的终端中,运行以下指令:

1
2
sudo apt install linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20

其他系统的请参考 官方教程

连接设备

配置好后需要手动连接USB设备

windows中

接入USB,在PowerShell命令行界面

1
2
usbipd wsl list  #查看设备列表
usbipd wsl attach --busid <busid> #注意,<busid>是一个整体,直接输入busid号就行,不要带<>

结果应如下

屏幕截图 2022-04-25 101303.jpg

这里报错,提示需要升级

屏幕截图 2022-04-25 101323.jpg

然后重新运行上面代码

屏幕截图 2022-04-25 101414.jpg

这里已经显示连接到了Ubuntu中了

wsl

运行查看设备

1
lsusb

屏幕截图 2022-04-25 101211.jpg

这里已经有了设备了

如果没有可以回去检查usbipd wsl list打印列表,查看状态是否连接上

关闭串口就会断开连接(不确定),每次使用都要在windows中将其连接到wsl中

设置权限

检查连接成功后,运行编写好的串口程序,打印出了可用串口,我们连接的就是 ttyUSB0

image.png

打开串口进行操作时,会出现以下报错

image.png

这是因为权限不够,不能访问串口

解决方案

到/etc/udev/rules.d/ 目录下查看文件,发现没有 70-ttyusb.rules ,新建一个

1
2
3
4
5
6
cd /etc/udev/rules.d/
ls
60-vboxadd.rules 70-snap.gnome-characters.rules
70-snap.core.rules 70-snap.gnome-logs.rules
70-snap.gnome-calculator.rules 70-snap.gnome-system-monitor.rules
sudo vim 70-ttyusb.rules # 该文件我的目录下没有,我新建了一个

在文件中写入以下内容

1
KERNEL=="ttyUSB*", OWNER="root", GROUP="root",  MODE="0777"

重启udev

1
sudo /etc/init.d/udev restart

测试

测试前先确定USB是连接上了的

1
ls -l /dev/ttyUSB0

返回: crwxrwxrwx 1 root root 188, 0 Apr 25 10:27 /dev/ttyUSB0 即成功

再次运行程序,没有报错,信息也成功发送到了下位机

屏幕截图 2022-04-25 103152.jpg