драйвер linux cdc_ecm против драйвера rndis

#linux-kernel #cdc #rndis

#linux-ядро #cdc #rndis

Вопрос:

Как драйвер linux cdc_ecm связан с протоколом rndis? Основан ли cdc_ecm каким-либо образом на спецификации rndis от Microsoft?

С этой вики-страницы https://en.wikipedia.org/wiki/RNDIS

Форум разработчиков USB (USB-IF) определяет по крайней мере три непатентованных протокола класса устройств связи USB (USB CDC) с сопоставимой функциональностью «virtual Ethernet»; один из них (CDC-ECM) предшествует RNDIS и широко используется для взаимодействия с операционными системами, отличными от Microsoft, но не работаетс Windows.

похоже, cdc_ecm основан на Microsoft rndis.

Ответ №1:

CDC-ECM — это стандарт, созданный USB-IF. Это вообще не связано с RNDIS. Как говорится в вашей цитате, он предшествует RNDIS. Это означает, что он был создан до существования RNDIS, поэтому он не мог быть основан на RNDIS, если только не появится машина времени. И если вы посмотрите на протокол, он явно отличается.

CDC-ECM работает «из коробки» на хостах Linux, macOS, ChromeOS и некоторых (в основном Samsung) телефонах Android.

Microsoft решила создать новый протокол Ethernet на USB вместо использования уже существующего стандарта (CDC-ECM). Именно так устроена Microsoft. Итак, они создали RNDIS, который не является стандартом и не был опубликован. Это взлом, основанный на NDIS, который представляет собой старый сетевой протокол эпохи DOS и Windows 3.11 от Microsoft. Это тоже так, как Microsoft. Им нравится создавать материал поверх более старого программного обеспечения MS, которое основано на еще более старом программном обеспечении MS, вплоть до DOS. Это делает его действительно сложным и трудным для совместимости с кем-либо еще.

Microsoft не включает драйверы CDC-ECM в Windows, но имеет драйверы RNDIS.

Невозможно заставить Windows загружать включенные драйверы RNDIS без INF-файла, Используя только идентификатор поставщика и продукта, класс устройства и т. Д. Существует нестандартный дескриптор идентификации USB-устройства, созданный Microsoft (см. Шаблон Здесь ), который необходимо использовать для идентификации устройства RNDIS в Windows, чтобы оно загружало универсальный драйвер.

В Linux есть комбинированный гаджет CDC-ECM / RNDIS, который полезен для более широкой совместимости. Это выглядит как двухфункциональное USB-устройство. Одной из функций является RNDIS, и Windows будет использовать ее. Другая функция — CDC-ECM, и все остальные будут использовать ее. Это не «ECM с поддержкой RNDIS». Это две разные функции, только одна из которых может использоваться одновременно, которые создаются одним и тем же устройством.