私は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はキーボードを受信できなくなったため、死んでしまいました。
何か考えはありますか?ありがとうございました!