9

私は Linux カーネル モジュール プログラミングの初心者です。これまで読んだ資料から、ユーザー プログラムがサービスを要求したり、Linux カーネル モジュールと通信したりする方法は 3 つあることがわかりました。

  1. /dev のデバイスファイル
  2. /proc ファイル システム内のファイル
  3. ioctl() 呼び出し

質問: ユーザー プログラムと Linux カーネル モジュール間の通信には、他にどのようなオプションがありますか?

4

5 に答える 5

10

オプション 3) は、実際にはオプション 1) のサブオプションです。これは、デバイス ファイルとioctl()対話する 1 つの方法です (通常の方法です)。read()write()

検討する価値のある他の2つの方法は次のとおりです。

  • sysfsファイルシステム。
  • ネットリンクソケット。
于 2010-07-20T13:57:24.460 に答える
6

基本的に、多くの標準IPCメカニズム— cf. http://en.wikipedia.org/wiki/Inter-process_communication —使用できます:

  1. ファイルおよびメモリマップトファイル:デバイスファイル(上記のとおり)または/ dev、procfs、sysfs、debugfs内の同様の特殊ファイル、または読み取り/書き込み、ioctl、mmapを備えた独自のカルテシアン製品のファイルシステム

  2. おそらく信号(kthreadで使用するため)

  3. ソケット:選択したプロトコルを使用:TCP、UDP(cf knfsd.、ただし簡単ではない可能性が高い)、PF_LOCAL、またはNetlink(多くのサブインターフェイス-ベースnetlink、genetlink、Connectorなど)

さらに、

 4.システムコール(ただし、モジュールからは実際には使用できません)

 5.ネットワークインターフェイス(tunに似ています)。

Netlinkの実用的な例は、ほんの数例を挙げると、たとえば次の場所にあります。

  • git://git.netfilter.org/libmnl(ユーザースペース側)
  • net / core / rtnetlink.c(ベースネットリンク)
  • net / netfilter / nf_conntrack_netlink.c(nfnetlink)
  • fs / quote / netlink.c(genetlink)
于 2010-11-21T14:06:12.107 に答える
4

これには、例を含むすべてのタイプが含まれます:)

http://people.ee.ethz.ch/~arkeller/linux/kernel_user_space_howto.html

于 2012-01-11T09:16:46.983 に答える