USB/IP 协议支持
概述
新的 USB 支持包含对 USB/IP 协议的初步支持。该功能仍在开发中,目前仅限于导出连接到主机控制器的一个设备。
USB/IP 使用 TCP/IP。其底层的两个连接协议栈(USB 和网络)都需要大量内存资源,在选择平台时必须加以考虑。
在 USB/IP 协议中,服务器导出 USB 设备,客户端导入这些设备。Zephyr RTOS 中的 USB/IP 支持实现服务器功能,导出一台运行 Zephyr RTOS 的设备上连接到主机控制器的设备。客户端(通常运行 Linux 内核)导入该设备。USB/IP 协议参见 USB/IP protocol documentation。
要使用 USB/IP 支持,请确保客户端已加载所需的模块。
modprobe vhci_hcd
modprobe usbip-core
modprobe usbip-host
在客户端,还需要 usbip 用户工具。可以使用 Linux 发行版的包管理系统安装该工具,或从 Linux 内核源代码构建。
日常使用有几个基本命令。要列出已导出的 USB 设备,请运行以下命令:
$ usbip list -r 192.0.2.1
Exportable USB devices
======================
- 192.0.2.1
1-1: NordicSemiconductor : unknown product (2fe3:0001)
: /sys/bus/usb/devices/usb1/1-1
: Miscellaneous Device / ? / Interface Association (ef/02/01)
: 0 - Communications / Abstract (modem) / None (02/02/00)
: 1 - CDC Data / Unused / unknown protocol (0a/00/00)
连接 busid 为 1-1 的已导出设备:
$ sudo usbip attach -r 192.0.2.1 -b 1-1
断开端口 0 上的已导出设备:
$ sudo usbip detach -p 0
在 native_sim 上使用 USB/IP
在启用 USB/IP 支持的情况下进行开发,首选方法是使用 native_sim。在真实硬件上的使用尚未经过充分测试。USB/IP 需要网络连接,有关如何在客户端设置接口,请参见 使用 native_sim 开发板进行网络连接。
使用 USB/IP 构建和运行示例需要大量配置,你可以使用 usbip-native-sim snippet 来配置主机和 USB/IP 支持。
# From the root of the zephyr repository
west build -b native_sim/native/64 samples/subsys/usb/cdc_acm -- -DSNIPPET=usbip-native-sim -DEXTRA_DTC_OVERLAY_FILE=app.overlay