在 VSCode (Debian Linux) 的开发容器内部,我想使用 COM 端口通过连接到 Windows 主机的 USB 设备(通过 WSL2)进行通信。如何使 COM 端口在容器内可用?
编辑:
对于 WSL2 尚无官方支持。
截至目前,WSL 2 不包括串行支持或 USB 设备支持。
在 GitHub 上跟踪相应的 功能请求。
2021 年 7 月:截至目前,WSL 2 不包括串行支持或 USB 设备支持。
2021 年 11 月更新:相同的常见问题解答指出:
您现在可以在 Windows 11 下的 Windows Subsystem for Linux 中连接 USB 设备
如果您是适用于 Linux 的 Windows 子系统的活跃用户,并且希望直接从 WSL 下运行的 Linux 实例访问 USB 设备,那么您会很高兴知道这方面已经取得了重大进展。
感谢 Microsoft 对开源 dorssel/usbipd-win 项目的贡献,您现在可以在 WSL 中享受 USB 直通访问。
这意味着最终用户可以在适用于 Linux 的 Windows 子系统下执行刷新 Android 设备等任务,否则 Linux 子系统不支持这些任务。usbipd-win 项目旨在创建一个解决方案,用于将本地连接的 USB 设备共享到其他计算机,包括 Hyper-V 来宾和 WSL2。然而,官方的 WSL2 Linux 内核曾经缺乏对USB/IP 协议的支持,需要用户自己构建内核。
从 WSL 内核版本 5.10.60.1 开始,所需参数都是开箱即用配置的,因此不需要手动重新编译。
Microsoft 还为该项目提供了一个命令行界面,以支持 USB 设备在 Windows 上共享并从 WSL 中无缝连接。
所以如果你有:
然后,您的 VSCode 应该能够通过 WSL 访问已安装的 USB 驱动器。
2023 年 4 月:
现在可以使用 docker 在 Windows 10 中设置对 USB 的整个访问链(假设 Ubuntu 位于 WSL2 上)。
wsl --status
检查)lsusb
(apt install usbutils
)lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0483:3748 STMicroelectronics ST-LINK/V2
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
/dev
中仍然看不到它。在这种情况下,您需要在 99-platformio-udev.rules
中创建一个 /etc/udev/rules.d
文件并添加 USB 设备的定义。请参阅 github 页面获取可能也包含您选择的设备的列表。/dev/bus/usb...
下,而不是 /dev/ttyUSB
sudo udevadm control --reload
sudo service udev restart
"--device=/dev/..."
添加到您的 .devcontainer
文件 runArgs 部分或您的 docker run ...
命令中。确保您在容器中拥有 root 权限。 (以 root
身份登录或使用 --privileged
)我还尝试在 Windows 10 上的 Docker 中部署 VS Code。
我找到了这个不错的指南:https://www.linkedin.com/pulse/connecting-microcontrollers-platformio-running-linux-windows-jenssen-c6ulf并遵循它,但不幸的是我看不到USB目标VS Code(PlatformIO 扩展)中的端口(例如连接的 ESP32),使用 WSL2 连接到正在运行的 Docker 容器。
lsusb
命令之后我可以看到:输出
当我运行命令
lsusb
时,我得到:
输出
因此 ubuntu 会看到已连接的 USB 设备。但是运行
ls /dev
后,我没有看到类似 /dev/ttyUSBx 或 /dev/ttyACMx 的东西,但可以在 /dev/usb/...
目录中找到该设备。
我还尝试根据本教程在 /etc/udev/rules.d 中添加文件 99-platformio-udev.rules 文件:https://docs.platformio.org/en/latest/core/installation /udev-rules.html#platformio-udev-rules
甚至添加这些权限:
$ sudo adduser <username> dialout
$ sudo chmod a+rw /dev/ttyUSB0
但没有做出任何改变。
您能否告诉我,是否可以确保即使 VS Code 在 Docker 容器中运行时,USB 设备也可以在 VS Code PlatformIO 扩展中看到,因此可以将程序上传到它们?
谢谢