Udev- Como descubro a qual subsistema pertence um dispositivo?

16

Por exemplo, eu tenho o dispositivo / dev / sdb. Como descubro que é o subsistema do udev?

    
por Rucent88 15.04.2014 / 03:42

3 respostas

10

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

OBSERVAÇÃO: as perguntas acima consultam o banco de dados UDEV para obter informações sobre o dispositivo, info , estamos consultando todas as informações, -q all e estamos percorrendo todos os atributos em /sys referentes a este rótulo de dispositivo.

trecho

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

Exemplo

Este é o meu dispositivo /dev/sda .

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

Diferenças entre esses dois comandos

A resposta de @ sepero está mostrando informações referentes apenas ao dispositivo UDEV no nó da folha.

A resposta de Sepero

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

resposta do slm

Minha resposta mostra os atributos enquanto percorre toda a hierarquia de cadeia /sys dos dispositivos.

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

Você pode ver a diferença entre esses dois.

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

NOTA: estou rodando no Fedora 19, usando a versão 204 do udevadm :

$ udevadm --version
204
    
por 15.04.2014 / 04:05
4
$ udevadm info -q all -n /dev/sdb
    
por 15.04.2014 / 04:19
4

udevadm info fornece esse tipo de informação.

Se você deseja especificamente o subsistema:

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

Quando você está escrevendo regras do udev, o comando mais útil é

udevadm info -a -n /dev/sdb

Isso imprime as regras que você pode usar para corresponder ao dispositivo nas regras do udev. O primeiro bloco é sobre o próprio dispositivo e os blocos subseqüentes são sobre seus ancestrais na árvore de dispositivos. A única ressalva é que você não pode misturar chaves que correspondem a ancestrais diferentes. Por exemplo, dado este trecho

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"

você pode associar esse dispositivo a SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator" ou a SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci" , mas não a SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci" .

Outra maneira de obter informações para uso em regras é com

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

Isso imprime os valores da propriedade do dispositivo no formulário KEY=VALUE , que você pode usar como ENV{KEY}=="VALUE" nas regras do udev.

Se o seu dispositivo não tiver uma entrada /dev , você poderá consultá-lo com um caminho em /sys , por exemplo,

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

(não é um exemplo útil neste caso - isso é útil para dispositivos cuja categoria não é comum e não tem uma entrada em /dev ainda).

Quando você altera as regras do udev, elas são lidas automaticamente; no entanto, eles são aplicados apenas a dispositivos que são posteriormente conectados ao sistema. Para aplicar as novas regras a um dispositivo já conectado, use udevadm trigger (com opções para restringir o aplicativo a determinados dispositivos).

    
por 16.04.2014 / 03:32

Tags