2016-04-11 3 views
0

У меня есть USB-HID-устройство, которое может работать в двух разных режимах. Выбор режимов основан на последовательности отправленных ему пакетов перечисления/инициализации USB.Как я могу запретить Linux инициализировать USB HID-устройство

Я использую Raspberry Pi 3, работающий на Raspbian, однако я также вижу ту же проблему, если я скомпилирую свой код для своего настольного дистрибутива Ubuntu.

Проблема заключается в том, что Linux распознает устройство USB как устройство HID и затем отправляет последовательность команд, которые он считает необходимыми для запуска устройства, и это работает правильно и запускает устройство в «режиме 1».

Однако мне нужно запустить устройство в «режиме 2», и для этого мне нужно отправить несколько другой набор команд перечисления/инициализации.

Я новичок в Linux, но очень опытен с LibUSB и LibUSBDotNet под окнами и могу получить поведение, которое я желаю под окнами.

Windows имеет аналогичное поведение с Linux, поскольку оно будет перечислять, распознавать устройство как устройство USB HID и затем инициализировать его по своему усмотрению, в результате чего устройство переходит в «Режим 1». Чтобы предотвратить появление окон, я могу создать драйвер фильтра LibUSB для устройства, который затем заменяет драйвер по умолчанию, поэтому теперь окна будут выполнять начальное перечисление, поймут, что VID и PID устройства управляются драйвером фильтра LibUSB (скорее чем драйвер HID Windows), а затем прекратить перечисление/инициализацию - это позволяет моему коду взять на себя и завершить инициализацию в «Режим 2».

Как я могу остановить Linux от полного перечисления/инициализации этого устройства (как в случае с окнами). Возможно, мне нужно что-то сделать с правилами udev или чем-то еще, но я бы понятия не имел, как я новичок в Linux.

Любая помощь очень ценится

+0

ли отсоединение от ядра и делать свою собственную магию, чтобы опоздать на смену режима 2? – dryman

ответ

1

вы имеете право, вы должны играть с правилами Udev.

Прежде всего, вы должны идентифицировать свое устройство. Найдите idProduct и idVendor вашего устройства. Вы можете использовать:

lsusb 

Затем в папке rules.d (/etc/udev/rules.d) создать новый файл с именем:

10-my-usb.rules 

В этом файле добавьте эту строку

SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="XXXX", MODE="666", GROUP+="plugdev" 

Замените XXXX значением, которое вы получаете, прежде чем

Затем перезапустить правила Udev:

sudo udevadm trigger 

Затем отключите и переподключить как правило, вы можете использовать его

Смежные вопросы