1

私はLinuxカーネルスペースコードです。ユーザースペースのアプリケーションが、カーネルスペースコードで関数を呼び出し、そのコールバック関数のアドレスを渡すことで、カーネルスペースコードにコールバック関数を登録できるようにしたいと思います。カーネルスペースコードは、後で実行時にコールバック関数を実行します。カーネル空間のコードは次のようになるはずです。

typedef void (*callback_func) (void);
callback_func callback;

static void registerCallBack(callback_func funct){callback = funct;}

//another kernel space method
funct();

ただし、適切なtypedefと、これが適切に機能するかどうかについては少しわかりません。誰かがこれの機能を確認したり、この分野で何かアドバイスを提供したりできますか?残りのカーネルスペースコードが終了するのを待っているため、現在これをテストすることはできません。

4

3 に答える 3

1

のような名前に変更することをおtypedef勧めしますが、あなたは問題ないように見えます。そうでない場合は、型ではなく変数のように見えます。callback_funccallback_func_t

于 2012-05-31T16:05:07.663 に答える
1

カーネルからユーザースペース関数を直接呼び出すことはできません。考えられる解決策の1つは、シグナルを使用することです。カーネルコードから、特定のプロセスにシグナルを送信できます。シグナルハンドラは、一種のコールバック関数として機能します。

于 2012-05-31T17:04:07.327 に答える
0

カーネルからユーザースペースアプリケーションを実行したいだけの場合は、その方法を詳しく説明します。

于 2012-06-01T18:02:13.287 に答える