Udev- ¿Cómo puedo saber a qué subsistema pertenece un dispositivo?

19

Por ejemplo, tengo dispositivo / dev / sdb. ¿Cómo descubro que es el subsistema udev?

Rucent88
fuente

Respuestas:

12
$ udevadm info -q all -a /dev/sdb

NOTA: lo anterior consulta la base de datos de UDEV para obtener información del dispositivo, infoconsultamos toda la información -q ally analizamos todos los atributos /syscorrespondientes a la etiqueta de este dispositivo.

extracto

   --attribute-walk|-a
       Print all sysfs properties of the specified device that can be used 
       in udev rules to match the specified device. It prints all devices
       along the chain, up to the root of sysfs that can be used in udev 
       rules.

Ejemplo

Aquí está mi /dev/sdadispositivo.

$ udevadm info -q all -a /dev/sda | grep parent
walks up the chain of parent devices. It prints for every device
and the attributes from one single parent device.
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2':
  looking at parent device '/devices/pci0000:00':

Diferencias entre estos 2 comandos

La respuesta de @ sepero es mostrar información relacionada con el dispositivo UDEV en el nodo hoja.

La respuesta de Sepero

$ udevadm info -q all -n /dev/sda > udevadm_info_1.txt

respuesta de slm

Mi respuesta muestra los atributos a medida que recorre toda la /sysjerarquía de dispositivos de la cadena.

$ udevadm info -q all -a /dev/sda > udevadm_info_2.txt

Puedes ver la diferencia entre estos dos.

$ diff -y udevadm_info_1.txt udevadm_info_2.txt  \
    > udevadm_info_diff.txt

NOTA: Estoy corriendo en Fedora 19, usando la versión 204 de udevadm:

$ udevadm --version
204
slm
fuente
¿Por qué este comando complejo en lugar de udevadm info -a -n /dev/sdb?
Gilles 'SO- deja de ser malvado'
@Gilles: esta descarga todos los ATTRS para todos los nodos principales.
slm
El mío también: la salida es idéntica.
Gilles 'SO- deja de ser malvado'
Gilles: ¿estás en Debian? ¿Qué versión de udevadm? Cuando ejecuto los 2 comandos anteriores, obtengo estos 2 archivos. Salida única de udevadm versus salida anidada de udevadm . Al mirar la salida, creo que el comando único solo combina toda la salida de todos los padres, mientras que mi versión muestra de qué padres se derivan los ATTRS.
slm
pastebin.com/NHg9pydA es el resultado de udevadm info -q all, no de udevadm info -a. Creo que -aes un atajo para -q all --attribute-walk. ¿O es diferente en tu versión? No recuerdo este cambio, pero entonces no he usado Fedora en años (¿pero por qué una distribución parchearía esto?).
Gilles 'SO- deja de ser malvado'
5

udevadm info proporciona este tipo de información.

Si desea específicamente el subsistema:

udevadm info -n /dev/sdb -q property | sed -n 's/SUBSYSTEM=//p'

Cuando escribe reglas de udev, el comando más útil es

udevadm info -a -n /dev/sdb

Esto imprime las reglas que puede usar para hacer coincidir el dispositivo en las reglas de udev. El primer bloque es sobre el dispositivo en sí, y los bloques siguientes son sobre sus antepasados ​​en el árbol de dispositivos. La única advertencia es que no puede mezclar claves que correspondan a antepasados ​​diferentes. Por ejemplo, dado este extracto

KERNEL=="sdb"
SUBSYSTEM=="block"
…
KERNELS=="5:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{model}=="Yoyodyne Diskinator"
…
KERNELS=="0000:00:1f.2"
SUBSYSTEMS=="pci"
DRIVERS=="ahci"

entonces puede hacer coincidir este dispositivo con SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"o con SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"pero no conSUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci" .

Otra forma de obtener información para usar en reglas es con

udevadm info -q property -n /dev/sdb --export

Esto imprime los valores de propiedad del dispositivo del formulario que puede usar comoKEY=VALUEENV{KEY}=="VALUE" en las reglas de udev.

Si su dispositivo no tiene una /deventrada, puede referirse a él con una ruta debajo /sys, por ej.

udevadm info -a -p /sys/block/sdb

(no es un ejemplo útil en este caso; esto es útil para dispositivos cuya categoría no es común y no tiene una entrada debajo de /dev ).

Cuando cambia las reglas de udev, se leen automáticamente; sin embargo, solo se aplican a dispositivos que posteriormente se conectan al sistema. Para aplicar las nuevas reglas a un dispositivo ya conectado, use udevadm trigger(con opciones para restringir la aplicación a ciertos dispositivos).

Gilles 'SO- deja de ser malvado'
fuente
4
$ udevadm info -q all -n /dev/sdb
Sepero
fuente
La diferencia entre este enfoque y el mío es que esto muestra solo el nodo hoja /syspara /dev/sdb. El otro enfoque muestra la jerarquía de árbol completa del nodo hoja junto con las ramas.
slm