如何将 USB 设备连接到 Azure IoT Edge for Linux on Windows

适用于:IoT Edge 1.5 勾选标记 IoT Edge 1.5

重要

IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 于 2024 年 11 月 12 日终止。 如果使用的是早期版本,请参阅 Update IoT Edge

在某些情况下,工作负载需要获取数据或与 USB 设备进行通信。 由于 Azure IoT Edge for Linux on Windows (EFLOW) 作为虚拟机运行,因此需要将这些设备连接到虚拟机。 本文指导你完成使用名为 usbipd-win 的 USB/IP 开放源代码项目将 USB 设备连接到 EFLOW 虚拟机所需的步骤。

在 Windows 计算机上设置 USB/IP 项目可实现常见的开发人员 USB 方案,例如闪存 Arduino、连接 USB 串行设备或直接从 EFLOW 虚拟机访问智能卡读取器。

警告

USB over IP 提供了一种通用机制,通过 Windows 主机操作系统和 EFLOW 虚拟机之间的网络重定向 USB 设备。 某些对网络延迟敏感的设备可能会遇到问题。 此外,由于驱动程序兼容性问题,某些设备可能无法按预期运行。 在部署到生产环境之前,请确保设备能够按预期工作。 有关 USB/IP 测试设备的详细信息,请参阅 USBIP-Win - Wiki - 测试设备

先决条件

  • Azure IoT Edge for Linux on Windows 1.3.1 更新或更高版本。 有关 EFLOW 发行说明的详细信息,请参阅 EFLOW 版本
  • 需要带有 x64/x86 处理器的计算机,usbipd-win 不支持 ARM64。

注意

若要检查 Azure IoT Edge for Linux on Windows 版本,请转到“添加或删除程序”,然后搜索 Azure IoT Edge。 已安装的版本在“Azure IoT Edge”下列出。 如果需要更新到最新版本,请参阅 Azure IoT Edge for Linux on Windows 更新

安装 UsbIp-Win 项目

EFLOW 原生不支持连接 USB 设备。 需要使用以下步骤安装开放源代码 usbipd-win 项目:

  1. 转到 usbipd-win 项目的最新发布页
  2. 选择并下载 usbipd-win_x.y.z.msi 文件。 (你可能会收到一条警告,要求你确认信任下载的安装程序)。
  3. 运行下载的 usbipd-win_x.y.z.msi 安装程序文件。

注意

或者,也可使用 Windows 程序包管理器程序 (winget) 来安装 usbipd-win 项目。 如果已安装 winget,只需使用命令 安装 usbipd-win 即可。 如果不使用 --interactive 参数,则 winget 可能会根据需要立即重启计算机以安装驱动程序。

UsbIp-Win 安装:

  • 名为 usbipd 的服务(USBIP 设备主机)。 可使用 Windows 中的“服务”应用检查此服务的状态。
  • 命令行工具 usbipd。 此工具的位置将添加到 PATH 环境变量。
  • 名为 usbipd 的防火墙规则,用于允许所有本地子网连接到服务。 可修改此防火墙规则以微调访问控制。

此时,一个服务正在 Windows 上运行以共享 USB 设备,并且在 EFLOW 虚拟机中安装了必要的工具以附加到共享设备。

警告

如果你有一个打开的 PowerShell 会话,请确保将其关闭并打开一个新的会话以加载 usbipd 命令行工具。

将 USB 设备附加到 EFLOW VM

以下步骤提供了一个示例 EFLOW PowerShell cmdlet,用于将 USB 设备附加到 EFLOW VM。 如果要手动执行所需的命令,请参阅如何使用 usbip-win

重要

以下函数为不应用于生产部署的示例。 对于生产用途,请确保验证功能性并基于这些示例创建自己的函数。 示例函数可能会更改和删除。

  1. 转到 EFLOW-Util 并下载 EFLOW-USBIP 示例 PowerShell 模块。

  2. 首先以管理员身份运行,打开提升的 PowerShell 会话。

  3. 导入下载的 EFLOW-USBIP 模块。

    Import-Module "<path-to-module>/EflowUtil-Usbip.psm1"
    
  4. 列出所有连接到 Windows 的 USB 设备。

    Get-EflowUSBDevices
    
  5. 列出所有网络接口并获取 Windows 主机操作系统 IP 地址

    ipconfig
    
  6. 选择要连接到 EFLOW 的设备的总线 ID。

    Add-EflowUSBDevices -busid <busid> -hostIp <host-ip>
    
  7. 检查设备是否正确连接到 EFLOW VM。

    Invoke-EflowVmCommand "lsusb"
    
  8. 在 EFLOW 中使用设备后,可以物理断开 USB 设备,或从提升权限的 PowerShell 会话运行此命令。

    Remove-EflowUSBDevices -busid <busid>
    

重要

EFLOW VM 与 USB 设备的连接在重新启动后不会持久存在。 若要在重新启动后附加 USB 设备,可能需要创建在启动期间运行的 bash 脚本,并使用 usbip bash 命令连接设备。 有关如何在 EFLOW VM 端附加设备的详细信息,请参阅 Add-EflowUSBDevices

若要详细了解 USB over IP,请参阅将 USB 设备连接到 WSLGitHub 上的 usbipd-win 存储库

后续步骤

按照如何使用 IoT Edge for Linux on Windows 开发具有 Linux 容器的 IoT Edge 模块中的步骤,使用 IoT Edge for Linux on Windows 开发和调试模块。