web-dev-qa-db-ja.com

デバイスファイルはどこから来ますか?

Linuxカーネルモジュールプログラミングガイド を読んでいて、デバイスドライバがどのように機能するかについて少し混乱しています。

/ proc/devicesに表示される基本的なデバイスドライバーをフォローして作成してみました。これはすばらしいことです。ガイドによると、Linuxでドライバーとインターフェイスするために、ユーザースペースプログラムは/ dev /にあるそのデバイスのデバイスファイルと対話できます。しかし今のところ、私が書いたモジュールはデバイスファイルを生成しません。新しいファイルの生成を管理するものは何ですか?それは私がmodule_initで行うことになっていることですか?

そして、私が行ってデバイスファイルを作成したと仮定すると、ドライバー、たとえばC++プログラムと対話し、fstreamを開いてそのファイルを読み書きするだけです。または、ユーザースペースでデバイスファイルと対話するために使用される特定のライブラリがあります。 ?

4
Zephyr

/dev内のファイルは、ほとんどの場合、NETLINK_KOBJECT_UEVENTudevソケットをリッスンすることによってカーネルからイベントを受信するnetlinkプロセスによって作成されます(man 7 netlinkを参照)。 。イベントは、新しいカーネルオブジェクト(kobject)が作成されたときに送信されます。これらのオブジェクトは、/syssysfsファイルシステムにも表示されます。特に、/sys/devicesサブツリーのdevという名前のファイルは、特定のデバイスに使用するノードのメジャー番号とマイナー番号を保持します。例えば

$ cat /sys/devices/pnp0/00:05/tty/ttyS0/dev
4:64

これは、このオンラインで説明されています chapter 14 pdf ofLinux Device Drivers、Third Editionfrom 2005、Linuxデバイスモデル。少し時代遅れで、たとえばnetlinkについては触れていません。

2
meuh