2017-02-16 29 views
0

私はドライバを書いていて、カーネルからユーザ空間に何かを送ろうとしています。これは私が知っている唯一の方法ですが、カーネルからユーザ空間に信号を送り、シグナル(...)ユーザスペースのどこかで、それをキャッチしてioctl(...)を使うと、今はカーネルが物事をユーザ空間に送る時です。カーネルからユーザー空間にリアルタイムにシグナルが送られますか?

私の質問は、信号が送信されたとき、それはユーザー空間の呼び出し信号()を待たなければならないことですか?

また、カーネルとユーザー空間の間で話す他の方法はありますか?

+1

信号の送信は非同期であると私は信じています。カーネルとユーザの間で最も簡単にやり取りする方法の1つは、その他の文字デバイス上のioctl/read/write opsです。 – yeputons

+0

どのような正確なドライバをコーディングしていますか、そしてカーネルからユーザー空間に送る正確なものは何ですか? **あなたの質問を編集してください**もっと詳細を与える* –

答えて

0

ドライバーにファイルディスクリプタ(たとえば、socket(7)またはpipe(7)や文字デバイスなど)のバイトを送信させることを検討しましたか?またはnetlink(7)を使用していますか?またはsystemdと交流しますか?

一般的なやり方は、ファイルディスクリプタを処理するユーザーの土地(起動時に開始)にいくつかのヘルパープロセスを置くことです。そのプログラムはおそらくpoll(2)のようないくつかの多重化システムコールを使用するでしょう。

ドライバが動作しているとき(信号を送信しようとしたとき)、現在のタスクはドライバを使用しているプロセスではないことに注意してください。カーネルの土地から信号を送信するのは難しいかもしれません。

関連する問題