Что такое rndis usb ethernet

Обновлено: 21.11.2024

В этом примечании по применению объясняется, как настроить i.MX RT1050 в качестве USB-гаджета Ethernet, подключенного к USB-ПК через высокоскоростное соединение USB OTG.

Для реализации этой функции используется стандартный драйвер Linux Ethernet Gadget с включенной поддержкой CDC Ethernet. Чтобы обеспечить поддержку USB-хостов Microsoft Windows, драйвер гаджета реализует вторую конфигурацию устройства с поддержкой протокола «Remote NDIS» (RNDIS).

В практических встроенных приложениях гаджет Ethernet можно использовать для организации связи на основе TCP/IP с i.MX RT1050 по физическому каналу USB.

Конфигурация и сборка

Чтобы включить функциональность гаджета Ethernet в проекте rootfs, выполните следующие действия:

    Активируйте среду кросс-разработки:

[[электронная почта защищена] linux-cortexm-2.5.0]$ . ACTIVATE.sh
[[email protected] linux-cortexm-2.5.0]$ cdprojects/rootfs
[[email protected] rootfs]$

[[email protected] rootfs]$ make kmenuconfig

Запустите полученный файл rootfs.uImage на целевом устройстве. Обратите внимание на соответствующие сообщения ядра, указывающие на то, что USB-гаджет запущен:

MAC-адреса, используемые по умолчанию, генерируются драйвером случайным образом. Вы можете установить фиксированные значения, добавив соответствующие переменные в командную строку ядра Linux в U-Boot:

  • g_ether.host_addr= (например, g_ether.host_addr=02:00:00:00:02:02 ), чтобы указать MAC-адрес интерфейса на стороне хоста;
  • g_ether.dev_addr= (например, g_ether.dev_addr=04:00:00:00:04:04 ), чтобы указать MAC-адрес интерфейса на стороне гаджета.

Подключиться к хосту Linux

Если хост-компьютер работает под управлением Linux, сообщения, подобные показанным ниже, будут отображаться в консоли i.MX RT1050 при подключении к хосту:

Главный ПК обнаружит i.MX RT1050 как Ethernet-устройство CDC:

Подключиться к хосту Windows

Процедура установки драйвера RNDIS/Ethernet Gadget зависит от версии ОС Windows. Вот инструкции для разных версий:

После завершения установки хост-драйвера i.MX RT1050 выведет на консоль следующую информацию:

TCT/IP-связь

Настройте IP-адрес интерфейса USB Ethernet на стороне USB-устройства (i.MX RT1050). Выберите адрес, который не будет конфликтовать с другими сетевыми подсетями в системе (если они есть):

Настройте IP-адрес интерфейса USB Ethernet на стороне USB-хоста (ПК) (разумеется, выберите адрес из той же подсети, что и гаджет):

    Пример хоста Linux:

[[email protected] ~]$ sudo ifconfig usb0 192.168.2.1

Проверьте связь между i.MX RT1050 и хостом через USB с помощью команды ping:

[[email protected] ~]$ ping 192.168.2.2-c 3
PING 192.168.2.2 (192.168.2.2) 56 (84) байт данных.
64 байта из 192.168.2.2: icmp_seq=1 ttl=64 time=0,504 мс
64 байта из 192.168.2.2: icmp_seq=2 ttl=64 time=0,370 мс
64 байта из 192.168 .2.2: icmp_seq=3 ttl=64 время=0,360 мс

--- Статистика пинга 192.168.2.2 ---
3 пакета передано, 3 получено, 0% потери пакетов, время 1998 мс
rtt min/avg/max/mdev = 0,360/0,411/0,504 /0,067 мс

RNDIS (спецификация интерфейса удаленного сетевого драйвера) – это протокол Ethernet через USB, используемый некоторыми высокоскоростными USB-модемами/донглами.

Он также используется многими USB3.0-GigabitEthernet-адаптерами, такими как TP-Link UE300, и всеми недорогими китайскими адаптерами, которые я купил на ebay. Это один из способов, которым эти гигабитные сетевые ключи работают по принципу «подключи и работай» или «без драйверов», поскольку они соответствуют стандарту RNDIS, поэтому им не нужен специальный драйвер только для себя. В этих ключах отсутствует какой-либо интерфейс или настройки, это просто адаптеры USB-to-Ethernet, не более того.

Для получения дополнительной информации о различных используемых протоколах:

Настройка ключей на основе RNDIS

(Этот раздел основан на опыте использования Bleeding Edge r47548 от декабря 2015 года на wt3020 и подключении к Alcatel Onetouch L850.)

Для устройств rndis требуется только ограниченный набор пакетов (помимо базовых пакетов USB, которые, скорее всего, уже содержатся в базовом образе):

kmod-usb-net-rndis также установит kmod-mii, kmod-usb-net, kmod-usb-net-cdc-ether и kmod-usb-net-rndis в качестве зависимостей.

После установки пакетов и подключения флешки в dmesg должно появиться следующее:

Вы можете проверить сведения об интерфейсе нового сетевого интерфейса usb0, запустив ifconfig usb0 .

(после этого необходимо перезагрузить или перезапустить сетевую подсистему с /etc/init.d/network restart)

Если автоматическое подключение отключено или на 4G-модуле включен запрос PIN-кода, возможно, вам придется посетить веб-интерфейс администратора ключа (обычно 192.168.1.1), чтобы ввести PIN-код или инициировать подключение 4G. Вы можете сделать это со своего ПК, подключенного к Wi-Fi OpenWRT.

Устранение неполадок RNDIS

Если вы видите только сообщения usb, но не сообщения rndis_host, возможно, проблема в настройке режима.

Проверив /sys/kernel/debug/usb/devices , устройство должно выглядеть так:

а не так:

Примечание по безопасности RNDIS

Теперь, если вам нужен доступ к веб-интерфейсу вашего ключа, войдите в свой ящик OpenWRT с помощью:

  • Последнее изменение: 28.03.2021, 04:51.
  • от mwynn

Самостоятельная регистрация на вики отключена.
Если вы хотите внести свой вклад в вики OpenWrt, напишите ЗДЕСЬ на форуме или запросите доступ в IRC.

Если не указано иное, содержимое этой вики предоставляется по следующей лицензии:
CC Attribution-Share Alike 4.0 International

Спецификация интерфейса удаленного сетевого драйвера USB (RNDIS) обеспечивает IP-подключение через USB. Это позволяет разработчикам писать приложения на основе IP, которые работают через USB, а также через существующие каналы IP, такие как WiFi, Bluetooth и 3G.

Цель

Спецификация интерфейса удаленного сетевого драйвера USB (RNDIS) позволяет разработчикам создавать IP-приложения, работающие через USB.

Необходимый фон

Если вы хотите использовать RNDIS на платформе Symbian, вам необходимо ознакомиться со спецификацией RNDIS

Ключевые понятия и термины

Чтобы убедиться, что подключенный компьютер в частной сети имеет правильный IP-адрес, функция DHCP-сервера используется для назначения ПК с Windows IP-адреса при установлении сетевого подключения RNDIS.

Возможность переадресации между двумя разными интерфейсами в стеке IP. Переадресация IP должна быть включена, чтобы NAPT мог пересылать данные между внутренней и внешней сетями.

Общий механизм добавления функций в стек IP.

Приложение управления RNDIS

Управляющее приложение, которое предоставляет создатель устройства. Его основная функция заключается в запуске и остановке IAP восходящей линии связи. Он также может использовать уведомления для принятия более обоснованных решений.

Вместе с приложением управления RNDIS обеспечивает функции IP через USB.

Линия связи из внутренней сети во внешнюю сеть. В случае RNDIS канал связи использует GPRS. Создателям устройств необходимо настроить IAP исходящего канала.

Приложение управления USB

Определяет подключение или отсоединение USB-кабеля. Создатели устройств могут взять это для справки и добавить запуск и остановку приложения управления RNDIS.

Уведомление об авторизации исходящего канала RNDIS

Получает авторизацию пользователя по восходящему каналу для службы RNDIS.

Уведомление об отказе в сетевом подключении RNDIS

Уведомление, уведомляющее пользователя устройства о невозможности запуска службы RNDIS, поскольку PAN NAP уже запущен.

Ключ P&S требования RNDIS

Уведомления от службы RNDIS о требованиях к восходящему каналу.

Архитектура

RNDIS — это спецификация USB. Реализация Symbian RNDIS поддерживается в рамках USB. Он взаимодействует с несколькими сетевыми компонентами.

На приведенной ниже диаграмме показаны основные компоненты реализации RNDIS для платформы Symbian. Компоненты, окрашенные в синий цвет, являются специфическими компонентами RNDIS.

Рис. 1. Рис. 1. Компоненты RNDIS

Сводка USB RNDIS

USB RNDIS обеспечивает следующее:

Контроллер класса RNDIS

Контроллер класса RNDIS представляет собой подключаемый модуль ECOM для USB Manager. Он запускает RNDIS IAP (точка доступа в Интернет) для подключения к ПК. Диспетчер USB запускает контроллер класса RNDIS при запуске личности RNDIS.

Агент RNDIS

Агент RNDIS работает с пакетным драйвером RNDIS ( rndispkt.drv ). Он выдает уведомление об авторизации восходящего канала и уведомления о требованиях к восходящему каналу (доступно только в сценарии с IP-модемом), а также загружает IP-ловушку доступа к восходящему каналу.

Пакетный драйвер RNDIS

Драйвер пакетов RNDIS представляет собой полиморфный подключаемый модуль DLL для Ethernet NIF (Ethint.NIF). Он обеспечивает подключение к подсистеме связи.

Создание ПЗУ, включая RNDIS

Для использования RNDIS необходимо включить двоичные файлы в ПЗУ. Это можно сделать, указав макрос SYMBIAN_INCLUDE_USB_RNDIS. Кроме того, необходимо включить usbman.iby.

Типичное использование

RNDIS позволяет ПК и мобильным устройствам устанавливать сетевые подключения на базе Ethernet. Мобильное устройство с поддержкой RNDIS может выполнять одно из следующих действий:

В этом примечании по применению объясняется, как настроить STM32F7 в качестве USB-гаджета Ethernet, подключенного к USB-ПК через высокоскоростное соединение USB OTG.

Для реализации этой функции используется стандартный драйвер Linux Ethernet Gadget с включенной поддержкой CDC Ethernet.Чтобы обеспечить поддержку USB-хостов Microsoft Windows, драйвер гаджета реализует вторую конфигурацию устройства с поддержкой протокола «Remote NDIS» (RNDIS).

В практических встроенных приложениях гаджет Ethernet можно использовать для организации связи на основе TCP/IP с STM32F7 по физическому каналу USB.

Конфигурация и сборка

Чтобы включить функциональность гаджета Ethernet в проекте rootfs, выполните следующие действия:

    Активируйте среду кросс-разработки:

[[электронная почта защищена] linux-cortexm-2.1.0]$ . ACTIVATE.sh
[[email protected] linux-cortexm-2.1.0]$ cdprojects/rootfs
[[email protected] rootfs]$

[[email protected] rootfs]$ vi rootfs.dts.STM32F7
.
&usb_hs status = "хорошо";
dr_mode = "периферия";
pinctrl-names = "по умолчанию";
.

[[email protected] rootfs]$ make kmenuconfig

Запустите полученный файл rootfs.uImage на целевом устройстве. Обратите внимание на соответствующие сообщения ядра, указывающие на то, что USB-гаджет запущен:

MAC-адреса, используемые по умолчанию, генерируются драйвером случайным образом. Вы можете установить фиксированные значения, добавив соответствующие переменные в командную строку ядра Linux в U-Boot:

  • g_ether.host_addr= (например, g_ether.host_addr=02:00:00:00:02:02 ), чтобы указать MAC-адрес интерфейса на стороне хоста;
  • g_ether.dev_addr= (например, g_ether.dev_addr=04:00:00:00:04:04 ), чтобы указать MAC-адрес интерфейса на стороне гаджета.

Подключиться к хосту Linux

Если хост-компьютер работает под управлением Linux, сообщения, подобные показанным ниже, будут отображаться в консоли STM32F7 при подключении к хосту:

Хост-компьютер обнаружит STM32F7 как Ethernet-устройство CDC:

[[email protected] ~]$ ifconfig usb0
usb0 Link encap:Ethernet HWaddr 02:5e:48:43:be:47
inet6 addr: fe80::5e:48ff:fe43: be47/64 Scope: Link
UP BROADCAST MULTICAST MTU: 1500 Метрика: 1
Пакеты RX: 0 ошибки: 0 отброшены: 0 переполнения: 0 кадр: 0
пакеты TX: 0 ошибки: 0 отброшено:0 переполнение:0 носитель:0
коллизий:0 txqueuelen:1000
байт RX:0 (0,0 Б) байт TX:0 (0,0 Б)

Подключиться к хосту Windows

Если хост-компьютер работает под управлением Windows, сообщения, подобные показанным ниже, будут отображаться в консоли STM32F7 при подключении к хосту:

Процедура установки драйвера RNDIS/Ethernet Gadget зависит от версии ОС Windows. Вот инструкции для разных версий:

После завершения установки драйвера хоста STM32F7 выведет на консоль следующую информацию:

TCT/IP-связь

Настройте IP-адрес интерфейса USB Ethernet на стороне USB-устройства (STM32F7). Выберите адрес, который не будет конфликтовать с другими сетевыми подсетями в системе (если они есть):

Настройте IP-адрес интерфейса USB Ethernet на стороне USB-хоста (ПК) (разумеется, выберите адрес из той же подсети, что и гаджет):

    Пример хоста Linux:

[[email protected] ~]$ sudo ifconfig usb0 192.168.2.1

Проверьте связь между STM32F7 и хостом через USB с помощью ping:

[[email protected] ~]$ ping 192.168.2.2
PING 192.168.2.2 (192.168.2.2) 56 (84) байт данных.
64 байта из 192.168.2.2: icmp_seq=1 ttl=64 time=134 мс
64 байта из 192.168.2.2: icmp_seq=2 ttl=64 time=1,96 мс
64 байта из 192.168 .2.2: icmp_seq=3 ttl=64 time=2,09 мс
64 байта из 192.168.2.2: icmp_seq=4 ttl=64 time=2,11 мс
64 байта из 192.168.2.2: icmp_seq=5 ttl= 64 время=2.00 мс
^C
--- Статистика пинга 192.168.2.2 ---
5 пакетов передано, 5 получено, 0% потери пакетов, время 4008мс
rtt min /avg/max/mdev = 1,968/28,529/134,472/52,971 мс

Читайте также: