5

カーネル モジュールで GPIO 割り込みを検出するコードがあります。現在、カーネル モジュールからの gpio 割り込みを検出したときにユーザー空間に通知するメカニズムを探しています。さまざまなオプションに対する特定の利点/欠点を持つ例/コードスニペットはありますか? ご回答いただければ幸いです。

4

3 に答える 3

1

(1) ユーザー アプリケーションに信号を送信する、または (2) file_operations->poll メソッドを実装し、poll_wait と待機キューを使用して、割り込みが発生したときにユーザー アプリケーションを起動します。

于 2013-11-08T08:24:46.133 に答える
1

カーネル API からユーザー空間スレッドにシグナルを送信できます。これにより、ノンブロッキングの実行に役立ちます。

send_sig(int sig, struct task_struct *p, int priv)

ただし、制限があります。カーネル内のユーザー スレッドの pid に注意する必要があります。/proc を介してユーザー プロセスの pid を書き込み、カーネルが pid を読み取ることで、これを克服できます。この配置により、割り込みが発生した場合、カーネルはユーザースレッドにシグナルを送信できます。プロセスが再起動または強制終了された場合は、proc を介して pid を更新する必要があります。

私があなたなら、カーネルからユーザーにデータを転送したくない場合を除いて、これを行うことをお勧めします。データ転送の要件については、Netlink またはその他のメカニズムを使用していたでしょう。

于 2013-11-07T00:01:14.500 に答える
1

GPIO キーボード ドライバー ( drivers/input/keyboard/gpio_keys.c) を見てください。これは、問題の出発点として適しています。

次に、ユーザー空間でイベントをリッスンします(たとえば、ブロック読み取り、または単にtailテストするため) 。/dev/input/yourevent

于 2013-11-06T19:09:45.377 に答える