1. ECM Gadget 概述

1.1 ECM 协议标准

ECM(Ethernet Control Model)是 USB-IF 定义的 标准以太网控制模型,属于 CDC(Communication Device Class)子类。它通过 USB 总线模拟虚拟以太网接口,使主机端(Host)将设备识别为标准网卡,无需安装额外驱动即可进行 TCP/IP 通信。

核心标准依据: ECM 协议定义在 USB CDC ECM 1.2 规范中,使用 控制端点(EP0) 进行管理,批量端点(Bulk) 传输数据。

ECM 协议栈分层

层级协议/组件说明
应用层TCP/UDP/IP主机网络协议栈
虚拟网卡层usb0 / eth0主机侧虚拟网络接口
USB 类层CDC ECM以太网帧封装、控制模型
USB 传输层Bulk IN/OUT批量传输端点
USB 设备层Gadget 框架底层驱动与控制器
ECM 协议栈分层架构 应用层:TCP/UDP/IP 协议栈 虚拟网卡层:usb0 / eth0 接口 USB 类层:CDC ECM 控制模型 USB 传输层:Bulk IN / Bulk OUT 端点 USB 设备层:Gadget 驱动 + 控制器

1.2 ECM 在 USB Gadget 框架中的角色

在 Linux USB Gadget 子系统中,ECM 作为 复合设备(Composite Gadget) 的一个功能(Function)模块存在。Gadget 框架通过 g_ether.ko 或 libcomposite 方式加载 ECM 功能,将嵌入式设备模拟为 USB 以太网适配器。

ECM Gadget 驱动架构组件

  • UDC(USB Device Controller)层: 硬件抽象层,管理 USB 控制器寄存器与端点。
  • Gadget 核心层: 提供 usb_gadget_driver 注册、端点分配、请求队列管理。
  • ECM Function 驱动: 实现 CDC ECM 规范的控制模型、数据封装、eth_dev 网络设备注册。
  • 网络协议栈: 将 USB 批量端点数据桥接到内核网络子系统。
ECM Gadget 驱动架构组件 主机(Host)网络协议栈 设备(Device)网络协议栈 USB 总线(Bulk 传输) ECM Function 驱动(g_ether) Gadget 核心层 + UDC 驱动
工程提示: 在嵌入式 Linux 中,ECM Gadget 通常通过 modprobe g_ether 或 ConfigFS 方式加载。使用 ConfigFS 可灵活组合多个功能(如 ECM + ACM 串口),实现复合 USB 设备。

1.3 ECM 与 RNDIS / EEM 的对比

在 USB 虚拟以太网领域,除 ECM 外,RNDIS(Remote NDIS) 和 EEM(Ethernet Emulation Model) 是另外两种主流协议。三者在封装方式、主机兼容性、性能开销上存在显著差异。

协议对比表

对比维度ECMRNDISEEM
标准组织USB-IF 标准Microsoft 私有USB-IF 标准
封装开销低(无额外头)高(NDIS 头 + 对齐)中(2 字节头)
主机驱动Linux/macOS 原生Windows 原生需额外驱动
批量传输Bulk 双向Bulk 双向Bulk 双向
零长度包处理需手动处理自动处理内置支持
典型吞吐量高(~900 Mbps)中(~600 Mbps)高(~850 Mbps)
适用场景Linux 嵌入式、IoTWindows 主机交互低延迟、小包场景

协议封装格式对比

  • ECM: 直接传输原始以太网帧(无额外头部),USB 帧与以太网帧一一对应。
  • RNDIS: 在以太网帧前添加 24 字节 NDIS 消息头,包含消息类型、长度、OOB 数据等字段。
  • EEM: 在以太网帧前添加 2 字节 EEM 头,包含 CRC 标志、数据长度、类型标识。
ECM / RNDIS / EEM 封装对比 ECM: 以太网帧(14 字节头 + 46~1500 字节载荷 + 4 字节 CRC) RNDIS: NDIS 头 (24B) 以太网帧(14 + 46~1500 + 4) EEM: EEM (2B) 以太网帧(14 + 46~1500 + 4) 封装开销对比总结 ECM 零额外开销 → 高吞吐量,适合大包传输 RNDIS 24 字节头 → 小包场景效率低,但 Windows 兼容性最好 EEM 2 字节头 → 平衡开销与功能,支持带内信号
选型警告: 如果目标主机主要是 Windows 系统,RNDIS 是唯一免驱方案;ECM 在 Windows 上需要额外安装驱动或使用 WinUSB 层。Linux ↔ Linux 场景下 ECM 是性能最优选择。

工程选型决策树

  1. 主机是 Windows? → 优先 RNDIS(原生支持)
  2. 主机是 Linux / macOS? → 优先 ECM(零开销、原生支持)
  3. 需要低延迟小包优化? → 考虑 EEM(2 字节头,支持突发小包)
  4. 复合设备需要多个网络接口? → ECM 支持多实例,RNDIS 通常单实例
性能基准参考: 在 i.MX8M 平台(USB 3.0)实测,ECM 单向吞吐量可达 920 Mbps,RNDIS 约 650 Mbps,EEM 约 850 Mbps。ECM 在 MTU 1500 场景下 CPU 占用率最低。