Pierwsze tło. Rozwijam sterownik dla urządzeń z panelami gier Logitech. To klawiatura z ekranem. Sterownik działa dobrze, ale domyślnie urządzenie obsługuje HID. Aby zapobiec przejęciu urządzenia przez HID przed moim sterownikiem, mogę umieścić go na czarnej liście w hid-core.c. Działa to, ale nie jest to najlepsze rozwiązanie, ponieważ pracuję z kilkoma osobami i wszyscy musimy ciągle łatać nasz moduł HID, który staje się uciążliwy, szczególnie, że często wymaga przebudowania initramfs i tym podobnych.
Przeprowadziłem badania tego problemu i znalazłem ten post na liście mailowej , który ostatecznie zabrał mnie do tego artykułu na LWN . Opisuje mechanizm wiązania urządzeń z określonymi sterownikami w czasie wykonywania. To wydaje się dokładnie tym, czego potrzebuję.
Więc spróbowałem. Udało mi się odłączyć klawiaturę od HID. To zadziałało i zgodnie z oczekiwaniami nie mogłem już pisać. Ale kiedy próbowałem powiązać go z naszym sterownikiem, pojawia się „błąd: brak takiego urządzenia” i operacja kończy się niepowodzeniem.
Więc moje pytanie brzmi: jak korzystać z operacji wiązania / cofania wiązania jądra, aby replikować to, co dzieje się, gdy umieścisz na czarnej liście urządzenie HID w hid-core i dostarczysz własny sterownik? - to znaczy - aby przez cały czas zastępować potrzebę łatania hid-core.c?
Źródło naszego sterownika znajduje się tutaj: https://github.com/ali1234/lg4l