2010-10-15 13 views
22

Piszę dysk urządzenia USB dla systemu Linux. to jest dla joysticka. za każdym razem, gdy się go podłącza, Linux ładuje ukryty sterownik. czy istnieje sposób, aby powiedzieć Linuksowi, żeby załadował mój, kiedy go podłączę? a przynajmniej nie załadować domyślnego?Jak powiązać sterownik z urządzeniem USB?

Mogę wywołać echo identyfikatora domyślnego sterownika i wywołać echo w powiązaniu z moim sterownikiem; ale chciałbym coś bardziej automatycznego .. dzięki

+0

Co oznacza "linux lad a hid driver"? –

+0

@Marcelo Cantos: Myślę, że chciał napisać "Linux ładuje sterownik HID". HID = Urządzenie interfejsu ludzkiego. –

+0

Jeśli masz pełny dostęp do drzewa źródłowego jądra, możesz dodać sterownik do tablicy 'hid_have_special_driver' w' drivers/hid/hid-core.c'. To spowoduje, że 'hid-generic' zignoruje urządzenie. Mam jednak wielką nadzieję, że istnieje rozwiązanie, które może działać bez modyfikowania istniejących modułów i które w związku z tym byłoby odpowiednie dla dodatkowych modułów dodawanych za pośrednictwem DKMS lub podobnych. Niestety wydaje się, że w tym przypadku nie ma dziwnego "usbhid". – MvG

Odpowiedz

10

własny sterownik USB biorąc pierwszeństwo nad usbhid

Jeśli chcesz uniknąć wiązania kierowcy usbhid, można użyć jej HID_QUIRK_IGNORE (= 4) ustawienie. Trzymać się przykładu Karl Bielefeldt używane, dodać

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

pewnym /etc/modprobe.d/*.conf pliku (a może odtworzyć initramfs). Dzięki temu hid-core zignoruje to urządzenie. Więc usbhid przyjrzy się temu, ale zamiast tego zostawi go dla innego sterownika.

własne HID kierowca biorąc pierwszeństwo nad HID-rodzajowego

Jednakże, jeśli kierowca jest HID kierowca nie sterownik USB, a następnie potrzebausbhid wiązać się kierowcy na poziomie USB, a ty potrzebujesz własnego sterownika HID, aby mieć pierwszeństwo przed hid-generic. To jest problem, przed którym stoję, i do którego jeszcze nie znalazłem rozwiązania, a nie związywania i ponownego wiązania urządzenia w późniejszym czasie.

4

Here's wątek z poprawką dla podobnego problemu. Podsumowując, należy dodać coś takiego do jednego ze swoich /etc/udev/rules.d plików:

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/ jest bardzo podobna do powyższej odpowiedzi, może trochę więcej szczegółów.

+0

Odpowiedzi dotyczące linków są odrzucane w StackOverflow. Odpowiedź powinna zawierać niezbędne informacje. Linki są dobre jako referencje. –