У меня есть ракетница USB, с которой я хочу поэкспериментировать libusb
. Однако libusb не может претендовать на интерфейс; предположительно потому, что вывод usb-devices
списка «usbhid» в качестве драйвера для устройства.
Из чтения в интернете я пришел к выводу, что мне нужно отсоединить этот драйвер от устройства, чтобы я мог использовать его с libusb. Однако я не нашел ни одного определенного способа сделать это, только несколько разных идей и сообщений об ошибках.
Итак, есть ли способ отсоединить драйвер usbhid от устройства, которое будет иметь отношение к ядру и инструментам, поставляемым с Ubuntu 11.04?
РЕДАКТИРОВАТЬ:
Я пытался создать файл
/etc/udev/rules.d/10-usbhid.rules
и писать следующее:
ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", OPTIONS=="ignore_device"
Сохранение, затем перезагрузка. Файл все еще там, но он, похоже, не работает вообще.
РЕДАКТИРОВАТЬ:
Хорошо, я попробовал это:
sudo -i
echo -n "0003:0A81:0701.0006" > /sys/bus/hid/drivers/generic-usb/unbind
После этого перейдите к /sys/bus/hid/devices/0003:0A81:0701.0006 и ls получите:
drwxr-xr-x 2 root root 0 2011-05-29 15:46 power
lrwxrwxrwx 1 root root 0 2011-05-29 13:19 subsystem -> ../../../../../../../../../bus/hid
-rw-r--r-- 1 root root 4096 2011-05-29 13:19 uevent
Он больше не отображает символьную ссылку «драйвер», как это было раньше, поэтому я предполагаю, что она не связана с ней. Тем не менее, все свидетельства указывают на то, что водитель все еще находится в спине. Например, usb-устройства выдают:
T: Bus=02 Lev=03 Prnt=07 Port=00 Cnt=01 Dev#= 9 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0a81 ProdID=0701 Rev=00.01
S: Manufacturer=Dream Link
S: Product=USB Missile Launcher v1.0
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
libusb все еще возвращает -1 в usb_claim_interface () ....
Я думаю, что следующее правило udev будет делать то, что вы хотите:
Ваш пользователь должен быть членом группы plugdev, чтобы получить доступ. Нет необходимости запускать с правами root с этим правилом.
источник
Для меня (Debian sid / stretch)
$id
атрибут udev пуст, когда я подключаю свое USB-устройство. Это$kernel
то, что содержит необходимую строку для передачи в USBHID для отмены привязки.Вот правила udev, которые я использую:
Конечно, замените idVendor и idProduct на идентификаторы вашего устройства.
Для написания таких правил следующая команда покажет вам все атрибуты, которые вы можете использовать (для данного устройства USB):
Наконец,
$id
и$kernel
не являются переменными оболочки; их заменяет парсер udev. Для получения полного списка этих переменныхman udev
и поиска%k
.источник