【问题标题】:linux cdc_ecm driver vs rndis driverlinux cdc_ecm驱动vs rndis驱动
【发布时间】:2020-12-17 04:07:16
【问题描述】:
linux cdc_ecm驱动和rndis协议有什么关系? cdc_ecm 是否以任何方式基于微软的 rndis 规范?
来自这个维基页面https://en.wikipedia.org/wiki/RNDIS
USB 实施者论坛 (USB-IF) 定义了至少三个具有类似“虚拟以太网”功能的非专有 USB 通信设备类 (USB CDC) 协议;其中之一 (CDC-ECM) 早于 RNDIS,广泛用于与非 Microsoft 操作系统的互操作性,但不适用于 Windows。
似乎 cdc_ecm 是基于 microsoft rndis。
【问题讨论】:
标签:
linux-kernel
cdc
rndis
【解决方案1】:
CDC-ECM 是由 USB-IF 创建的标准。它根本与RNDIS无关。正如你的报价所说,它早于 RNDIS。这意味着它是在 RNDIS 存在之前创建的,因此它不能基于 RNDIS,除非时间机器进入画面。如果你看一下协议,它显然是不同的。
CDC-ECM 在 Linux 主机、MacOS、ChromeOS 和某些(主要是三星)Android 手机上开箱即用。
Microsoft 决定在 USB 协议上创建一个新的以太网,而不是使用已经存在的标准 (CDC-ECM)。微软就是这样。所以他们创建了 RNDIS,它不是标准,也没有发布。这是一个基于 NDIS 的 hack,NDIS 是 Microsoft 的旧 DOS 和 Windows 3.11 时代网络协议。微软也是如此。他们喜欢将东西建立在旧的 MS 软件之上,这些软件基于更旧的 MS 软件,一直追溯到 DOS。这使得其他任何人都很难与之兼容。
Microsoft 在 Windows 中不包含 CDC-ECM 驱动程序,但有 RNDIS 驱动程序。
如果没有 INF 文件,仅使用供应商和产品 ID、设备类等,Windows 将无法加载包含的 RNDIS 驱动程序。Microsoft 创建了一个非标准 USB 设备标识描述符(请参阅这里的模式)必须用于向 Windows 识别 RNDIS 设备,以便它加载通用驱动程序。
Linux 有一个 CDC-ECM / RNDIS 组合小工具,可用于更广泛的兼容性。这显示为两个功能的 USB 设备。一个功能是 RNDIS,Windows 将使用它。另一个功能是 CDC-ECM,其他人都会使用它。这不是“支持 RNDIS 的 ECM”。这是两个不同的功能,一次只能使用其中一个,它们都是由同一个小工具创建的。