如何在 VSCode 开发容器内使用 USB/COM 端口?

问题描述 投票:0回答:3

在 VSCode (Debian Linux) 的开发容器内部,我想使用 COM 端口通过连接到 Windows 主机的 USB 设备(通过 WSL2)进行通信。如何使 COM 端口在容器内可用?

编辑:

对于 WSL2 尚无官方支持

截至目前,WSL 2 不包括串行支持或 USB 设备支持。

在 GitHub 上跟踪相应的 功能请求

docker visual-studio-code serial-port
3个回答
2
投票

2021 年 7 月:截至目前,WSL 2 不包括串行支持或 USB 设备支持。

2021 年 11 月更新:相同的常见问题解答指出:

Skanda Hazarika报道:

您现在可以在 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 驱动器。


1
投票

2023 年 4 月

现在可以使用 docker 在 Windows 10 中设置对 USB 的整个访问链(假设 Ubuntu 位于 WSL2 上)。

  1. 确保您的 WSL 内核至少为 5.10.60(您可以在 Windows 命令行中使用
    wsl --status
    检查)
  2. 运行 Microsoft 页面上提到的步骤
  3. 设置完成后,您应该会看到您的设备带有
    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
  1. 有可能,您在
    /dev
    中仍然看不到它。在这种情况下,您需要在
    99-platformio-udev.rules
    中创建一个
    /etc/udev/rules.d
    文件并添加 USB 设备的定义。请参阅 github 页面获取可能也包含您选择的设备的列表。
  2. 此后您可能需要重新加载 udev 配置。注意:我发现我的设备实际上位于
    /dev/bus/usb...
    下,而不是
    /dev/ttyUSB
sudo udevadm control --reload
sudo service udev restart 
  1. 最后将
    "--device=/dev/..."
    添加到您的
    .devcontainer
    文件 runArgs 部分或您的
    docker run ...
    命令中。确保您在容器中拥有 root 权限。 (以
    root
    身份登录或使用
    --privileged

0
投票

我还尝试在 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 容器。

我有设备绑定和:附加,在Ubuntu应用程序中,在

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 扩展中看到,因此可以将程序上传到它们?

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.