変更/カスタムUSBキーボードドライバを書き込もうとしています。私はirqハンドラでキーの押下を期待していないという問題があります。変更されたUSBキーボードドライバがキープレスを受信していません(Linux)
- は
/linux/driver/hid/usbhid/usbkbd.c
linkのコピーを作り、私のキーボードに関連する唯一のベンダーIDとプロダクトIDを持っているusb_kbd_id_table
を修正:。私は何をやったか - 変更されたドライバを構築しました。
- 修正されたドライバを
sudo insmod usbkbd.ko
で挿入しました。 usbhid:quirks=0x03eb:0x20ff:0x4
に/etc/default/grub
を追加することで、キーボードが標準のHIDドライバに関連付けられないようにしました。
行動:キーボードを接続する際
- 、それは正しく私のドライバに関連付けられています。私がの文を
usb_kbd_probe
で追加したものが/var/log/syslog
に現れたので、私はこれを知っています。デバイスに2つのインタフェースがあるため、実際には2回表示されます。 - 関数
usb_kbd_irq
はループ内で繰り返し呼び出されます。printk
もここに追加しました。私はkbd->new
が常にすべてのバイトに0
を持つことを確認しています。 - このループは急速に続き、いずれかのキーを押しても効果はありません(
kbd->new
は、押されたキーに関係なく、常にすべてのバイトに0
)。
私はwiresharkを使用してUSBトラフィックを表示しようとしましたが、ホストとデバイスが前後していることがわかりました。私は片道交通を期待していた。 wireshark screenshot
なぜキー押しが効果がないのか混乱しています。キーが押されている場合は、kbd->new
のデータが表示されませんか?
編集:https://i.stack.imgur.com/lNq4e.png