Erster Hintergrund. Ich entwickle einen Treiber für Logitech-Game-Panel-Geräte. Es ist eine Tastatur mit einem Bildschirm. Der Treiber funktioniert einwandfrei, aber standardmäßig wird das Gerät von HID gehandhabt. Um zu verhindern, dass HID das Gerät vor meinem Treiber übernimmt, kann ich es in hid-core.c auf eine schwarze Liste setzen. Dies funktioniert, ist aber nicht die beste Lösung, da ich mit mehreren Leuten zusammenarbeite und wir alle weiterhin unser HID-Modul patchen müssen, was zu einer lästigen Aufgabe wird, zumal es oft um das Neuerstellen von initramfs und dergleichen geht.
Ich habe einige Nachforschungen zu diesem Problem angestellt und diesen Post auf der Mailingliste gefunden , der mich schließlich zu diesem Artikel über LWN führte . Dies beschreibt einen Mechanismus zum Binden von Geräten an bestimmte Treiber zur Laufzeit. Das scheint genau das zu sein, was ich brauche.
Also habe ich es versucht. Ich konnte die Tastatur von HID lösen. Dies funktionierte und wie erwartet konnte ich nicht mehr darauf tippen. Aber als ich versuchte, es an unseren Treiber zu binden, erhalte ich "Fehler: kein solches Gerät" und der Vorgang schlägt fehl.
Meine Frage lautet also: Wie kann ich Kernel-Bindungs- / Unbindungsoperationen verwenden, um zu replizieren, was passiert, wenn Sie ein HID-Gerät in HID-Core auf die Blacklist setzen und Ihren eigenen Treiber bereitstellen? - das heißt - die Notwendigkeit zu ersetzen, hid-core.c die ganze Zeit zu patchen?
Die Quelle unseres Treibers ist hier: https://github.com/ali1234/lg4l