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