Обзорное руководство по стеку USB и драйверной библиотеке
В данном руководстве приводится обзор стека USB в ЗОСРВ «Нейтрино», а также общая информация по разработке драйверов устройств USB с использованием библиотеки usbdi.
Предполагается, что разработчик ознакомится со спецификацией шины Universal Serial Bus (USB) в части информации в следующих главах:
Для разработки драйверов устройств USB требуется хорошее понимание изложенных в этих главах концепций.
USB (Universal Serial Bus) – это спецификация оборудования и протокола для взаимодействия различных подключенных к шине устройств с хост-контроллером. В состав ЗОСРВ «Нейтрино» входит стек USB, который реализует протокол USB и позволяет драйверам взаимодействовать с устройствами USB.
Также в состав ЗОСРВ «Нейтрино» входит драйверная (клиентская) библиотека (usbd_*()), которая предназначена для взаимодействия драйверов устройств всо стеком. В этой архитектуре драйвер для стека является клиентом.
Стек USB реализован как отдельный процесс, который регистрирует путь /dev/io-usb/io-usb
(имя по умолчанию). Кроме того, стек включает в себя драйверы host-контроллеров USB.
Стек поддерживает следующие четыре типа промышленных стандарта для USB хост-котроллеров (HCI):
Для каждого типа хост-контроллера запускается отдельный сервер ( devu-ohci.so, devu-uhci.so, devu-ehci.so и devu-xhci.so). При этом с точки зрения устройства USB нет разницы, какой USB хост-контроллер установлен в системе.
Клиентская библиотека предоставляет функции для выделения буферов данных в общей памяти. Стек управляет этими буферами данных и предоставляет доступ к ним клиентской библиотеке. Эти выделенные буферы должны использоваться во всех передачах данных.
При таком подходе драйвер устройства USB должен работать на том же физическом узле, что и стек USB. В то же время программы, работающие с драйверами устройств, могут быть распределены по сети. Преимущество этого подхода заключается в том, что между моментом получения данных USB стеком и моментом их доставки драйверу (а также наоборот) не происходит дополнительного копирования в память.
В ЗОСРВ «Нейтрино» энумератор устройств подключается к стеку USB и ожидает подсоединения устройства к шине. Когда обнаруживается подсоединение, энумератор просматривает базу данных конфигураций, чтобы узнать, какой драйвер необходимо запустить и запускает соответствующий. В момент, когда устройство будет отсоединено от шины, энумератор завершит работу соответствующего драйвера.
Для встраиваемых систем с ограниченными ресурсами, как правило, энумератор не требуется. В этом случае драйверы запускаются индивидуально с необходимыми опциями.
Драйвер устройства USB обычно выполняет следующие операции:
![]() | В контексте драйверной библиотеки термин "канал" не имеет отношения к каналу, определенному в стандарте POSIX. В специфичной для USB терминологии "канал" является дескриптором, идентифицирующим соединение с конечной точкой устройства USB. |
Предыдущий раздел: Библиотека libusbdi