/dev デバイス ノードとそのメジャー/マイナー番号がある場合、このノードをエクスポートしたカーネル モジュール名を知るにはどうすればよいですか?
2 に答える
簡潔な答え :
cd /sys/dev/char/major:minor/device/driver/
ls -al | grep module
各デバイスは一般にドライバーに関連付けられており、これが「デバイスモデル」のすべてです。sysfs
ファイルシステムには、このデバイスと関連するドライバーの表現が含まれています。残念ながら、すべての sysfs がデバイス ノードの表現を持っているわけではないようです。そのため、これは /sys ディレクトリに /dev ディレクトリが含まれている場合にのみ適用されます。例を挙げましょう。/dev/video0
私のボードでは、ls -al /dev/video0
出力は
crw------- 1 root root 81, 0 Jan 1 00:00 video0
したがって、メジャー番号は 81 で、マイナー番号は 0 です。sysfs に飛び込みましょう:
# cd /sys
# ls
block class devices fs module
bus dev firmware kernel
sys/dev
ディレクトリには、システムの char および block デバイスのエントリが含まれています。
# cd dev
# cd char
# ls
10:61 13:64 1:3 1:8 249:0 252:0 29:0 4:65 81:0 89:1
10:62 1:1 1:5 1:9 250:0 253:0 29:1 5:0 81:2
10:63 1:11 1:7 248:0 251:0 254:0 4:64 5:1 81:3
奇妙な名前のこのリンクは一体何ですか?メジャー番号とマイナー番号、81 と 0 を覚えていますか? このリンクをたどってみましょう:
#cd major:minor (ie 81:0)
#ls -al
drwxr-xr-x 2 root root 0 Jan 1 01:56 .
drwxr-xr-x 3 root root 0 Jan 1 01:56 ..
-r--r--r-- 1 root root 4096 Jan 1 01:56 dev
lrwxrwxrwx 1 root root 0 Jan 1 01:56 device -> ../../../vpfe-capture
-r--r--r-- 1 root root 4096 Jan 1 01:56 index
-r--r--r-- 1 root root 4096 Jan 1 01:56 name
lrwxrwxrwx 1 root root 0 Jan 1 01:56 subsystem -> ../../../../../class/video4linux
-rw-r--r-- 1 root root 4096 Jan 1 01:56 uevent
これで、デバイスがユーザー空間に提示される方法であるこのデバイス ノードが、カーネル デバイスに関連付けられていることがわかります。この関連付けは、リンクを通じて行われます。このリンクをたどると、ドライバーのリンクがあるディレクトリにたどり着きます。ドライバーの名前は通常、モジュールの名前です。
# ls -al
drwxr-xr-x 3 root root 0 Jan 1 01:56 .
drwxr-xr-x 25 root root 0 Jan 1 00:00 ..
lrwxrwxrwx 1 root root 0 Jan 1 01:56 driver -> ../../../bus/platform/drivers/vpfe-capture
-r--r--r-- 1 root root 4096 Jan 1 01:56 modalias
lrwxrwxrwx 1 root root 0 Jan 1 01:56 subsystem -> ../../../bus/platform
-rw-r--r-- 1 root root 4096 Jan 1 01:56 uevent
drwxr-xr-x 3 root root 0 Jan 1 01:56 video4linux
したがって、ここでのモジュールの名前は vpfe_capture です
この質問に対する答えは、多くの要因に基づいて異なる可能性があります。たとえば、udev、devfs、pre-devfs などを実行している場合。
Ubuntu (または別の同様に最新のディストリビューション) を使用している場合は、udevadm
コマンドが必要な場合があります。
% udevadm info -q path -n /dev/cdrom
/devices/pci0000:00/0000:00:1f.1/host3/target3:0:0/3:0:0:0/block/sr0
したがって、私の /dev/cdrom は、カーネル モジュールsr
に常駐するドライバーによって提供されます。引数として取り、出力として出力sr_mod
するコマンドを知りません。/dev/cdrom
sr_mod