2010-05-26 7 views

Répondre

22

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

+0

Voilà une bonne explication, merci! –

2

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.