2010-10-15 13 views
22

Ich schreibe ein USB-Laufwerk für Linux. es ist für einen Joystick. Jedes Mal, wenn Sie es einstecken, lädt Linux einen versteckten Treiber. Gibt es eine Möglichkeit, Linux zu sagen, dass es meine lädt, wenn ich es einstecke? oder zumindest nicht den Standard laden?Wie kann ich einen Treiber mit einem USB-Gerät verbinden?

Ich kann die ID in der Bindung des Standardtreibers echo und echo es in Bindung meines Treibers; aber ich möchte etwas mehr automatische .. danke

+0

Was bedeutet "linux lad a hid driver"? –

+0

@Marcelo Cantos: Ich denke, er wollte schreiben "Linux lädt einen HID-Treiber." HID = Human Interface Device. –

+0

Wenn Sie vollen Zugriff auf den Quellbaum des Kernels haben, können Sie den Treiber zum 'hid_have_special_driver' Array in' drivers/hid/hid-core.c' hinzufügen. Dies führt dazu, dass 'hid-generic' das Gerät ignoriert. Ich hoffe jedoch sehr, dass es eine Lösung gibt, die ohne Änderung bestehender Module funktionieren kann und daher für zusätzliche Module geeignet wäre, die über DKMS oder ähnliches hinzugefügt werden. Leider scheint es für diesen Anwendungsfall keine 'usbhid'-Eigenart zu geben. – MvG

Antwort

10

eigenen USB-Treiber Vorrang vor usbhid

Wenn Sie Bindung an den usbhid Treiber verhindern möchten, können Sie seine HID_QUIRK_IGNORE (= 4) Einstellung verwenden. Zum Aufkleben mit dem Beispiel verwendet Karl Bielefeldt, fügen

options usbhid quirks=0x15c2:0x0043:0x04 

zu einem gewissen /etc/modprobe.d/*.conf Datei (und vielleicht Ihre initramfs neu). Das wird hid-core sagen, dieses Gerät zu ignorieren. So wird usbhid einen Blick darauf werfen, aber lassen Sie es stattdessen für einen anderen Treiber.

eigener HID-Treiber Vorrang vor hid-generic

Allerdings, wenn Ihre anderen Fahrer ein HID-Treiber ist kein USB-Treiber, dann sind Sie Notwendigkeitusbhid den Fahrer auf der USB-Ebene zu binden, und Sie Der eigene HID-Treiber muss Vorrang vor hid-generic haben. Dies ist das Problem, vor dem ich mich stelle, und für das ich noch keine Lösung gefunden habe, ohne das Gerät später zu lösen und wieder zu verbinden.

4

Here's ein Thread mit einem Fix für ein ähnliches Problem.

SYSFS{idVendor}=="15c2", SYSFS{idProduct}=="0043", MODE="0666", PROGRAM="/bin/sh -c 'echo -n $id:1.0 >/sys/bus/usb/drivers/usbhid/unbind;\ 
echo -n $id:1.1 >/sys/bus/usb/drivers/usbhid/unbind'" 
1

http://lwn.net/Articles/143397/ ist sehr ähnlich wie die oben genannte Antwort, vielleicht einige weitere Details: Um es zusammenzufassen, Sie so etwas wie die folgenden zu einer Ihrer /etc/udev/rules.d Dateien hinzufügen.

+0

Link-only-Antworten werden von StackOverflow abgeraten. Die Antwort selbst sollte die wesentlichen nützlichen Informationen enthalten. Links sind gut als Referenzen. –