デバイスファイルはどこから来たのですか?

デバイスファイルはどこから来たのですか?

私が読んでいるLinuxカーネルモジュールプログラミングガイドデバイスドライバの動作が少し混乱しています。

私は/proc/devicesに表示されるデフォルトのデバイスドライバに沿って作成しました。これは素晴らしいです。ガイドによると、Linuxのドライバと対話するために、ユーザースペースプログラムは/ dev /にあるデバイスのデバイスファイルと対話できます。しかし、今私が書いたモジュールはデバイスファイルを生成しません。新しいファイル生成を管理するには?これはmodule_initで何をすべきですか?

C ++プログラムなどのドライバと対話するデバイスファイルを作成したと仮定すると、fstreamを開いてファイルを読み書きできますか?それとも、ユーザー空間でデバイスファイルと対話するための特定のライブラリがありますか? ?

ベストアンサー1

のファイルは、主にソケットから受信してカーネルからイベントを受信する/devプロセスによって生成されます(参考文献を参照)。udev新しいカーネルオブジェクト(kobject)が作成されたときに送信されるイベント。これらのオブジェクトは sysfs ファイルシステムでも表示できます。具体的には、サブツリーに名前が付けられたファイルには、そのデバイスで使用されるノードのメイン番号とマイナー番号が含まれています。例えばnetlinkNETLINK_KOBJECT_UEVENTman 7 netlink/sysdev/sys/devices

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

オンラインで説明があります第14章.pdf~のLinuxデバイスドライバ、第3版 2005年から、Linuxデバイスモデル。ちょっと昔ながらで、netlink例えば言及しません。

おすすめ記事