1

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 的。

4

1 回答 1

5

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”。这是两个不同的功能,一次只能使用其中一个,它们都是由同一个小工具创建的。

于 2020-12-16T20:07:16.050 回答