2

カスタマイズされたアプリケーションを作成していて、Linuxカーネルで割り込みハンドラーコードを変更することを許可しています。

割り込みが発生するのを待っているユーザースレッドがあります。その割り込みが発生した場合、私が最初にやりたいことは、そのユーザースレッドを実行することです。

それを機能させる方法はありますか?

ありがとう

4

2 に答える 2

6

キャラクターデバイスを作成します (これはカーネルが行うことであり、デバイスを処理します)。そのデバイスからユーザー スレッドを読み取らせます。読み取る文字がないため、ハングします。

割り込みが発生すると、モジュールからそのデバイスに文字 (または意味のあるメッセージ) を出力します。スレッドが起動し、メッセージを読んで続行します。

ハンドラー スレッドに適切な優先順位を付けて、早期に起動できるようにします。

または、スレッドを待機させるselectsleep、シグナル (カーネル関数kill_proc_info) を送信すると、スレッドが起動します。スレッドがシグナルを処理することを確認してください。

于 2012-06-01T20:21:18.080 に答える
1

キャラクタードライバーの作成でやり過ぎをする代わりに、sysfs エントリを作成するだけで十分でした。そのsysfsエントリの読み取り/選択/ポーリングなどのブロッキング呼び出しを実行し、割り込みハンドラーからフィードすることができます。

あなたのために解決する興味深い問題は

  1. すでに実行中に別の割り込みが発生した場合はどうなりますか。
  2. 割り込みが 2 回発生したのに、一度だけ目が覚めた場合はどうなりますか。

于 2012-06-03T19:09:21.160 に答える