适用于:
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 项目:
- 转到 usbipd-win 项目的最新发布页。
- 选择并下载 usbipd-win_x.y.z.msi 文件。 (你可能会收到一条警告,要求你确认信任下载的安装程序)。
- 运行下载的 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。
重要
以下函数为不应用于生产部署的示例。 对于生产用途,请确保验证功能性并基于这些示例创建自己的函数。 示例函数可能会更改和删除。
转到 EFLOW-Util 并下载 EFLOW-USBIP 示例 PowerShell 模块。
首先以管理员身份运行,打开提升的 PowerShell 会话。
导入下载的 EFLOW-USBIP 模块。
Import-Module "<path-to-module>/EflowUtil-Usbip.psm1"列出所有连接到 Windows 的 USB 设备。
Get-EflowUSBDevices列出所有网络接口并获取 Windows 主机操作系统 IP 地址
ipconfig选择要连接到 EFLOW 的设备的总线 ID。
Add-EflowUSBDevices -busid <busid> -hostIp <host-ip>检查设备是否正确连接到 EFLOW VM。
Invoke-EflowVmCommand "lsusb"在 EFLOW 中使用设备后,可以物理断开 USB 设备,或从提升权限的 PowerShell 会话运行此命令。
Remove-EflowUSBDevices -busid <busid>
重要
EFLOW VM 与 USB 设备的连接在重新启动后不会持久存在。 若要在重新启动后附加 USB 设备,可能需要创建在启动期间运行的 bash 脚本,并使用 usbip bash 命令连接设备。 有关如何在 EFLOW VM 端附加设备的详细信息,请参阅 Add-EflowUSBDevices。
若要详细了解 USB over IP,请参阅将 USB 设备连接到 WSL 和 GitHub 上的 usbipd-win 存储库。
后续步骤
按照如何使用 IoT Edge for Linux on Windows 开发具有 Linux 容器的 IoT Edge 模块中的步骤,使用 IoT Edge for Linux on Windows 开发和调试模块。