Atributos de vários dispositivos pai em uma regra do udev


11

Tenho problemas para entender como os atributos do dispositivo udev de diferentes dispositivos pai são avaliados em uma regra. Quero escrever uma regra para um dispositivo USB serial específico (modem HUAWEI), com um atributo walk da seguinte maneira:

$ udevadm info --attribute-walk --name=/dev/ttyUSB0

  looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="generic"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0':
    KERNELS=="1-1.3:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbserial_generic"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="02"
    ATTRS{bInterfaceProtocol}=="01"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3':
    KERNELS=="1-1.3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="1.3"
    ATTRS{idVendor}=="12d1"
    ATTRS{speed}=="480"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="5"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="500mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="0001"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="4561"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="HUAWEI"
    ATTRS{removable}=="removable"
    ATTRS{idProduct}=="1506"
    ATTRS{bDeviceClass}=="00"
    ATTRS{product}=="HUAWEI MOBILE"

Para identificar este dispositivo, tentei usar a seguinte regra do udev:

ACTION=="add", KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="00", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/usr/bin/systemctl start modem_dialer"

mas infelizmente não posso usar o atributo ATTRS{bInterfaceNumber}=="00"do dispositivo de interface e os atributos ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"do dispositivo físico juntos. O uso de um deles funciona bem, mas ao usá-los juntos, a regra não funciona mais.

Estou faltando alguma coisa em relação ao uso de atributos de diferentes dispositivos pai juntos em uma regra? Existe alguma outra razão pela qual o uso de atributos de pais diferentes pode ser um problema?

A propósito, a distribuição é o Arch Linux ARM.



Obrigado, isso explica tudo. Existe uma solução alternativa, se eu quiser identificar uma interface específica de um dispositivo USB específico?
Kassiopeia 22/05

2
E se você mudar ATTRS{bInterfaceNumber}=="00"para ENV{ID_USB_INTERFACE_NUM}=="00"? Isso deve funcionar. Se não tente mudar todos eles para env:ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
don_crissti

Respostas:


6

Para usar atributos de vários pais, você precisa usar várias regras e GOTO. Algo assim.

SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}!="00", GOTO="huawei_end"
ACTION=="add", KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/usr/bin/systemctl start modem_dialer"
LABEL="huawei_end"

1

Você pode usar duas regras, conforme descrito aqui (possivelmente combinado com outro truque interessante encontrado nesta postagem do blog para torná-lo mais genérico / facilmente descartável):

ACTION=="add", SUBSYSTEM=="usb", ENV{USB_IDS}="%s{idVendor}:%s{idProduct}"
ACTION=="add", ENV{USB_IDS}=="12d1:1506", ATTRS{bInterfaceNumber}=="00", RUN+="/usr/bin/systemctl start modem_dialer"

No entanto, a primeira regra deve corresponder exclusivamente ao nó que contém o direito idVendore, caso idProductcontrário, não há garantia de que ele defina USB_IDSos valores corretos e a segunda regra possa corresponder. No entanto, não conheço nenhum atributo que possa corresponder genericamente aos nós folha USB. : /

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.