2016-11-26 5 views
0

変更/カスタムUSBキーボードドライバを書き込もうとしています。私はirqハンドラでキーの押下を期待していないという問題があります。変更されたUSBキーボードドライバがキープレスを受信して​​いません(Linux)

  1. /linux/driver/hid/usbhid/usbkbd.clinkのコピーを作り、私のキーボードに関連する唯一のベンダーIDとプロダクトIDを持っているusb_kbd_id_tableを修正:。私は何をやったか

  2. 変更されたドライバを構築しました。
  3. 修正されたドライバをsudo insmod usbkbd.koで挿入しました。
  4. usbhid:quirks=0x03eb:0x20ff:0x4/etc/default/grubを追加することで、キーボードが標準のHIDドライバに関連付けられないようにしました。

行動:キーボードを接続する際

  1. 、それは正しく私のドライバに関連付けられています。私がの文をusb_kbd_probeで追加したものが/var/log/syslogに現れたので、私はこれを知っています。デバイスに2つのインタフェースがあるため、実際には2回表示されます。
  2. 関数usb_kbd_irqはループ内で繰り返し呼び出されます。 printkもここに追加しました。私はkbd->newが常にすべてのバイトに0を持つことを確認しています。
  3. このループは急速に続き、いずれかのキーを押しても効果はありません(kbd->newは、押されたキーに関係なく、常にすべてのバイトに0)。

私はwiresharkを使用してUSBトラフィックを表示しようとしましたが、ホストとデバイスが前後していることがわかりました。私は片道交通を期待していた。 wireshark screenshot

なぜキー押しが効果がないのか混乱しています。キーが押されている場合は、kbd->newのデータが表示されませんか?

編集:https://i.stack.imgur.com/lNq4e.png

答えて

0

のデバイス情報とスクリーンショットの問題は、私は、一般的なUSBHIDドライバでデバイスを解離された方法としました。上記セット4に記載されている:

  • はUSBHID添加することによって、標準HIDドライバに関連付けられているから、キーボードを防ぐ:癖= 0x03eb:0x20ff:は、/ etc/default/GRUBに0x4のを
  • デバイスを手動でバインド解除してドライバにバインドすると、IRQがループしなくなり、実際には各キーの入力ごとに異なる入力が表示されます。私はここにある指示を使用しましたhttps://lwn.net/Articles/143397/

    関連する問題