Комментарии 8
поэтому наше устройство — это старый добрый стандартный HID с подклассом интерфейса 0. Это значит, что ядро распознаёт его и правильно подаёт питание, но не знает, что с ним делать.
На самом деле, там вполне мог бы стоять и "нулевой" класс (он же vendor-specific, он же 0xff), и тогда коммуникация с прибором через libusb была бы еще проще. Однако, тогда под одной не в меру популярной ОС пришлось бы либо писать драйвера уровня ядра либо ставить не очень уж там прижившийся драйвер от WinUSB. А вот перекидываться произвольными данными с устройствами классами HID там - без проблем. Что и объясняет популярность такого подхода даже среди прошивалок чипов с Ali.
А можно ли считать то что описано в статье драйвером? Разве это не обычная userspace программа взаимодействующая с USB устройством?
когда я первый раз поднимал (легендартный) софтовый usb от igor plug я гораздо меньше понимал как все это работает, но вот там действительно было свой драйвер под win, хотя по сути можно было бы через hid и в результате почти к hid и пришло
Хорошая статья. Но libusb != драйвер в истинном понимании. Потому что драйвер работает на уровне ядра, а тут на уровне userspace.
КМК, тут вопрос терминологии.
Если взяли, например, i2c или spi устройство, и драйвер его переписали из ядра для запуска в userspace'е.
Перестал ли он быть драйвером?
Ну и люди с kernel.org юзерспейсные драйверы тоже, внезапно, драйверами называют.
Implementing I2C device drivers in userspace: www.kernel.org/doc/html/latest/i2c/dev-interface.html
Просто различают kernel driver и userspace driver.
Добавлю одну деталь на тему того, как в lsusb
появилось имя устройства. Ядро не знает, что это за вендор такой и девайс, lsusb
от ядра (скорее всего, через /proc
или /sys
) получает числовой vendor id и product id (благодаря тому самому обработчику нулевого подкласса hid), а у самого lsusb
есть файл с базой всех имён вендоров/устройств/етц, так что ядро не в курсе, это у lsusb актуальная инфа из общественно доступной инфы. Из мана lsusb:
/usr/share/hwdata/usb.ids A list of all known USB ID's (vendors, products, classes, subclasses and protocols).
Ну и в начале меня смутило "драйвер уже есть, но он тупой" (звучит будто есть драйвер для этого конкретного устройства, но в нем совсем минимальный функционал), это ведь просто дефолтный обработчик для нулевого подкласса hid, но вы там в общем и так это потом поясняете
Пишем простой драйвер Linux для устройства, ничего не зная о драйверах и о USB