Si un nœud de périphérique/dev et ses numéros majeurs/mineurs sont utilisés, comment puis-je connaître le nom du module du noyau qui a exporté ce nœud?Linux: comment puis-je connaître le module qui exporte un noeud de périphérique?
Répondre
Réponse courte:
cd /sys/dev/char/major:minor/device/driver/
ls -al | grep module
Chaque appareil est généralement associé à un pilote, ce qui est tout ce que le « modèle de l'appareil » est sur le point. Le système de fichiers sysfs
contient une représentation de ce périphérique et de son pilote associé. Malheureusement, il ne semble pas que tous les sysfs aient une représentation des nœuds de périphérique, donc ceci s'applique seulement si votre répertoire/sys contient un répertoire/dev. Prenons un exemple, avec /dev/video0
Sur mon conseil d'administration, ls -al /dev/video0
sortie est
crw------- 1 root root 81, 0 Jan 1 00:00 video0
donc numéro majeur est de 81 et le nombre mineur est 0. Soit Plongeons dans sysfs:
# cd /sys
# ls
block class devices fs module
bus dev firmware kernel
Le répertoire sys/dev
contient une entrée pour les périphériques char et bloc du système:
# 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
Que diable sont ces liens avec des noms étranges? Rappelez-vous le numéro majeur et mineur, 81 et 0? Suivons ce lien:
#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
Maintenant, nous pouvons voir que ce signe de tête de l'appareil, ce qui est la façon dont l'appareil est présenté à l'espace utilisateur, est associé à un dispositif de noyau. Cette association est faite à travers un lien. Si nous suivons ce lien, nous nous retrouvons dans un répertoire, avec un lien de pilote. Le nom du pilote est généralement le nom du module:
# 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
Voici le nom du module est vpfe_capture
La réponse à cette question est très probablement différente en fonction d'un certain nombre de facteurs. Par exemple, si vous utilisez udev, devfs, pre-devfs, etc.
Si vous utilisez Ubuntu (ou une autre distribution tout aussi moderne), la commande udevadm
pourrait être ce que vous voulez.
% udevadm info -q path -n /dev/cdrom
/devices/pci0000:00/0000:00:1f.1/host3/target3:0:0/3:0:0:0/block/sr0
Alors, est fourni à mon/dev/cdrom par le conducteur sr
, qui réside dans le module du noyau sr_mod
. Je ne connais pas de commande qui prend /dev/cdrom
en tant qu'argument et imprime sr_mod
en sortie.
Voilà une bonne explication, merci! –