Atributos de varios dispositivos principales en una regla udev


11

Tengo algunos problemas para entender cómo se evalúan los atributos del dispositivo udev de diferentes dispositivos principales en una regla. Quiero escribir una regla para un dispositivo USB serie específico (Módem HUAWEI), con una caminata de atributos de la siguiente manera:

$ 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, intenté usar la siguiente regla de 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"

pero desafortunadamente no puedo usar el atributo ATTRS{bInterfaceNumber}=="00"del dispositivo de interfaz y los atributos ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"del dispositivo físico juntos. Usar cualquiera de ellos funciona bien, pero cuando se usan juntos, la regla ya no funciona.

¿Me falta algo relacionado con el uso de atributos de diferentes dispositivos principales juntos en una regla? ¿Hay alguna otra razón por la cual usar los atributos de diferentes padres podría ser un problema?

Por cierto, la distribución es Arch Linux ARM.



Gracias, eso lo explica todo. ¿Existe una solución alternativa si quiero identificar una interfaz específica de un dispositivo USB específico?
Kassiopeia

2
¿Qué pasa si cambias ATTRS{bInterfaceNumber}=="00"a ENV{ID_USB_INTERFACE_NUM}=="00"? Eso debería funcionar. Si no, intente cambiarlos todos a env:ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
don_crissti

Respuestas:


6

Para usar atributos de varios padres, debe usar varias reglas y GOTO. Algo como esto.

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

Puede usar dos reglas como se describe aquí (posiblemente combinado con otro truco ordenado que se encuentra en esta publicación de blog para hacerlo más genérico / fácilmente prescindible):

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"

Sin embargo, la primera regla tiene que coincidir únicamente con el nodo que contiene el derecho idVendory, de lo idProductcontrario, no hay garantía de que se establezca USB_IDSen los valores correctos y la segunda regla puede coincidir. Sin embargo, no conozco ningún atributo que pueda hacer coincidir genéricamente los nodos hoja USB. : /

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.