Linux: как я знаю модуль, который экспортирует узел устройства?

Если/dev узла устройства и его главных/незначительных чисел, как я знаю имя модуля ядра, которое экспортировало этот узел?

23
задан Inso Reiges 26 May 2010 в 07:56
поделиться

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 содержит записи для символьных и блочных устройств системы:

# 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

24
ответ дан 29 November 2019 в 02:46
поделиться

Ответ на этот вопрос, скорее всего, разный, в зависимости от ряда факторов. Например, если вы используете 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 в качестве вывода.

2
ответ дан 29 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: