私は Linux カーネル モジュール プログラミングの初心者です。これまで読んだ資料から、ユーザー プログラムがサービスを要求したり、Linux カーネル モジュールと通信したりする方法は 3 つあることがわかりました。
- /dev のデバイスファイル
- /proc ファイル システム内のファイル
- ioctl() 呼び出し
質問: ユーザー プログラムと Linux カーネル モジュール間の通信には、他にどのようなオプションがありますか?
私は Linux カーネル モジュール プログラミングの初心者です。これまで読んだ資料から、ユーザー プログラムがサービスを要求したり、Linux カーネル モジュールと通信したりする方法は 3 つあることがわかりました。
質問: ユーザー プログラムと Linux カーネル モジュール間の通信には、他にどのようなオプションがありますか?
オプション 3) は、実際にはオプション 1) のサブオプションです。これは、デバイス ファイルとioctl()対話する 1 つの方法です (通常の方法です)。read()write()
検討する価値のある他の2つの方法は次のとおりです。
sysfsファイルシステム。基本的に、多くの標準IPCメカニズム— cf. http://en.wikipedia.org/wiki/Inter-process_communication —使用できます:
ファイルおよびメモリマップトファイル:デバイスファイル(上記のとおり)または/ dev、procfs、sysfs、debugfs内の同様の特殊ファイル、または読み取り/書き込み、ioctl、mmapを備えた独自のカルテシアン製品のファイルシステム
おそらく信号(kthreadで使用するため)
ソケット:選択したプロトコルを使用:TCP、UDP(cf knfsd.、ただし簡単ではない可能性が高い)、PF_LOCAL、またはNetlink(多くのサブインターフェイス-ベースnetlink、genetlink、Connectorなど)
さらに、
4.システムコール(ただし、モジュールからは実際には使用できません)
5.ネットワークインターフェイス(tunに似ています)。
Netlinkの実用的な例は、ほんの数例を挙げると、たとえば次の場所にあります。
これには、例を含むすべてのタイプが含まれます:)
http://people.ee.ethz.ch/~arkeller/linux/kernel_user_space_howto.html