Udev- Comment savoir à quel sous-système appartient un appareil?

19

Par exemple, j'ai le périphérique / dev / sdb. Comment savoir si c'est le sous-système udev?

Rucent88
la source

Réponses:

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

REMARQUE: ce qui précède interroge la base de données UDEV pour obtenir des informations sur le périphérique info, nous recherchons toutes les informations -q allet parcourons tous les attributs sous /sysrelatifs à cette étiquette de périphérique.

extrait

   --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.

Exemple

Voici mon /dev/sdaappareil.

$ 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':

Différences entre ces 2 commandes

La réponse de @ sepero montre des informations concernant uniquement le périphérique UDEV au nœud feuille.

Réponse de Sepero

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

réponse de slm

Ma réponse montre les attributs alors qu'elle parcourt toute la /syshiérarchie de la chaîne des appareils.

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

Vous pouvez voir la différence entre ces deux.

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

REMARQUE: je fonctionne sur Fedora 19, en utilisant la version 204 de udevadm:

$ udevadm --version
204
slm
la source
Pourquoi cette commande complexe plutôt que udevadm info -a -n /dev/sdb?
Gilles 'SO- arrête d'être méchant'
@Gilles - Celui-ci vide tous les ATTRS pour tous les nœuds parents.
slm
Le mien aussi - la sortie est identique.
Gilles 'SO- arrête d'être méchant'
Gilles - Vous sur Debian? Quelle version d'udevadm? Lorsque j'exécute les 2 commandes ci-dessus, j'obtiens ces 2 fichiers. seule sortie udevadm par rapport à la sortie de udevadm imbriquée . En regardant la sortie, je pense que la commande unique combine simplement toutes les sorties de tous les parents tandis que ma version montre de quels parents les ATTRS dérivent.
slm
pastebin.com/NHg9pydA est la sortie de udevadm info -q all, pas de udevadm info -a. Je pense que -ac'est un raccourci pour -q all --attribute-walk. Ou est-ce différent sur votre version? Je ne me souviens pas de ce changement, mais je n'ai pas utilisé Fedora depuis des années (mais pourquoi une distribution corrigerait-elle cela?).
Gilles 'SO- arrête d'être méchant'
5

udevadm info fournit ce type d'informations.

Si vous souhaitez spécifiquement le sous-système:

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

Lorsque vous écrivez des règles udev, la commande la plus utile est

udevadm info -a -n /dev/sdb

Cela imprime les règles que vous pouvez utiliser pour faire correspondre le périphérique aux règles udev. Le premier bloc concerne le périphérique lui-même, et les blocs suivants concernent ses ancêtres dans l'arborescence des périphériques. La seule mise en garde est que vous ne pouvez pas mélanger des clés qui correspondent à différents ancêtres. Par exemple, étant donné cet extrait

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"

alors vous pouvez faire correspondre cet appareil avec SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"ou avec SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"mais pas avec SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci".

Une autre façon d'obtenir des informations à utiliser dans les règles est de

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

Cela imprime les valeurs de propriété de périphérique du formulaire que vous pouvez utiliser comme dans les règles udev.KEY=VALUEENV{KEY}=="VALUE"

Si votre appareil n'a pas d' /deventrée, vous pouvez vous y référer avec un chemin sous /sys, par exemple

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

(pas un exemple utile dans ce cas - c'est utile pour les appareils dont la catégorie n'est pas commune et qui n'ont pas encore d'entrée sous /dev).

Lorsque vous modifiez des règles udev, elles sont lues automatiquement; cependant, ils ne sont appliqués qu'aux périphériques qui sont ensuite connectés au système. Pour appliquer les nouvelles règles à un appareil déjà connecté, utilisez udevadm trigger(avec des options pour restreindre l'application à certains appareils).

Gilles 'SO- arrête d'être méchant'
la source
4
$ udevadm info -q all -n /dev/sdb
Sepero
la source
La différence n / b cette approche et la mienne est que cela montre juste le nœud feuille /syspour /dev/sdb. L'autre approche montre la hiérarchie arborescente entière du nœud feuille avec les branches.
slm