#linux #linux-kernel #usb #linux-device-driver #libusb
#linux #linux-ядро #usb #linux-драйвер устройства #libusb
Вопрос:
Как веб-разработчик, я новичок в разработке USB и гаджетов. Я создаю настольное приложение Windows, которое взаимодействует, используя библиотеку Node-USB, с USB-устройством. Для начала я пытаюсь создать макет USB-устройства с использованием Linux на моем Raspberry Pi 4. Я настроил его на загрузку как USB-устройство, используя этот скрипт, основанный на этом руководстве, который устанавливает идентификаторы поставщика / поставщика usb, функцию rndis и многое другое. Windows распознает устройство при подключении его к компьютеру, и я могу открыть соединение с ним, используя библиотеку NodeJS.
Теперь я застрял на том, как настроить устройство для настройки функции, которая просто прослушивает данные, отправляемые ему на конечную точку «массового ввода» с хоста, и автоматически передает их обратно на хост, чтобы приложение Windows получало их. Мне сообщили, что существует множество сценариев для настройки простого «демонстрационного» гаджета, подобного этому, в Linux, но я не могу найти ни одного.
Мне это непонятно,
- Как настроить функцию usb на устройстве для прослушивания конечной точки массового «выхода»
- Как настроить «драйвер» или пользовательское приложение для «прослушивания» вышеупомянутой функции
- Как сделать само приложение для прослушивания. Библиотека node-usb говорит, что она предназначена для связи с USB-устройствами, а не для самих устройств, так что, похоже, я не могу ее использовать?
- Существует ли простой скрипт bash или встроенная команда Linux, которая может автоматически передавать данные на хост с конечной точки «in»?
Я был бы признателен за любое руководство, которое направило бы меня в правильном направлении!
Комментарии:
1. Вы имеете в виду прослушивание данных, отправленных ему на конечную точку массового вывода (и, соответственно, в другом направлении)? Существующий драйвер в ядре Linux предназначен для набора тестов, забыл его название. Что-то вроде тупого гаджета или около того…
Ответ №1:
- Вам нужно написать драйвер USB-функции в ядре или использовать functionfs, чтобы сделать это в пользовательском пространстве. В любом случае вам нужно будет подготовить USB-дескрипторы, которые представляются хосту во время перечисления (когда ваше устройство подключается), а затем обрабатывать входящие USB-запросы на зарегистрированных конечных точках.
- Чтобы настроить один из драйверов, уже существующих в ядре, вы можете сделать это через configfs или с помощью библиотеки-оболочки libusbgx. Существуют также устаревшие драйверы функций, которые автоматически активируются после загрузки модуля.
- Библиотека node-usb является оболочкой для libusb, которая является библиотекой на стороне хоста. Итак, вы правы, вы не можете использовать его для создания драйвера функции на стороне устройства.
- В ядре есть функция f_loopback, которая делает именно то, что вам нужно. Это, вероятно, лучшая отправная точка, если вы хотите создать свой собственный драйвер USB-функции.