USB gadget — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
Строка 228: Строка 228:
  
 
В режиме клиента - строчку  
 
В режиме клиента - строчку  
  a_peripherial
+
  b_peripheral
  
 
[[Категория:Инструкции]]
 
[[Категория:Инструкции]]

Версия 00:39, 11 июля 2015

Содержание

Теория

USB Gadget - одна из фич порта USB OTG. Общий смысл в том что микроконтроллер (Виртурилку, в нашем случае) можно подключить к обычному компьютеру по USB как флешку, например. Только вот микроконтроллер может определяться на компьютере различными девайсами, в зависимости от загруженного драйвера.

Например, если запустить на Виртурилке модуль g_ether - Виртурилка будет выступать в роли USB сетевой карты. Если запустить модуль g_mass_storage - Виртурилка будет обычной флешкой, и т.д.

Для включения системы USB Gadget надо включить параметр

Symbol: USB_GADGET [=m]
Type  : tristate
Prompt: USB Gadget Support
Defined at drivers/usb/gadget/Kconfig:16
Depends on: USB_SUPPORT [=y]
Location:
  -> Device Drivers
  -> USB support (USB_SUPPORT [=y])
      Selects: NLS [=y] 

Если установить USB_GADGET =m - подсистема USB Gadget будет динамическая - для функционирования потребуется загружать соответствующие модули ядра. Если установить USB_GADGET =y - подсистема будет фиксированная, т.е. будет только один конкретный функционал, зато не потребуется загружать модули. Как именно данную подсистему использовать - решать пользователю.

Доступные модули для USB Gadget:

( ) Gadget Zero (DEVELOPMENT)
( ) Audio Gadget
( ) Ethernet Gadget (with CDC Ethernet support) 
( ) Network Control Model (NCM) support
( ) Gadget Filesystem
( ) Function Filesystem
( ) Mass Storage Gadget
( ) Serial Gadget (with CDC ACM and CDC OBEX support)
( ) MIDI Gadget
( ) Printer Gadget
( ) CDC Composite Device (Ethernet and ACM)
( ) CDC Composite Device (ACM and mass storage)
( ) Multifunction Composite Gadget
( ) HID Gadget
( ) EHCI Debug Device Gadget
( ) USB Webcam Gadget

У каждого модуля своя специфика работы. Но, в общем случае, для активации модуля требуется выполнить следующие команды для активации подсистемы USB Gadget:

modprobe musb_hdrc.ko
modprobe davinci.ko

Затем надо загрузить конкретный модуль. Например, для Ethernet Gadget надо загрузить модуль g_ether.ko

modprobe g_ether.ko 

Конфигурация подсистемы USB gadget

Описание на kernel.org

Описание модулей

Ethernet Gadget (with CDC Ethernet support)

Загрузка модулей

Для загрузки модуля надо выполнить команду

modprobe musb_hdrc.ko
[root@virt2real ~]# modprobe musb_hdrc.ko
musb-hdrc: version 6.0, ?dma?, otg (peripheral+host)

Затем

modprobe davinci.ko
[root@virt2real ~]# modprobe davinci.ko

Теперь загружаем модуль Ethernet Gadget

modprobe g_ether.ko

Возможна загрузка с параметрами

modprobe g_ether.ko host_addr=00:dc:c8:f7:75:05 dev_addr=00:dd:dc:eb:6d:f1
[root@virt2real ~]# modprobe g_ether.ko
  gadget: using random self ethernet address
  gadget: using random host ethernet address
usb0: MAC 36:48:fb:09:d4:f5
usb0: HOST MAC f2:7b:d2:ef:ca:b3
  gadget: Ethernet Gadget, version: Memorial Day 2008
  gadget: g_ether ready
musb-hdrc musb-hdrc.0.auto: MUSB HDRC host driver
musb-hdrc musb-hdrc.0.auto: new USB bus registered, assigned bus number 1
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: MUSB HDRC host driver
usb usb1: Manufacturer: Linux 3.9.0-rc6-virt2real+ musb-hcd
usb usb1: SerialNumber: musb-hdrc.0.auto
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
gadget: high-speed config #2: RNDIS

Примерно такой вывод появится в консоли после загрузки модуля, если Виртурилка подключена по USB к компьютеру. Строчка "gadget: high-speed config #2: RNDIS" появится только если на компьютере были установлены драйвера RNDIS/Ethernet Gadget.

Установка драйвера

Рецепт юзера Tikki.

После загрузки на Виртурилке модуля Ethernet gadget и подключения Виртурилки USB кабелем к компьютеру должно появиться оповещение о найденном устройстве (в случае ОС Windows). Для этого устройства надо установить драйвер. Делается это через стандартную виндовую панель управления. Надо выбрать определившееся устройство (оно должно быть с иконкой знака вопроса), кликнуть правой кнопкой мыши, выбрать "Обновить драйвер". После чего указать каталог с распакованными из архива файлами.

Ссылка на файлы драйвера http://wiki.virt2real.ru/files/drivers/rndis.cab

После установки драйвера в списке сетевых подключений Windows должно появиться новое. Надо задать этому подключению какой-нибудь IP адрес, допустим, 192.168.3.1

Установка драйвера - второй способ (родные дрова Windows)

Рецепт юзера shebeko.

"Кстати, необязательно качать и ставить .cab

Все уже есть в винде.

Я ставил вот по этой инструкции- всё работает. https://github.com/mindboards/ev3dev/wiki/Setting-Up-Windows-USB-Ethernet-Networking"


Настройка подключения на Виртурилке

Теперь необходимо настроить интерфейс на Виртурилке. Делается это обычным образом

ifconfig usb0 inet 192.168.3.2 netmask 255.255.255.0 up

Проверяем интерфейс

ifconfig usb0
[root@virt2real ~]# ifconfig usb0
usb0      Link encap:Ethernet  HWaddr 36:48:FB:09:D4:F5
          inet addr:192.168.3.2  Bcast:192.168.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:282 errors:0 dropped:71 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:35357 (34.5 KiB)  TX bytes:0 (0.0 B)

Теперь можно попробовать пинг до компьютера, к которому по USB подключена Виртурилка

ping 192.168.3.1
[root@virt2real ~]# ping 192.168.3.1
PING 192.168.3.1 (192.168.3.1): 56 data bytes
64 bytes from 192.168.3.1: seq=0 ttl=128 time=1.256 ms
64 bytes from 192.168.3.1: seq=1 ttl=128 time=1.082 ms
64 bytes from 192.168.3.1: seq=2 ttl=128 time=0.997 ms

Всё, соединение установлено и настроено.

Gadget Serial

Описание на kernel.org

Загрузка модуля

modprobe g_serial
[root@virt2real ~]# modprobe g_serial
 gadget: Gadget Serial v2.4
 gadget: g_serial ready
musb-hdrc musb-hdrc.0.auto: MUSB HDRC host driver
musb-hdrc musb-hdrc.0.auto: new USB bus registered, assigned bus number 1
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: MUSB HDRC host driver
usb usb1: Manufacturer: Linux 3.9.0-rc6-virt2real+ musb-hcd
usb usb1: SerialNumber: musb-hdrc.0.auto
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
gadget: high-speed config #2: CDC ACM config

Для модуля доступен параметр, при котором получается что-то специфическое. Как перевести пока не понял :-) "To load it as a vendor specific bulk in/out device, do this: modprobe g_serial use_acm=0"

modprobe g_serial use_acm=0

При подключении Виртурилки USB кабелем к компьютеру с Windowd должно появиться новое устройство "Gadget Serial".

Установка драйвера Windows

Ссылка на файлы драйвера (под разные версии Windows)

http://wiki.virt2real.ru/files/drivers/gadget_serial_win7_win8.cab

http://wiki.virt2real.ru/files/drivers/gadget_serial_winxp.cab

http://wiki.virt2real.ru/files/drivers/gadget_serial_winold.cab

Настройка подключения на Виртурилке

Должно появиться устройство /dev/ttyGS0

[root@virt2real ~]# ls /dev/ttyG*
/dev/ttyGS0

По-умолчанию параметры этого COM-порта стандартные - 115200n8

Теперь, если на компьютере с Windows (к которому подключена Виртурилка) запустить терминал на порту, которым выступает установленное устройство Gadget Serial (в моём случае это COM30), а на Виртурилке выполнить запись в устройство /dev/ttyGS0, увидим посланный текст

На Виртурилке выполняем

echo "test" > /dev/ttyGS0

В терминале Windows видим

test

Возможное применение

С помощью модуля Gadget Serial появляется возможность подключения к консоли Виртурилки не через USB-TTL переходник, а сразу по USB кабелю. Для этого необходимо поместить инициализацию модуля g_serial.ko в автозагрузку, а также указать порт /dev/ttyGS0 как консольный. Это можно сделать в файле /etc/inittab. Надо исправить строчку, начинающуюся с ttyS0 на следующую:

ttyS0::respawn:/sbin/getty -L ttyGS0 115200 vt100 # GADGET_SERIAL

Полноценную аппаратную консоль, куда выводятся все сообщения ядра, это не заменит, но вот для подключения к Виртурилке по USB консоли подходит отлично. Подключение будет возможно с момента загрузки модуля g_serial.ko, а текст стандартного приглашения Linux появится в конце автозагрузки.

Welcome to Virt2real!
virt2real login:

Mass Storage Gadget

Описание на kernel.org


Хитрости

Как узнать в каком режиме USB

Файл /sys/devices/platform/musb-davinci/musb-hdrc.0.auto/driver/musb-hdrc.0.auto/mode содержит значения, уникальные для каждого режима (хост или клиент).

В режиме хоста этот файл будет содержать строчку

a_host

В режиме клиента - строчку

b_peripheral