キーのキーストロークがあるときにタスクレットを実行するカーネルモジュールを構築したいと思いf5
ます。
タスクレットを初期化する方法は理解していますが、モジュールでイベントを取得するにはどうすればよいですか? 押されたかどうかrequest_irq
を調べるにはどうすればよいですか?f5
キーのキーストロークがあるときにタスクレットを実行するカーネルモジュールを構築したいと思いf5
ます。
タスクレットを初期化する方法は理解していますが、モジュールでイベントを取得するにはどうすればよいですか? 押されたかどうかrequest_irq
を調べるにはどうすればよいですか?f5
-
こんにちは、0x90 さん。
ご存じのとおり、割り込みを処理するには、2 つの部分があります。上半分は割り込みハンドラ、下半分は softirq、タスクレット、ワーク キューなどです。
したがって、タスクレットに必要なものをすべて実装したい場合でも、割り込みハンドラーの上半分が最初に実行される可能性があることを確認する必要があります。
IIRC では、タスクレットは softirq の単なる変形であり、それらは do_IRQ() で呼び出される irq_exit() で処理されます。ただし、このフローは特定のアーキテクチャに依存する場合があります。
あなたの質問については、x86 プラットフォーム上にあると思います。どのキーが押されても、常にキーボード割り込みが CPU に渡されます。押されたキーが f5 であるかどうかは、タスクレットでチェックされます。割り込みハンドラは、コードをタスクレットに渡すだけでよい場合があります。
そのため、request_irq() を呼び出して、タスクレットの前に処理される割り込みハンドラーをキーボード割り込みにアタッチする必要があります。
アップデート:
Probie が言ったように、Documentation/ ディレクトリにある notifier.txt と notifiers.txt を確認してください。
ありがとう。