Udev- Come faccio a sapere a quale sottosistema appartiene un dispositivo?


19

Ad esempio, ho device / dev / sdb. Come faccio a sapere che è il sottosistema udev?

Risposte:


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

NOTA: quanto sopra richiede al database UDEV le informazioni sul dispositivo info, stiamo eseguendo una query per tutte le informazioni -q alle stiamo percorrendo tutti gli attributi /sysrelativi a questa etichetta del dispositivo.

estratto

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

Esempio

Ecco il mio /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':

Differenze tra questi 2 comandi

La risposta di @ sepero mostra le informazioni relative al dispositivo UDEV nel nodo foglia.

La risposta di Sepero

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

la risposta di slm

La mia risposta mostra gli attributi mentre percorre l'intera /syscatena gerarchica dei dispositivi.

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

Puoi vedere la differenza tra questi due.

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

NOTA: sto usando Fedora 19, usando la versione 204 di udevadm:

$ udevadm --version
204

Perché questo comando complesso piuttosto che udevadm info -a -n /dev/sdb?
Gilles 'SO- smetti di essere malvagio' il

@Gilles - Questo scarica tutti gli ATTR per tutti i nodi padre.
slm

Anche il mio - l'output è identico.
Gilles 'SO- smetti di essere malvagio' il

Gilles - Sei su Debian? Quale versione di udevadm? Quando eseguo i 2 comandi precedenti ottengo questi 2 file. singolo output udevadm vs. output udevadm nidificato . Nel guardare l'output penso che il singolo comando combini solo l'output di tutti i genitori mentre la mia versione mostra da quali genitori provengono gli ATTRS.
slm

pastebin.com/NHg9pydA è l'output di udevadm info -q all, non di udevadm info -a. Penso che -asia una scorciatoia per -q all --attribute-walk. O è diverso nella tua versione? Non ricordo questo cambiamento, ma non uso Fedora da anni (ma perché una distribuzione dovrebbe correggere questo?).
Gilles 'SO- smetti di essere malvagio' il

5

udevadm info fornisce questo tipo di informazioni.

Se si desidera specificamente il sottosistema:

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

Quando scrivi le regole di udev, il comando più utile è

udevadm info -a -n /dev/sdb

Ciò stampa le regole che è possibile utilizzare per abbinare il dispositivo nelle regole di udev. Il primo blocco riguarda il dispositivo stesso, mentre i blocchi successivi riguardano i suoi antenati nell'albero del dispositivo. L'unica avvertenza è che non è possibile mescolare chiavi che corrispondono a antenati diversi. Ad esempio, dato questo estratto

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"

allora puoi abbinare questo dispositivo con SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"o con SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"ma non con SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci".

Un altro modo per ottenere informazioni da utilizzare nelle regole è con

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

Stampa i valori delle proprietà del dispositivo del modulo che è possibile utilizzare come nelle regole udev.KEY=VALUEENV{KEY}=="VALUE"

Se il tuo dispositivo non ha una /devvoce, puoi fare riferimento ad essa con un percorso in /sysinvece, ad es

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

(non un esempio utile in questo caso - questo è utile per i dispositivi la cui categoria non è comune e non hanno ancora una voce /dev).

Quando cambiate le regole udev, vengono lette automaticamente; tuttavia, vengono applicati solo ai dispositivi che vengono successivamente collegati al sistema. Per applicare le nuove regole a un dispositivo già connesso, utilizzare udevadm trigger(con le opzioni per limitare l'applicazione a determinati dispositivi).


4
$ udevadm info -q all -n /dev/sdb

La differenza tra questo approccio e il mio è che questo mostra solo il nodo foglia in /sysper /dev/sdb. L'altro approccio mostra l'intera gerarchia dell'albero del nodo foglia insieme ai rami.
slm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.