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.
fuente
ATTRS{bInterfaceNumber}=="00"
aENV{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}== ...
Respuestas:
Para usar atributos de varios padres, debe usar varias reglas y GOTO. Algo como esto.
fuente
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):
Sin embargo, la primera regla tiene que coincidir únicamente con el nodo que contiene el derecho
idVendor
y, de loidProduct
contrario, no hay garantía de que se establezcaUSB_IDS
en 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. : /fuente