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.
fonte
ATTRS{bInterfaceNumber}=="00"
paraENV{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}== ...
Respostas:
Para usar atributos de vários pais, você precisa usar várias regras e GOTO. Algo assim.
fonte
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):
No entanto, a primeira regra deve corresponder exclusivamente ao nó que contém o direito
idVendor
e, casoidProduct
contrário, não há garantia de que ele definaUSB_IDS
os 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. : /fonte