0

カーネルをクライアントとして、カーネル モジュールとユーザー アプリケーション間の接続を確立したいと考えています。つまり、カーネルはユーザー アプリにメッセージを送信し、応答を待ち、応答を受信して​​から実行を続けます。

たとえば、カーネル内でメッセージを送信してから返信を待ちます。

// inside kernel
nlmsg_unicast();

wait_until_user_reply();

/* process reply */
/* continue execution.. */

ユーザーの中にいる間、

while (1) {
   // inside user
   recvmsg();

   /* assembly reply.. */

   sendmsg();
}

ただし、netlink プロトコルが行うことは、ユーザーがメッセージを送信するたびにコールバック関数を呼び出すことです。私が望むのは、カーネルがユーザーからの応答を待ってから、実行を継続することです。コールバック関数内で更新されるグローバル変数のビジー ループで待機していますか? 私は試しましたが、それはあまり良い解決策ではないと思います。

「返事が来るまで寝る」みたいなことはできますか?カーネルをスリープ状態にすることはできますか?

4

1 に答える 1

1

この問題は、wait_for_completion を使用して解決しました。それほど難しくなかったことがわかりました。

于 2013-12-04T07:11:57.073 に答える