Czy w węźle urządzenia/dev i jego głównych/pomocniczych numerach znam nazwę modułu jądra, która wyeksportowała ten węzeł?Linux: skąd mam wiedzieć, że moduł eksportuje węzeł urządzenia?
Odpowiedz
Krótka odpowiedź:
cd /sys/dev/char/major:minor/device/driver/
ls -al | grep module
Każde urządzenie jest na ogół związane z kierowcą, a to wszystko, co „model urządzenia” chodzi. System plików sysfs
zawiera reprezentację tego urządzenia i związanego z nimi sterownika. Niestety, wygląda na to, że nie wszystkie sysf mają reprezentację węzłów urządzeń, więc to ma zastosowanie tylko wtedy, gdy katalog/sys zawiera katalog/dev. Weźmy przykład z /dev/video0
na moim pokładzie, ls -al /dev/video0
wyjście jest
crw------- 1 root root 81, 0 Jan 1 00:00 video0
Więc główny numer to 81 i minor liczba jest nurkowanie 0. Przejdźmy do sysfs:
# cd /sys
# ls
block class devices fs module
bus dev firmware kernel
Katalog sys/dev
zawiera wpis dla znaków i urządzeń blokowych systemu:
# 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
Co to do cholery łączy z obcymi imionami? Zapamiętaj główny i podrzędny numer 81 i 0? Niech ten link:
#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
Teraz widzimy, że to ukłon urządzenie, które jest, w jaki sposób urządzenie jest prezentowane w przestrzeni użytkownika, jest związany z urządzeniem jądra. To powiązanie jest tworzone za pomocą linku. Jeśli klikniemy ten link, znajdziemy się w katalogu z linkiem sterownika. Nazwa sterownika jest zazwyczaj nazwa modułu:
# 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
Więc nazwa modułu jest vpfe_capture
Odpowiedź na to pytanie jest najprawdopodobniej różna w zależności od wielu czynników. Na przykład, jeśli używasz udev, devfs, pre-devfs, itp.
Jeśli używasz Ubuntu (lub innej równie nowoczesnej dystrybucji), polecenie udevadm
może być tym, czego potrzebujesz.
% udevadm info -q path -n /dev/cdrom
/devices/pci0000:00/0000:00:1f.1/host3/target3:0:0/3:0:0:0/block/sr0
Więc moje/dev/cdrom jest przez kierowcę sr
, który rezyduje w module jądra sr_mod
. Nie wiem o poleceniu, które przyjmuje argument /dev/cdrom
i drukuje jako wynik wyjściowy sr_mod
.
Ów wielki wyjaśnienia, dzięki! –