Ich habe einen USB-Raketenwerfer, mit dem ich experimentieren möchte libusb
. Libusb kann die Schnittstelle jedoch nicht beanspruchen. vermutlich weil die Ausgabe von usb-devices
Listen 'usbhid' als Treiber für das Gerät.
Durch das Lesen im Internet bin ich nur zu dem Schluss gekommen, dass ich diesen Treiber vom Gerät trennen muss, damit ich ihn mit libusb verwenden kann. Ich habe jedoch keinen einzigen endgültigen Weg gefunden, nur einige verschiedene Ideen und Fehlerberichte.
Gibt es also eine Möglichkeit, den USBBID-Treiber von einem Gerät zu trennen, das für den Kernel und die mit Ubuntu 11.04 gelieferten Tools relevant ist?
BEARBEITEN:
Ich habe versucht, die Datei zu erstellen
/etc/udev/rules.d/10-usbhid.rules
und schreiben Sie Folgendes:
ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", OPTIONS=="ignore_device"
Speichern, dann neu starten. Die Datei ist noch vorhanden, scheint aber überhaupt nicht zu funktionieren.
BEARBEITEN:
Okay, ich habe es versucht:
sudo -i
echo -n "0003:0A81:0701.0006" > /sys/bus/hid/drivers/generic-usb/unbind
Wenn Sie danach zu /sys/bus/hid/devices/0003:0A81:0701.0006 navigieren, erhalten Sie:
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
Es wird kein "Treiber" -Symlink mehr wie zuvor aufgelistet, daher würde ich davon ausgehen, dass er nicht mehr gebunden ist. Alle Beweise scheinen jedoch darauf hinzudeuten, dass der Fahrer immer noch usbhid ist. Zum Beispiel ergibt USB-Geräte:
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 wiederholt -1 auf usb_claim_interface () ....
Ich denke, dass die folgende udev-Regel tun wird, was Sie wollen:
Ihr Benutzer muss Mitglied der Plugdev-Gruppe sein, um Zugriff zu erhalten. Mit dieser Regel muss nicht als Root ausgeführt werden.
quelle
Für mich (Debian Sid / Stretch) ist das udev-
$id
Attribut leer, wenn ich mein USB-Gerät anschließe. Es$kernel
enthält die erforderliche Zeichenfolge, die zum Aufheben der Bindung von USBHID übergeben werden soll.Hier sind die udev-Regeln, die ich verwende:
Ersetzen Sie den idVendor und das idProduct natürlich durch die IDs Ihres Geräts.
Zum Schreiben dieser Art von Regeln zeigt der folgende Befehl alle Attribute an, die Sie verwenden können (für das angegebene USB-Gerät):
Schließlich
$id
und$kernel
sind keine Shell-Variablen; Sie werden durch den udev-Parser ersetzt. Für eine vollständige Liste dieser Variablenman udev
und suchen Sie nach%k
.quelle