Linuxカーネルモジュールプログラミングガイド を読んでいて、デバイスドライバがどのように機能するかについて少し混乱しています。
/ proc/devicesに表示される基本的なデバイスドライバーをフォローして作成してみました。これはすばらしいことです。ガイドによると、Linuxでドライバーとインターフェイスするために、ユーザースペースプログラムは/ dev /にあるそのデバイスのデバイスファイルと対話できます。しかし今のところ、私が書いたモジュールはデバイスファイルを生成しません。新しいファイルの生成を管理するものは何ですか?それは私がmodule_initで行うことになっていることですか?
そして、私が行ってデバイスファイルを作成したと仮定すると、ドライバー、たとえばC++プログラムと対話し、fstreamを開いてそのファイルを読み書きするだけです。または、ユーザースペースでデバイスファイルと対話するために使用される特定のライブラリがあります。 ?
/dev
内のファイルは、ほとんどの場合、NETLINK_KOBJECT_UEVENT
のudev
ソケットをリッスンすることによってカーネルからイベントを受信するnetlink
プロセスによって作成されます(man 7 netlink
を参照)。 。イベントは、新しいカーネルオブジェクト(kobject)が作成されたときに送信されます。これらのオブジェクトは、/sys
sysfsファイルシステムにも表示されます。特に、/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
については触れていません。