11

ユーザースペースからカーネルモジュールと通信する方法は何ですか?通信とは、カーネルモジュールとユーザースペースプロセスの間で情報とコマンドを送信することを意味します。

私は現在2つの方法を知っています:

  1. 公開されたデバイスノードでopen/close / read / write/ioctl。
  2. エクスポートおよびフックされた/procファイルの読み取り/書き込み。

より具体的には、誰かが実際にハードウェアを駆動しないカーネルモジュールと通信するための最良の方法をアドバイスできますか?したがって、ioctl呼び出し専用に存在するスタブノードを/ devに散らかしてはいけませんか?ほとんどの場合、さまざまなステータス変数をチェックし、リクエストタイプタグを使用してデータのブロックを送信し、リクエストが成功したかどうかを確認する必要があります。

4

6 に答える 6

9

/sys ファイルシステム (sysfs) もあります。

sysfs は、デバイスとドライバーに関する情報をカーネル デバイス モデルからユーザー空間にエクスポートし、構成にも使用されます。

ウィキペディアより)

于 2010-05-25T10:12:33.410 に答える
9

Netlink ソケットも、そのような要件に合わせて設計されています...

こちらもご覧ください

于 2010-05-27T09:33:10.797 に答える
3

/dev デバイス ノードから読み書きすることもできます。

IMHO、 /dev にはすでにものが散らばっていて、独自のノードを追加しても大きな問題はありません。1 つのデバイス ノードに対して多数の ioctl コードを使用できることを忘れないでください。また、ioctl パラメータは参照によって渡されるため、好きなだけ大きくすることができます。

于 2010-05-25T09:56:58.077 に答える
2

3 つ目は新しいシステムコールを追加することですが、あなたが書いた 2 つが好ましいと思います。役立つかもしれないこのドキュメントを見つけましたが、このオプションはお勧めできません

別の受け入れ可能なオプションとして、メモリの共有があります。

于 2010-05-25T09:56:49.317 に答える
0

共有メモリIOCTLを使用することもできます

于 2016-12-08T06:50:01.560 に答える