5

ネットワークを介して価値の変化を通知するアプリケーション(ユーザースペース)を開発しています。

他のカーネルモジュール(B)のパラメーターの値が変更された場合に、アプリケーション(ユーザースペース)に通知するために、カーネルモジュール(A)を開発したいと思います。

  1. カーネルモジュール(A)からユーザースペースアプリケーションに信号を送信するにはどうすればよいですか?
  2. カーネルモジュール(A)からユーザースペースアプリケーションにデータを送信するにはどうすればよいですか?
  3. カーネルモジュール(B)のカーネルモジュール(A)から関数と変数を呼び出す方法は?
4

1 に答える 1

2

モジュールAからモジュールBにアクセスする

モジュールBで、Aが使用したい変数/関数を含む通常のCヘッダーのように、そしてもちろんAでヘッダーを定義します#include

Bのソースファイルの1つに、次のように記述します。

EXPORT_SYMBOL(your_symbol);

変数/関数ごとに。

モジュールAのMakefileで、BのModule.symversへのパスを追加して、KBUILD_EXTRA_SYMBOLS依存関係の警告を取り除き、カーネルがで構成されている場合はモジュールをロードできるようにしてください。CONFIG_MODVERSIONS

ユーザーランドプロセスのシグナリング

正直なところ、これはよくわかりません。私は自分の仕事のためにLinux(RTAI)のリアルタイム拡張機能を使って個人的にコーディングしており、プレーンなLinuxには存在しないと思われる機能を持っています。これらの機能は、共有メモリ(カーネルとユーザーの間)、および共有セマフォ(ここでもカーネルとユーザーの間)などです。Linuxでそのようなものを見つけることができれば、それを使用できます。

それらが利用できない場合(私はそれらが利用できないと私は信じています)、ユーザースペースアプリケーションに信号を送る必要があるかどうかを示す単純な0/1を出力する/sysまたは/procファイルをいつでも簡単に書くことができます。次に、ユーザースペースアプリケーションはこのファイルをポーリングできます。

于 2012-04-06T09:34:06.560 に答える