Что это такое и зачем оно нужно?
Если у магнитолы в машине есть вход для CD чейнджера, к нему можно подключить подобный адаптер, он обманет магнитолу и она решит, что к ней подключили чейнджер, причем вместо дисков используется обычная флешка с музыкой. Адаптером можно будет управлять штатными средствами, включая управление с руля.
На Муське уже было несколько обзоров подобных адаптеров, самые известные - китайские Yatour.
Я же решил пойти нестандартным путем, решил попробовать российский Триома Флиппер 2.
Общая оценка - отлично, покупкой доволен, рекомендую.
За подробностями прошу под кат
Если в машине стоит обычная магнитола, не завязанная на управление какими-то функциями машины, проще всего просто купить новую магнитолу. Брендовую магнитолу с USB входом можно купить в пределах сотни евро. Еще какую-то сумму придется потратить, чтобы она понимала управление с руля.
Можно поколхозить и приделать AUX (аудио) вход, но все равно будет нужен источник звука, да и про управление с руля придется позабыть.
Варианты с FM трансмиттерами я давно отбросил - пробовал пару разных трансмиттеров, качество звука было не очень.
Есть еще один путь, подключить к магнитоле на вход CD чейнджера апаптер, который позволит слушать музыку с флешек, управляя адаптером штатными средствами магнитолы, в том числе с руля. Можно найти подобные адаптеры от разных производителей с разными параметрами и отличающиеся качеством, надежностью, удобством или ценой.
Самый известный адаптер - Yatour. Самый крутой, пожалуй, американский Grom Audio, играющий, в том числе, FLAC. Ну и до кучи еще несколько устройств - Audiolink, Xcarlink, DMC, Dension.
В первую очередь, стал смотреть на yatour. На ali cтоит от 50$. Но отзывы в интернете энтузиазм немного пригасили. На адаптере линейный выход с фиксированным уровнем, поэтому на многих магнитолах уровень громкости заметно ниже, чем с магнитолы. Иногда нестабильная работа, зависания, критичность к наличию посторонних файлов на флешке. Количество поддерживаемых каталогов - сколько дисков поддерживает магнитола, в моем случае, это 6.
Официального сайта у yatour нет, сайты Ятура в интернете - это сайты продавцов. И информацию приходится собирать по крупицам в разных местах, в основном отписываются те, кто его себе ставил, но их опыт не всегда подойдет для вашей магнитолы.
Но мне повезло, наткнулся на белорусского продавца yatour Сергея aka SSD, который ответил на все мои вопросы, включая особенности работы с моей магнитолой.
В целом - работает, но могут быть проблемы с громкостью и нестабильной работой. От Сергея впервые услышал и о Grom Audio и о Триоме, которую он тоже продает.
Grom Audio на андроиде, поддерживает FLAC, но нет модели для моего автомобиля.
А вот Триома Флиппер 2 заинтересовал. В первую очередь возможностью регулировки уровня выхода (громкости). Кроме того, у него гораздо более удобная организация папок и их может быть гораздо больше. И он гораздо менее глючный.
По позаимствовал хорошую таблицу сравнения Yator и Trioma
Уточнение по Ятурам:
1. Посторонние файлы не мешают проигрыванию. Как минимум, на некоторых прошивках.
Итак, я свой выбор сделал. Триома!!!
При покупке подобного адаптера надо обязательно выбирать модель под свой автомобиль. Точнее, под автомагнитолу своего автомобиля. У разных магнитол могут быть разные разъемы под чейнджер, не совместимые между собой.
Стал искать знакомых, которые могли бы привезти мне адаптер из России или Белоруссии. Нашел!!! Нашел знакомого из России, который заказал и в начале февраля уже привез мне адаптер! Олег, спасибо!
Еще несколько фоток
Разъем для подключения доп.устройств, AUX кабеля или bluetooth адаптера
Мама на адаптере
Папа на кабеле
Разъем для магнитолы RD4
Не вскрывать, гарантия
Сзади два подходящих разъема, на одном из них работать не будет - проверено;)
На фотке указан нужный разъем. В нем штатно уже подключена проводка для подключения чейнджера, вытаскиваем установленный разъем и включаем свой.
Подключаем кабель с адаптером, включаем зажигание и чудо - все сразу заработало!!! Причем уровень громкости примерно такой же как с встроенного CD.
А вот дальше начинаем думать - куда бы вывести USB кабель. Проще всего в моем случае оказалось прокинуть кабель под рулем в маленький бардачок левее водителя.
Сам адаптер засунул в нишу сзади-слева от магнитолы. Места там немного, после установки магнитолы на место адаптер оказался там зажат кабелями, так что дополнительно закреплять адаптер не потребовалось.
На всех форумах пишут, что на магнитоле требуется активизация чейнджера в сервисе. У меня же все оказалось гораздо проще. Магнитола после включения сама определила, что к ней подключен чейнджер и его стало возможно выбрать через переключатель входов (радио/CD/чейнджер).
Как оказалось, активизация нужна не для магнитолы, а для дисплея, чтобы он мог отражать информацию для чейнджера.
Но полгода назад я а китайцы, молодцы, присылают дисплей со всеми активизированными функциями. Так что у меня все заработало без дополнительной активизации.
Адаптер понимает 32 каталога, в которых может быть по 32 подкаталога, в каждом из которых может быть до 99 файлов. Но скоро я понял, что переключатель дисков у меня переключает только первые шесть дисков. Хотя в режиме Random адаптер видит все каталоги.
Задал вопрос на форуме Триомы, поддержка ответила очень быстро и предложила варианты организации каталогов. Проблема оказалась в том, что на RD4 кнопки хоть и выполняют функцию Disc+/Disk-, в действительности они посылают на адаптер команды прямого выбора диска 1-6. Так что этими кнопками можно только переключать 6 корневых каталогов или 6 подкаталогов.
И управлять 1024-мя каталогами на моей магнитоле не получится. Управлять можно всего 32*6=192-мя каталогами;)
В описании сказано, что кнопки FF/FR выполняют двойную функцию - смену каталогов/подкаталогов и перемотку.
Но на RD4 Track+/Track- совмещены с FF/FR и для адаптера эти кнопки имеют Тройное назначение:
1. Короткое нажатие - Track+/Track-
2. Нажатие 2-3сек, отжатие, когда пропадет звук от текущего трека - переключение каталога
3. Длинное нажатие >3сек, идет ускоренный приглушенный звук - перемотка
Время приблизительное, ориентироваться надо на звук
Еще до покупки предполагал, что запишу одну большую мегафлешку с сотнями каталогов. Но уже сейчас вижу, что удобнее иметь несколько флешек с разными подборками.
У меня сейчас это:
1. Российская эстрада 80-90-е
2. Зарубежная эстрада 80-90-е
3. Инструменталки
Итого. За относительно небольшие деньги я получил безглючный адаптер с хорошим качеством звука и простым интуитивно понятным управлением. Покупкой очень доволен, Триома - молодцы!!!
Разработка различных устройств на основе микроконтроллеров - занятие, достойное настоящего компьютерного гика. Несомненно, полезной фишкой любого гаджета будет USB-интерфейс для подключения к компьютеру. Но что делать, если в микросхеме AVR не предусмотрена аппаратная поддержка USB?
При разработке собственного гаджета часто встает проблема его подключения к компьютеру. Надо сказать, что порты LPT и COM - теперь экзотика на материнских платах ПК, не говоря о ноутбуках, у которых эти интерфейсы исчезли давным-давно. Поэтому у современных компьютеров практически не осталось альтернатив интерфейсу USB.
Если ресурсы чипа используются на все сто процентов, то лучше сразу смотреть в сторону устройств с аппаратной поддержкой универсальной последовательной шины (такие микроконтроллеры присутствуют в линейке любого производителя). В остальных случаях можно использовать софтовый USB.
Для микроконтроллеров Atmel существует замечательный проект V-USB, который предлагает программную реализацию низкоскоростного устройства USB 1.1. Код V-USB будет работать на любом устройстве AVR, у которого есть хотя бы 2 Кб Flash-памяти и 128 байт ОЗУ, с тактовой частотой 12; 12,8; 15; 16; 16,8 или 20 МГц.
Использование продукта возможно как в рамках open source лицензии GPL, так и на коммерческой основе. Для того чтобы разрабатывать собственные USB-устройства, обычно также нужно покупать что-то вроде лицензии. Но ребята из V-USB позаботились и об этом, приобретя пару Vendor ID - Product ID и разрешив их использовать любому желающему.
Аппаратная обвязка для подключения USB-шины к микроконтроллеру очень простая. Если устройство потребляет не слишком много, то запитать его можно прямо от шины (считается, что линия питания USB компьютера способна отдавать ток до 500 мА). Так как информационные линии (D+ и D–) используют уровень сигнала 3,6 В, кроме токоограничивающих резисторов, необходимы стабилитроны для согласования с 5-вольтовой логикой чипа. Чтобы обозначить тип подключения, нужно «подтянуть» напряжение питания через сопротивление 1,5 кОм к линии D–.
Альтернативный вариант сопряжения по USB - снизить напряжение питания контроллера посредством соответствующей микросхемы стабилизации или просто парой диодов. Последнюю схему можно найти на сайте проекта V-USB.
Для микроконтроллеров AVR существует множество различных программаторов. USBtiny здесь упоминается, в частности, потому, что содержит программную реализацию USB, аналогичную V-USB. Схема этого программатора проста: версия 2 содержит две микросхемы, а первая версия - лишь одну (собственно чип ATtiny2313). Благодаря подробному описанию на сайте и простым комплектующим устройство легко сделать даже начинающему. USBtiny совместим с популярной программой avrdude, используемой для программирования микроконтроллеров AVR.
Единственная проблема заключается в заливке прошивки в чип программатора - для этого нужен… программатор. Если есть компьютер с LPT-портом, то можно сделать один из вариантов FBPRG ака «пять проводков», который железно
Программный инструментарий, необходимый для реализации простейшей прошивки USB-гаджета, предельно аскетичен: компилятор gcc-avr, библиотека avr-libc, программатор avrdude и набор binutils для AVR. В Debian/Ubuntu все, что нужно, устанавливается одной командой:
$ sudo apt-get install avrdude binutils-avr gcc-avr avr-libc
На безбрежных просторах интернета несложно найти очень подробное руководство по V-USB и libusb (на английском). Согласно мануалу, для добавления поддержки USB в проект потребуется папка usbdrv из архива с последней версией V-USB. В корне этой папки есть шаблон конфигурации usbconfig-prototype.h. Нужно сделать копию этого файла, назвав ее usbconfig.h. Далее - исправить usbconfig.h, указав порт (D), линии которого будут использоваться для ввода-вывода, непосредственно номера линии D+ (2) и D– (3), а также частоту (12 МГц), на которой работает чип (ATtiny2313):
#define USB_CFG_IOPORTNAME D #define USB_CFG_DMINUS_BIT 3 #define USB_CFG_DPLUS_BIT 2 #define USB_CFG_CLOCK_KHZ 12000
Чтобы воспользоваться лицензией V-USB для устройства, числовые идентификаторы производителя и устройства изменять не надо. А вот символьные имена можно выбрать по своему вкусу (они позволят отличить несколько устройств на основе V-USB, подключенных к одному и тому же компьютеру):
#define USB_CFG_VENDOR_ID 0xc0, 0x16 #define USB_CFG_DEVICE_ID 0xdc, 0x05 #define USB_CFG_VENDOR_NAME "n","e","t","s","4","g","e","e","k","s",".","c","o","m" #define USB_CFG_VENDOR_NAME_LEN 14 #define USB_CFG_DEVICE_NAME "U","S","B","e","x","a","m","p","l","e" #define USB_CFG_DEVICE_NAME_LEN 10
У тебя есть идея какого-нибудь устройства? Не спеши паять и кодить, а поищи, возможно, кто-то подобное уже делал. Если не получится воспользоваться готовыми схемами и исходниками, то хотя бы не придется начинать все с нуля.
Например, проект V-USB благодаря лицензионной политике накопил приличную базу готовых (в том числе и свободно распространяемых) решений. Здесь можно найти различные реализации клавиатур, USB-адаптеров для джойстиков, геймпадов (в том числе и раритетных, например SNES/NES, Nintendo 64, ZX Spectrum джойстик, Sony PlayStation 1/2) и тому подобное. Адаптеры DMX, виртуальные порты COM и UART, i2c, Servo, беспроводные интерфейсы DCF77, IR - все, что поможет подключить к ПК больше новых устройств. Логгеры, платформы для датчиков и сенсоров, адаптеры для LCD-дисплеев, программаторы и загрузчики также могут оказаться полезными в хозяйстве.
При взаимодействии по шине USB компьютер - это главное устройство, которое периодически отправляет управляющие сообщения-запросы. Контроллер, соответственно, подчиненное и должен отвечать на запросы. Формат управляющего сообщения определяется структурой usbRequest_t из файла usbdrv.h:
Typedef struct usbRequest { uchar bmRequestType; uchar bRequest; usbWord_t wValue; usbWord_t wIndex; usbWord_t wLength; } usbRequest_t;
Создадим файл main.c на одном уровне с папкой usbdrv и опишем в нем необходимые заголовочные файлы, определения и переменные:
#include
В main.c переопределим функцию usbFunctionSetup, которая вызывается автоматически при получении нового запроса:
USB_PUBLIC uchar usbFunctionSetup(uchar data) { usbRequest_t *rq = (void *)data; switch(rq->bRequest) { case DATA_OUT: // Обработать команду отправки данных usbMsgPtr = replyBuf; // Указать буфер return sizeof(replyBuf); // Возвратить размер буфера case DATA_IN: // Обработка команды получения данных dataLength = (uchar)rq->wLength.word; // Получить длину dataReceived = 0; // Вызовов usbFunctionWrite будет много if(dataLength > sizeof(replyBuf)) // Проверка на переполнение dataLength = sizeof(replyBuf); return USB_NO_MSG; // Возвратить 255 } return 0; }
Как видно из листинга, самый простой способ отправить данные компьютеру - установить в usbFunctionSetup значение указателя usbMsgPtr на буфер ОЗУ (replyBuf), где находятся данные, а затем вернуть его длину. Размер буфера не должен превышать 254 байта. Для ATtiny2313 c его 128 байтами ОЗУ этого достаточно. Для более функциональных устройств есть второй способ - переопределение функции usbFunctionRead.
Чтобы получить данные, во-первых, нужно в функции usbFunctionSetup извлечь длину сообщения из поля wLength запроса и сохранить ее в глобальной переменной dataLength. Во-вторых, в main.c требуется переопределить функцию usbFunctionWrite, предназначенную для обработки получаемых данных и вызываемую автоматически (и очевидно, несколько раз), если usbFunctionSetup возвращает значение USB_NO_MSG (255):
USB_PUBLIC uchar usbFunctionWrite(uchar *data, uchar len) { uchar i; // Сохранить полученную порцию данных в буфер for(i = 0; dataReceived < dataLength && i < len; i++, dataReceived++) replyBuf = data[i]; return (dataReceived == dataLength); }
Собственно, функция usbFunctionWrite занимается тем, что заполняет буфер replyBuf полученными данными.
Кстати, чтобы этот метод работал, нужно внести изменения в usbconfig.h:
#define USB_CFG_IMPLEMENT_FN_WRITE 1
Ну и последняя функция прошивки - main:
Int main() { usbInit(); // Инициализировать USB usbDeviceConnect(); // Подключить устройство sei(); // Разрешить прерывания // В бесконечном цикле ждать управляющие сообщения while(1) usbPoll(); return 0; }
Хорошая альтернатива программному/аппаратному USB - использование в чипе популярного интерфейса USART/UART со сторонним преобразователем этого протокола в USB, который можно выполнить, например, на основе микросхемы FT232RL.
Ты спросишь: а придется ли писать драйвер для операционной системы компьютера, чтобы подключить USB-устройство? Если использовать libusb, то можно обойтись без реализации полноценного модуля ядра. Libusb - это open source библиотека, которая позволяет быстро запрограммировать, во-первых, поиск устройства на шине, а во-вторых - обмен данными с ним.
Под Linux библиотеку и необходимые заголовочные файлы можно получить из исходных кодов. А лучше воспользоваться стандартным репозиторием твоего дистрибутива. Для Debian/Ubuntu, например, так:
$ sudo apt-get install libusb-dev
Существует также порт libusb под Windows - libusb-win32. Вопреки названию проекта, также поддерживаются 64-битные ОС от Microsoft (начиная с версии 1.2.0.0).
Но libusb - это отдельная тема разговора. Думаю, с программированием для ПК ты знаком и сможешь в этом разобраться сам. Поэтому буду краток. Создаем файл usbtest.c и начинаем наполнять его контентом. Сначала необходимые заголовочные файлы и определения:
#include
Функция usbOpenDevice для инициализации устройства:
Usb_init(); // Инициализировать USB usb_find_busses(); // Найти шины usb_find_devices(); // Найти устройства // Перебрать все шины for(bus=usb_get_busses(); bus; bus=bus->next) { // Перебрать все устройства на шине for(dev=bus->devices; dev; dev=dev->next) { // Если идентификаторы вендора и продукта не совпадают... if(dev->descriptor.idVendor != vendor || dev->descriptor.idProduct != product) continue; // ...пропустить эту итерацию // Попробовать получить дескриптор устройства if(!(handle = usb_open(dev))) { fprintf(stderr, "%s\n", usb_strerror()); continue; } return handle; // Вернуть дескриптор } } // Устройство не найдено return NULL;
Как видно, параметрами usbOpenDevice выступают числовые идентификаторы производителя и устройства. В случае если устройство присутствует на шине, возвращается его дескриптор. Если устройств на V-USB будет несколько - придется дописать проверку символьных имен вендора и продукта.
И функция main консольной утилиты usbtest:
Int main(int argc, char **argv) { // Дескриптор устройства usb_dev_handle *handle = NULL; int nBytes = 0; char buffer; // Ищем устройство handle = usbOpenDevice(0x16C0, 0x05DC); if(handle == NULL) { fprintf(stderr, "Could not find USB device!\n"); exit(1); } // Аргумент out - получить данные от чипа if(strcmp(argv, "out") == 0) { nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, DATA_OUT, 0, 0, (char *)buffer, sizeof(buffer), 5000); printf("Got %d bytes: %s\n", nBytes, buffer); // Аргумент in - отправить строку (следующий аргумент) } else if(strcmp(argv, "in") == 0 && argc > 2) { nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, DATA_IN, 0, 0, argv, strlen(argv)+1, 5000); } if(nBytes < 0) fprintf(stderr, "%s\n", usb_strerror()); usb_close(handle); // Закрыть дескриптор return 0; }
Здесь правит бал функция usb_control_msg, которая объявлена во включаемом файле usb.h. Она имеет кучу параметров и собственно создает те управляющие сообщения, обработка которых реализована в прошивке микроконтроллера.
Всенародно любимый симулятор электрических схем Proteus ISIS бесполезен при разработке устройств с программной реализацией USB. Его эмулятор USB поддерживает только чипы с аппаратной поддержкой универсальной последовательной шины (например, AT90USB646 или AT90USB1286).
Ниже приведен небольшой, но очень полезный Makefile, c помощью которого командой make из main.c и usbtest.c легко получить прошивку для чипа - main.hex и бинарник утилиты usbtest:
CC = avr-gcc OBJCOPY = avr-objcopy CFLAGS = -Wall -Os -Iusbdrv -mmcu=attiny2313 OBJFLAGS = -j .text -j .data -O ihex OBJECTS = usbdrv/usbdrv.o usbdrv/oddebug.o usbdrv/usbdrvasm.o main.o CMDLINE = usbtest # Цель: собрать все all: main.hex $(CMDLINE) # Сборка утилиты для компьютера $(CMDLINE): usbtest.c gcc -I ./libusb/include -L ./libusb/lib/gcc -O -Wall usbtest.c -o usbtest -lusb # Очистить проект от бинарного кода clean: $(RM) *.o *.hex *.elf usbdrv/*.o # Получение файла прошивки из elf-файла %.hex: %.elf $(OBJCOPY) $(OBJFLAGS) $< $@ # Сборка elf-файла main.elf: $(OBJECTS) $(CC) $(CFLAGS) $(OBJECTS) -o $@ # Сборка файлов библиотеки V-USB $(OBJECTS): usbdrv/usbconfig.h # C в объектный код %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # asm в объектный код %.o: %.S $(CC) $(CFLAGS) -x assembler-with-cpp -c $< -o $@
Чтобы залить прошивку в микроконтроллер с помощью программатора usbtiny, набираем команду:
$ sudo avrdude -p t2313 -c usbtiny -e -U flash:w:main.hex:i -U lfuse:w:0xef:m
В avrdude фьюзы задаются не слишком наглядно, но их можно легко рассчитать в одном из online-калькуляторов.
Подключаем устройство к компьютеру и проверяем, как оно работает (usbtest c параметром out считывает строку, in - записывает указанную строку в буфер чипа):
$ sudo ./usbtest in all_ok $ sudo ./usbtest out
Софтовый USB не есть панацея. Программные реализации обычно имеют ряд упрощений, таких как отсутствие проверки контрольной суммы и симметричности канала, что отрицательно сказывается на помехозащищенности. Также обычно софтовые библиотеки используют низкоскоростные режимы работы USB. Да и код USB-библиотеки «кушает» и без того небольшую память чипа.
На уровне логики протокол USB - это, по сути, многоуровневая пакетная передача данных. В этом нетрудно убедиться (а заодно узнать много интересного про USB), воспользовавшись анализатором сетевых протоколов Wireshark. Предварительно необходимо загрузить драйвер USB-монитора:
$ sudo modprobe usbmon
Теперь в списке интерфейсов Wireshark можно выбирать шины USB. Посмотреть номер шины устройства можно, например, в логах.
Надеюсь, после того, как ты научился пересылать данные между компьютером и микроконтроллером AVR, твоя страсть к электронике воспылает с новой силой, породив немало оригинальных и полезных устройств. Остается лишь пожелать тебе успехов на этом сложном, но интересном поприще.
Иногда бывают такие ситуации, когда приходится работать с утилитами (бухгалтерскими, социальными, которые требуют обязательного наличия в компьютере внешнего носителя). Или же просто необходимо установить новую версию операционной системы . Но, что делать, если нет ни флешки, ни каких-либо свободных CD. Выход есть! Нужна специальная программа, которая будет работать как виртуальная флешка.
OSFmount- это маленькая программка, которая поможет создать накопитель. Это приложение может создать как готовый образ (image) накопителя, так и RAM, который существует только в ОЗУ . Флоппи-винчестер, искусственный оптический диск, и,главное, виртуальная флешка - программа может монтировать все эти образы . Windows 10, Windows 8, Windows 7 виртуальная флешка создастся на любой операционной системе Windows, причём как в 64-битной среде, так и в 32-битной. В mount даже можно определять для искусственного диска определённую букву и устанавливать нужные атрибуты. При этом размер утилиты не дотягивает даже до 2 мегабайт, её размер всего 1,95 Мбайт. Из минусов только то, что программа не поддерживает русский язык.
В использовании она лёгкая и для создания флешки не потребуется много времени и усилий. Итак, как создать виртуальную флешку на компьютере с помощью OSFmount:
Также в работе могут понадобятся некоторые опции, которые открываются после нажатия на «Drive Actions». В этой опции есть следующие:
Вот так очень легко можно сделать virtual usb flash на компьютере. Образы для virtual flash можно выбирать любые. Но в случае с загрузочным image накопитель придётся отформатировать и открываться она будет только в этом приложении.
Альтернативной версией этого приложения является Virtual Flash Drive, которая также очень проста и удобна при создании искусственного хранилища информации. Их отличие в том, что в OSTmount больше дополнительных опций и помимо usb flash, можно делать другие искусственные накопители.
Теперь становится понятно, даже если под рукой нет никаких внешних носителей, а они очень нужны, то можно в несколько кликов сделать их искусственно созданный аналог.
11
У меня есть приложение Linux, для которого я хотел бы автоматизировать некоторые тесты, и его состояние должно изменяться в зависимости от состояния определенных устройств, то есть USB-устройств, WLAN-устройств, WAN-устройств. Однако у нас больше нет физических USB-устройств, WLAN, WAN и т. Д. Устройств, поэтому мне нужно выяснить способ тестирования этой программы без фактического подключения физических устройств, включения/выключения их и т. Д.
Я начинаю с простого создания виртуального USB-устройства, которое я могу контролировать из пользовательского пространства, но с моей стороны возникает фундаментальный недостаток знаний, который мешает мне принимать какие-либо из похожих тем на этих форумах и применять их к моему проекту. Я чувствую, что мне нужно создать какой-то виртуальный USB-драйвер, а затем связать его с какой-то программой на уровне пользователя, а не с usbfs. Однако, даже если я создаю этот виртуальный драйвер, как мне «подключить» это устройство из пользовательского пространства и получить мою программу, зарегистрированную с помощью этого конкретного драйвера? Является ли то, что я пытаюсь сделать, даже возможно?
Сортировка:
Активность
0
Не можете ли вы протестировать приложение в виртуальной среде с помощью VMWare? Затем вы можете «подключить» любое виртуальное устройство на своем компьютере к гостевой виртуальной машине и протестировать приложение таким образом.
8
Лучший способ - использовать драйверы и оборудование для гаджетов Linux, которые позволяют вам быть USB-устройством. Драйвер гаджета позволяет компьютеру «притворяться» любым устройством. Тогда ваша тестируемая система имеет один кабель USB OTG для гаджета. Вам даже не нужно отключать кабель, если у вашего гаджета есть подходящее оборудование. «Гаджет-ящик» может быть вашим рабочим столом/ноутбуком под управлением Linux (если он поддерживает USB OTG) или даже Android-телефоном или малиной Pi. (Осторожно, что USB кабелей высасывать Просто потому, что канатные припадки не означает, что он правильно подключен к USB OTG.).
После того, как вы имеете право аппаратного USB OTG, гаджет коробок все программное обеспечение:
1) Если тестируемое устройство поддерживает OTG, убедитесь, что ваш гаджет не пытается и не является USB-хостом. (Тогда ваше тестируемое устройство станет USB-клиентом.) I.e. убедитесь, что такие вещи, как usb_storage , не загружаются автоматически.
2) Ядро поддерживает гаджеты для USB-концентраторов, USB-Ethernet, USB-последовательных портов и USB-накопителей. Просто загрузите нужные модули в свой гаджет, и он «просто работает». Например, чтобы создать USB-накопитель, сделайте что-то вроде этого: « insmod g_file_storage.ko file=/dev/ram0 ». Дальняя сторона будет думать, что вы подключили USB-накопитель.
Для последовательных устройств, гаджет может работать в пользовательском пространстве код, который «поднимает трубку» на/Dev/USBx»и переговоры в устройство под испытанием. (По-видимому, эмулирующий модем 4G или любой другой.)
Тонны устройств действительно «USB-серийный» под капотом, потому что производитель был слишком ленив, чтобы понять USB.
3) С небольшим повторным компиляцией или настройкой вы можете использовать эти универсальные устройства для гаджета, ID или возвращать различные строки поставщика и т. Д. Это не будет таким же, как «тестирование на реальном аппаратном обеспечении», но, по крайней мере, вы тестируете стандартную версию этих устройств.
4) Для типов устройств, которые еще не находятся в ядре (например, Wi-Fi или что-то еще), вы сами по себе. С достаточным количеством пота и слез крови вы можете написать свой собственный тип гаджета. (В идеале, используйте как можно больше в пользовательском пространстве и обрабатывайте только критически важные компоненты в ядре..)