私はVirtualBoxゲストLinuxで簡単なキーボードドライバーを書く練習をしています。問題は、私のコードが割り込みハンドラーを登録scancode
してログファイルに出力するだけだということです。そして、私はそれらの着信スキャンコードをのような上位レベルのコードに送信しませんLinux input core
。後insmod
、を使用してキャプチャされたスキャンコードを確認できますdmesg
。しかし、なぜ私の端末はまだ正しい入力を取得するのですか?端末が受信するものはありません。
私のコードは次のようになります:
static int __init init_simple_keyboard_driver(void)
{
free_irq (IRQ_1, NULL);
return request_irq (IRQ_1, my_handler, ...);
}
static irqreturn_t my_handler(int irq, void *dev_id)
{
unsigned char scancode = get_scancode_from_port_0x60();
printk(...scancode...);
}
後insmod
、カーネルログにメッセージが表示されます。
- 私の
free_irq
呼び出しはのようないくつかのメッセージを引き起こしますCan't free already freed IRQ
。(理由はわかりません...すでに解放されるべきではありません。) atkbd
運転手は、代わりに誰かが処理するように頼む人がいると不平を言いIRQ_1
ます。- これらのスキャンコードは正しく印刷できます。
- [最も奇妙なもの]アクティブなコンソールはまだ正しいキーボード入力を取得します。したがって、
rmmod
この単純なドライバーを使用して実行することができます。 - その後
rmmod
、ゲストLinuxはキーボードを受信できなくなったため、死んでしまいました。
何か考えはありますか?ありがとうございました!