USB gadget — различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 228: | Строка 228: | ||
В режиме клиента - строчку | В режиме клиента - строчку | ||
− | + | 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
Описание модулей
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
Загрузка модуля
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
Хитрости
Как узнать в каком режиме USB
Файл /sys/devices/platform/musb-davinci/musb-hdrc.0.auto/driver/musb-hdrc.0.auto/mode содержит значения, уникальные для каждого режима (хост или клиент).
В режиме хоста этот файл будет содержать строчку
a_host
В режиме клиента - строчку
b_peripheral