24

/dev デバイス ノードとそのメジャー/マイナー番号がある場合、このノードをエクスポートしたカーネル モジュール名を知るにはどうすればよいですか?

4

2 に答える 2

26

簡潔な答え :

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 です

于 2010-05-26T13:10:28.970 に答える
4

この質問に対する答えは、多くの要因に基づいて異なる可能性があります。たとえば、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/cdromsr_mod

于 2010-05-26T08:12:01.143 に答える