USB-шлейф в Linux - PullRequest
       28

USB-шлейф в Linux

2 голосов
/ 05 января 2010

Мне нужно написать клиент-серверное приложение, где крошечный сервер опирается на USB-гаджет и взаимодействует с клиентским приложением на хосте.

Раньше я такого не делал, но я делал веб-приложения и обычно все они разрабатываются и отлаживаются на локальной машине с использованием петлевого сетевого интерфейса lo. Возможно, это повлияло на мой образ мыслей, и я ищу способ имитации хоста USB и гаджета на моей машине, чтобы я мог полностью собрать оба конца приложения на своем ПК, прежде чем погрузиться в настоящий гаджет и получить дело идет

Это правильный путь? Я понимаю, что протокол USB является асимметричным, и нашел здесь несколько ссылок на здесь , но это наиболее естественный способ сделать это.

Если это правильный путь, как мне начать с чего-то подобного и есть ли потенциальные проблемы, о которых другие знают, на которые я мог бы наткнуться?

Обновление

Ссылки, которые я нашел от Googling ранее. Существуют модули ядра Linux (также часть моей установки Ubuntu), которые, по-видимому, способны имитировать стороны хоста и гаджета (а именно: dummy_hcd и gadgetfs соответственно). Моя идея просто иметь что-то вроде

Host application (client) on PC <-> device file 0 <-> Loopback device <-> device file 1 <-> Gadget application (server) also on PC (will be moved to gadget).

Ответы [ 3 ]

5 голосов
/ 05 января 2010

Не переусердствуйте.

Вам не нужно воображать "петлевое" устройство.

Вы правы насчет симуляции USB-хоста. Вам не нужно создавать модное петлевое USB-устройство или что-нибудь в этом роде.

  1. Создай своего клиента.

  2. Разработка «универсального» слоя интерфейса USB, который бы просто передавал запросы реальному драйверу устройства USB. Не кодируйте это пока.

  3. Кодирование слоя интерфейса USB, который будет издеваться над хостом, а не с использованием реального устройства USB. Он имеет тот же интерфейс, что и ваш общий интерфейс USB. Это правильный подкласс. Однако на самом деле он не использует драйвер устройства USB. Вместо этого он действует как веб-сервер на USB-устройстве.

    Очевидно, это не полная симуляция. Вам достаточно протестировать своего клиента. Каждая ключевая особенность, с которой клиент должен взаимодействовать, представлена ​​достаточно ответы, которые вы уверены, что клиент работает.

  4. Когда ваш клиент работает, закодируйте реальный интерфейсный слой USB, который действительно передает запросы от клиента к устройству. Это то, что вы будете использовать в производстве и делать интеграцию тесты на реальном USB-устройстве.

Ваше клиентское программное обеспечение теперь имеет две конфигурации - все обрабатываются программно:

  • Настоящий драйвер - для производства.

  • Макет драйвера - для модульного тестирования.

Это не должно быть сложнее, чем это. И теперь вы можете модульно протестировать весь ваш клиент, используя ваш фиктивный хост.

1 голос
/ 05 января 2010

Хотя то, что вы ищете, технически возможно, я бы сказал, что это сложно реализовать, так как оно предполагает создание USB-драйвера, который будет эмулировать настоящее USB-устройство.

Есть пара альтернатив, которые я могу порекомендовать. Во-первых, вы можете использовать виртуальный COM-порт для связи через USB. Программное обеспечение хоста может быть разработано и протестировано с помощью простого последовательного интерфейса. Другое решение - сначала создать часть бизнес-логики, протестировать ее с помощью программного симулятора, а затем перейти к аппаратной части.

Наконец, если вы еще этого не знаете, взгляните на библиотеку libusb .

0 голосов
/ 07 января 2010

Я бы посоветовал вам сделать устройство похожим на обычный сетевой USB-адаптер. Тогда сервер - это веб-сервер, и пользователям не нужно устанавливать программное обеспечение. тестирование на вашем компьютере будет точно таким же, как вы делали это раньше.

ИЛИ сделать его похожим на последовательное USB-устройство и поместить поверх него ссылку SLIP (это легко)

Если вам действительно нужен странный протокол, возьмите комплект разработчика USB, например, один из комплектов микросхемы USB PIC. Затем целевая система программируется и запускается с вашего главного компьютера.

...