Как создать простое USB-устройство Linux для «эха» всего, что отправляется на него с хоста?

#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, но я не могу найти ни одного.

Мне это непонятно,

  1. Как настроить функцию usb на устройстве для прослушивания конечной точки массового «выхода»
  2. Как настроить «драйвер» или пользовательское приложение для «прослушивания» вышеупомянутой функции
  3. Как сделать само приложение для прослушивания. Библиотека node-usb говорит, что она предназначена для связи с USB-устройствами, а не для самих устройств, так что, похоже, я не могу ее использовать?
  4. Существует ли простой скрипт bash или встроенная команда Linux, которая может автоматически передавать данные на хост с конечной точки «in»?

Я был бы признателен за любое руководство, которое направило бы меня в правильном направлении!

Комментарии:

1. Вы имеете в виду прослушивание данных, отправленных ему на конечную точку массового вывода (и, соответственно, в другом направлении)? Существующий драйвер в ядре Linux предназначен для набора тестов, забыл его название. Что-то вроде тупого гаджета или около того…

Ответ №1:

  1. Вам нужно написать драйвер USB-функции в ядре или использовать functionfs, чтобы сделать это в пользовательском пространстве. В любом случае вам нужно будет подготовить USB-дескрипторы, которые представляются хосту во время перечисления (когда ваше устройство подключается), а затем обрабатывать входящие USB-запросы на зарегистрированных конечных точках.
  2. Чтобы настроить один из драйверов, уже существующих в ядре, вы можете сделать это через configfs или с помощью библиотеки-оболочки libusbgx. Существуют также устаревшие драйверы функций, которые автоматически активируются после загрузки модуля.
  3. Библиотека node-usb является оболочкой для libusb, которая является библиотекой на стороне хоста. Итак, вы правы, вы не можете использовать его для создания драйвера функции на стороне устройства.
  4. В ядре есть функция f_loopback, которая делает именно то, что вам нужно. Это, вероятно, лучшая отправная точка, если вы хотите создать свой собственный драйвер USB-функции.