Linux-Kernel löscht benutzerdefinierte Tastatur-Scan-Codes

16

Ich habe eine alte IBM 122-Tasten-Tastatur des Modells M, die ich für die Verwendung auf einem modernen Computer anpasse. Ich benutze einen Teensy 2.0, um die Codierung durchzuführen und die USB-Seite der Dinge zu handhaben. Ich habe die Firmware aus dem Humble Hacker-Tastaturprojekt ( https://github.com/humblehacker/keyboard ) ausgeliehen und die zusätzlichen Schlüssel in der Build-Konfiguration hinzugefügt. So weit, ist es gut.

Alle "normalen" Schlüssel funktionieren, aber der Kernel scheint die zusätzlichen Schlüssel ( F13- F24usw.) zu löschen .

Beim Ausführen /lib/udev/keymap -i input/event0werden die Scan-Codes aller normalen Tasten angezeigt, jedoch nichts für die zusätzlichen Tasten.

Wenn Sie wiresharkzur Paketerfassung über den USB-Anschluss ausführen, wird angezeigt, dass die Tastatur die Scan-Codes sendet , aber der Kernel scheint sie im Prinzip nur abzulegen.

Ich denke, dies ist etwas in den Kernel-Treibern, das einfach keine Scan-Codes liefert, die es nicht erwartet.

Ich würde denken, dass .hirgendwo in einer Datei in der Kernelquelle eine Art "Master" -Schlüsselzuordnung vorhanden ist , aber bisher war ich bei meinen Bemühungen, diese zu finden, nicht erfolgreich.

Es muss betont werden, dass ich nicht wie so viele andere vor mir nach der Zuordnung der zusätzlichen Tasten in X frage. Dies ist ein Problem auf niedriger Ebene, das anscheinend mit dem Kernel zusammenhängt. Nehmen Sie für den Moment an, dass ich X überhaupt nicht verwenden werde. Was ich brauche, ist, dass die Scan-Codes beim Ausführen /lib/udev/keymap -iangezeigt werden. Den Rest erledige ich von dort aus.

user2543941
quelle
Ich weiß, das hilft nicht weiter, aber: Warum benutzt du den Teensy? Diese Tastatur sollte mit einem geraden PS2 / USB-Adapter funktionieren.
Goldlöckchen
Die Tastatur stammt von einem alten IBM-Terminal, es wird kein PS / 2-kompatibles Protokoll verwendet.
user2543941
Beeindruckend. Es kann durchaus sein, dass der Fahrer die Veranstaltung nicht weiterleitet (siehe letzter Teil hier ). Sie könnten evteststattdessen versuchen /lib/udev/keymap -i, keine Ahnung, ob das anders herauskommt.
Goldlöckchen
1
evtest zeigt auch nichts an, wenn die zusätzlichen Schlüssel verwendet werden.
user2543941
1
Sieht so aus, als ob Ihr Projekt, wenn Sie diese Schlüssel verwenden möchten, etwas größer geworden ist, lol. Das Schwierigste beim Schreiben eines Tastaturtreibers ist das Erlernen der API, da sie sonst nicht so kompliziert aussehen. Ich habe eine Weile keine Kernel-Sachen mehr gemacht, aber dies: LDD3 ist immer noch für 3.x gültig, denke ich.
Goldlöckchen

Antworten:

1

Der Kernel sieht die seltsamen Scan-Codes und lässt sie fallen. Ich würde versuchen, diese Scan-Code-Werte zu erhalten und dann den Hardware-Datenbankindex zu aktualisieren. Kurz gesagt lautet der Plan wie folgt:

  • Holen Sie sich die Codes von Dmesg-Ausgabe - Dmesg sollte so etwas ausgeben, wenn der unbekannte Schlüsselcode gedrückt wird:

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0)
    

a0 der Codewert ist.

  • Erstellen Sie eine benutzerdefinierte Keycode-Zuordnungsdatei. Die Beispiele und die Hilfe befinden sich in der Standarddatei
    ( /usr/lib/udev/hwdb.d/60-keyboard.hwdbfür Arch kann dies in anderen Distributionen anders sein).

  • Aktualisieren Sie die Hardwaredatenbank und lösen Sie sie aus, indem Sie die folgenden Befehle ausführen:

    > udevadm hwdb --update
    > udevadm trigger /dev/input/eventXX
    

Wo eventXXentspricht Ihre Tastatur (Sie können es durch Ausführen erhalten evtest). Sie können auch neu starten, anstatt auszulösen.

Eine ausführlichere Beschreibung finden Sie im Arch-Wiki und in der Standard-Keycode-Zuordnungsdatei (oder in Ihrer Distributionsdokumentation, wenn es sich nicht um Arch handelt).

Dies ist die zuverlässige und einfache Methode, mit der das Mapping auf Kernel-Ebene so funktioniert, wie es auch immer der Anzeigeserver, DE usw. ist.

xbob
quelle