Kernel Linux menjatuhkan kode pindai keyboard khusus

16

Saya memiliki keyboard model M kunci IBM 122 vintage yang saya beradaptasi untuk digunakan pada komputer modern. Saya menggunakan Teensy 2.0 untuk melakukan pengodean dan untuk menangani sisi USB. Saya meminjam firmware dari proyek keyboard Humble Hacker ( https://github.com/humblehacker/keyboard ) dan saya menambahkan kunci tambahan di build config. Sejauh ini baik.

Semua kunci "biasa" bekerja, tetapi kernel tampaknya menjatuhkan kunci tambahan ( F13-F24 , dll.).

Lari /lib/udev/keymap -i input/event0 menunjukkan kode pindai semua kunci normal, tetapi tidak ada untuk kunci tambahan.

Berjalan wiresharkuntuk menangkap paket port USB menunjukkan bahwa keyboard sedang mengirim kode pindai, tetapi sepertinya kernel hanya menjatuhkannya pada prinsipnya.

Saya merasa ini adalah sesuatu di driver kernel yang tidak memberikan kode pindaian yang tidak diharapkan.

Saya akan berpikir bahwa akan ada semacam peta kunci "master" dalam beberapa .hfile di sumber kernel di suatu tempat, tetapi sejauh ini, saya belum berhasil dalam upaya saya untuk menemukannya.

Perlu ditekankan bahwa saya tidak bertanya tentang memetakan kunci tambahan dalam X, seperti banyak orang lain sebelum saya. Ini adalah masalah tingkat rendah, tampaknya terkait dengan kernel. Asumsikan untuk saat ini bahwa saya tidak akan menggunakan X sama sekali. Yang saya butuhkan adalah agar kode pindaian muncul ketika saya menjalankan /lib/udev/keymap -i, saya dapat melakukan sisanya dari sana.

pengguna2543941
sumber
Saya tahu ini tidak membantu tetapi: Mengapa Anda menggunakan Teensy? Keyboard itu harus bekerja dengan adaptor PS2 / USB lurus.
goldilocks
Keyboard berasal dari terminal IBM lama, tidak menggunakan protokol yang kompatibel dengan PS / 2.
user2543941
Wow. Bisa jadi memang pengemudi tidak melewati acara (lihat bagian terakhir di sini ). Anda bisa mencoba, evtestbukannya /lib/udev/keymap -i, apakah itu akan berbeda.
goldilocks
1
evtest juga tidak menunjukkan apa-apa saat kunci tambahan digunakan.
user2543941
1
Sepertinya mungkin jika Anda ingin menggunakan kunci-kunci itu proyek Anda menjadi sedikit lebih besar, lol. Hal yang paling sulit tentang menulis driver keyboard adalah mempelajari API, jika tidak mereka tidak terlihat begitu rumit. Saya belum melakukan hal-hal kernel dalam beberapa saat, tetapi ini: LDD3 masih berlaku untuk 3.x, saya pikir.
goldilocks

Jawaban:

1

Kernel melihat kode pindaian aneh dan menjatuhkannya. Saya akan mencoba untuk mendapatkan nilai-nilai kode pindai tersebut dan kemudian memperbarui indeks basis data perangkat keras. Jadi singkatnya rencananya adalah ini:

  • dapatkan kode dari output dmesg - dmesg akan menampilkan sesuatu seperti ini ketika kode kunci yang tidak dikenal ditekan:

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

a0 menjadi nilai kode.

  • buat file pemetaan kode kunci khusus. Contoh dan bantuan ada di file default
    ( /usr/lib/udev/hwdb.d/60-keyboard.hwdbuntuk Arch, mungkin berbeda di distribusi lain).

  • memperbarui dan memicu basis data perangkat keras dengan menjalankan perintah:

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

di mana eventXXsesuai dengan keyboard Anda (Anda bisa mendapatkannya dengan menjalankan evtest). Anda juga dapat memulai ulang alih-alih memicu.

Lihat kedalam Arch wiki dan file pemetaan kode kunci default untuk deskripsi yang lebih terperinci (atau dalam dokumentasi distribusi Anda jika bukan Arch).

Ini adalah metode yang andal dan sederhana, membuat pemetaan pada level kernel sehingga berfungsi apa pun tampilan server, DE dll.

xbob
sumber