linux cdc_ecm 驱动程序与 rndis 驱动程序

linux cdc_ecm driver vs rndis driver

linux cdc_ecm 驱动程序与 rndis 协议有什么关系? cdc_ecm 是否以任何方式基于微软的 rndis 规范?

来自此 wiki 页面 https://en.wikipedia.org/wiki/RNDIS

The USB Implementers Forum (USB-IF) defines at least three non-proprietary USB communications device class (USB CDC) protocols with comparable "virtual Ethernet" functionality; one of them (CDC-ECM) predates RNDIS and is widely used for interoperability with non-Microsoft operating systems, but does not work with Windows.

似乎cdc_ecm基于微软 rndis。

CDC-ECM 是由 USB-IF 创建的标准。它与 RNDIS 完全无关。正如您的引述所说,它早于 RNDIS。这意味着它是在 RNDIS 存在之前创建的,因此它不能基于 RNDIS 除非时间机器进入画面。如果您查看协议,就会发现它明显不同。

CDC-ECM 在 Linux 主机、MacOS、ChromeOS 和某些(主要是三星)Android 手机上开箱即用。

Microsoft 决定在 USB 协议上创建新的以太网,而不是使用已经存在的标准 (CDC-ECM)。微软就是这样。所以他们创建了 RNDIS,它不是标准也没有发布。这是一个基于 NDIS 的 hack,它是 Microsoft 的旧 DOS 和 Windows 3.11 时代网络协议。微软也是如此。他们喜欢将东西建立在旧的 MS 软件之上,而旧的 MS 软件又基于更旧的 MS 软件,一直追溯到 DOS。这使得其他任何人都很难与之兼容。

Microsoft 在 Windows 中不包括 CDC-ECM 驱动程序,但有 RNDIS 驱动程序。

如果没有 INF 文件,仅使用供应商和产品 ID、设备 class 等,就无法 Windows 加载包含的 RNDIS 驱动程序。有一个非标准的Microsoft 创建的 USB 设备标识描述符(参见此处的模式)必须用于将 RNDIS 设备标识为 Windows,以便加载通用驱动程序。

Linux 有一个 CDC-ECM / RNDIS 组合小工具,可用于更广泛的兼容性。这显示为具有两种功能的 USB 设备。一个函数是 RNDIS,Windows 将使用它。另一个功能是 CDC-ECM,其他人都会用到它。它不是“支持 RNDIS 的 ECM”。这是两个不同的功能,一次只能使用其中一个,它们都是由同一个小工具创建的。