Как я могу создать Bulk USB Gadget WinUSB Device

Я создал небольшое встроенное устройство WinUSB, которое предлагает 2 массовые конечные точки. Это устройство может обмениваться данными с Linux и Windows10 без установки драйвера или файла .inf.

Теперь мы хотим использовать тот же API со встроенным Linux. Режим USB-Gadget предлагает Serial CDC/ACM и RNDIS-Ethernet и многое другое.

Мне удалось создать USB-гаджет с gadgetfs, у которого был только объемный ep. Я мог общаться с хостом Linux и Windows. USB-устройство имело /dev/ttyGS0 для связи. Но в Windows мне пришлось установить драйвер WinUSB вручную.

Я работаю с yocto над созданием встроенного ядра. Я добавил сюда строку кода: /linux-imx/drivers/usb/gadget/legacy/serial.c , f_serial.c, u_serial.h для добавления дополнительной переменной os_desc и параметра use_winusb. Но полученный g_serial по-прежнему создает COM-порт в Windows10 или устройство без WinUSB. Для нашего устройства нам нужен только WinUSB-Device.

Гаджет RNDIS поддерживает WinUSB. Поэтому я попытался создать собственное устройство USB-Gadget с https://github.com/libusbgx/libusbgx. Но если я использую тип функции USBG_F_SERIAL, он не может создать WinUSB. См. ошибку:

Error setting function OS desc
Error: USBG_ERROR_NOT_FOUND : Not found (file or directory removed)

Если я использую USBG_F_RNDIS, он работает, и с управляемым дескриптором USB он распознается Windows как устройство WinUSB. Но Linux реализует это как сетевое устройство USB-ETH. USB-устройство не получает последовательного соединения /dev/ttyGS0 для связи.

Сейчас я читаю исходный код драйвера ядра Linux, чтобы найти место, где я могу просто преобразовать этот дескриптор операционной системы WinUSB в тип USBG_F_SERIAL. Но я думаю, что это займет месяц, чтобы пройти.

Любое решение будет в порядке. Патч для источников драйверов Linux g_serial или как настроить USB-Gadgetfs было бы здорово. Любая подсказка, куда поместить дополнительный код, тоже подойдет.


person rundekugel    schedule 17.09.2020    source источник
comment
Вы пытались проанализировать обмен между хостом Windows и вашим гаджетом с помощью WireShark или Microsoft Event Analyzer? Он покажет дескрипторы, запрошенные хостом и возвращенные устройством. Пожалуйста, зафиксируйте их и добавьте к своему вопросу. Это поможет узнать, что происходит на этапе перечисления устройств USB, и даст вам представление о том, как решить эту проблему. Я рекомендую ознакомиться с документацией Microsoft по дескрипторам ОС — это поможет вам понять счастливый поток и позволит вам самостоятельно исследовать проблему.   -  person Alexey Adadurov    schedule 18.11.2020


Ответы (1)


Я хотел сменить ядро, но, к счастью, нашел это: https://blog.soutade.fr/post/2016/07/create-your-own-usb-gadget-with-gadgetfs.html

Этот код упростил добавление функций WinUSB.

Источник модифицированной версии для WinUSB: https://github.com/rundekugel/gadgetfsd/tree/WinUSB

person rundekugel    schedule 23.11.2020