Como posso depurar uma regra do udev?

1

Eu quero tornar um dispositivo de áudio USB acessível para passagem para o QEMU. Eu criei uma regra do udev, mas não está funcionando. Gostaria de saber como posso depurar este problema?

SUBSYSTEM=="usb", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="8808", MODE="0666"
    
por Gearoid Murphy 24.09.2018 / 01:24

1 resposta

2

Foi assim que acabei por isolar o problema. O Udev verifica a especificação da regra em relação a uma hierarquia de atributos do dispositivo, desde o controlador host USB até o próprio dispositivo. Esses nós diferentes têm uma coleção de atributos que podem ser especificados na regra do udev.

Observe que atributos inválidos ou incorretos são silenciosamente ignorados .

Para ver esses atributos, use o seguinte comando:

udevadm info -q all -a /dev/input/by-id/my-usb-device

Você verá uma série de blocos de atributos, como os seguintes

  looking at device '/devices/...':
    KERNEL=="event3"
    SUBSYSTEM=="input"
    DRIVER==""

  looking at parent device '/devices/...':
    KERNELS=="input23"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{name}=="Speed Dragon USB Advanced Audio Device"
    ATTRS{phys}=="usb-0000:00:14.0-5/input3"
    ATTRS{properties}=="0"
    ATTRS{uniq}==""

  looking at parent device '/devices/...':
    KERNELS=="1-5"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="16"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bmAttributes}=="80"
    ATTRS{busnum}=="1"
    ATTRS{configuration}==""
    ATTRS{devnum}=="11"
    ATTRS{devpath}=="5"
    ATTRS{idProduct}=="8808"
    ATTRS{idVendor}=="0d8c"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Speed Dragon"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="USB Advanced Audio Device"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="removable"
    ATTRS{speed}=="12"
    ATTRS{urbnum}=="7861"
    ATTRS{version}==" 2.00"

Correspondendo meu dispositivo ao último bloco, percebi que minha regra do udev deveria ter especificado SUBSYSTEMS=="usb" em vez de SUBSYSTEM=="usb" . O que é uma triste descoberta para fazer: (

Quando a regra correta for especificada:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="8808", MODE="0666"

E o Udev foi recarregado por meio de:

sudo udevadm control --reload-rules

E o dispositivo foi desconectado / conectado, as permissões corretas foram registradas.

    
por 24.09.2018 / 01:33

Tags