适用于: IoT Edge 1.5
重要
IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是较低的版本,请参阅更新 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 开发和调试模块。