linux - mp3tag - puddletag
Linux: ¿cómo puedo saber el módulo que exporta un nodo de dispositivo? (2)
La respuesta a esta pregunta es muy probablemente diferente en función de una serie de factores. Por ejemplo, si está ejecutando udev, devfs, pre-devfs, etc.
Si está utilizando Ubuntu (u otra distribución igualmente moderna), el comando udevadm
podría ser lo que usted desea.
% udevadm info -q path -n /dev/cdrom
/devices/pci0000:00/0000:00:1f.1/host3/target3:0:0/3:0:0:0/block/sr0
Entonces, mi / dev / cdrom es proporcionado por el controlador sr
, que reside en el módulo del kernel sr_mod
. No conozco un comando que tome /dev/cdrom
como argumento e imprima sr_mod
como salida.
Si tengo un nodo de dispositivo / dev y sus números mayor / menor, ¿cómo sé el nombre del módulo del núcleo que exportó este nodo?
Respuesta corta :
cd /sys/dev/char/major:minor/device/driver/
ls -al | grep module
En general, cada dispositivo está asociado con un controlador, y de eso se trata el "modelo de dispositivo". El sistema de archivos sysfs
contiene una representación de estos dispositivos y su controlador asociado. Desafortunadamente, parece que no todos los sistemas tienen una representación de los nodos del dispositivo, por lo que esto se aplica solo si su directorio / sys contiene un directorio / dev. Tomemos un ejemplo, con /dev/video0
En mi tablero, la salida de ls -al /dev/video0
es
crw------- 1 root root 81, 0 Jan 1 00:00 video0
Entonces, el número mayor es 81 y el número menor es 0. Vayamos a sysfs:
# cd /sys
# ls
block class devices fs module
bus dev firmware kernel
El directorio sys/dev
contiene una entrada para los dispositivos char y block del sistema:
# 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
¿Qué demonios son estos enlaces con nombres extraños? ¿Recuerdas el número mayor y menor, 81 y 0? Sigamos este enlace:
#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
Ahora podemos ver que este dispositivo asiente, que es la forma en que se presenta el dispositivo al espacio de usuario, está asociado con un dispositivo de kernel. Esta asociación se realiza a través de un enlace. Si seguimos este enlace, terminamos en un directorio, con un enlace de controlador. El nombre del controlador suele ser el nombre del módulo:
# 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
Así que aquí el nombre del módulo es vpfe_capture