У меня возникли проблемы с пониманием того, как атрибуты устройства udev от разных родительских устройств оцениваются в правиле. Я хочу написать правило для определенного последовательного USB-устройства (модем HUAWEI) с атрибутом walk следующим образом:
$ 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"
Чтобы идентифицировать это устройство, я попытался использовать следующее правило 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"
но, к сожалению, я не могу использовать атрибут ATTRS{bInterfaceNumber}=="00"
устройства интерфейса и атрибуты ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"
физического устройства вместе. Использование любого из них работает нормально, но при совместном использовании правило больше не работает.
Я что-то упускаю из-за использования атрибутов разных родительских устройств в одном правиле? Есть ли другая причина, почему использование атрибутов от разных родителей может быть проблемой?
Кстати, дистрибутив - это Arch Linux ARM.
источник
ATTRS{bInterfaceNumber}=="00"
наENV{ID_USB_INTERFACE_NUM}=="00"
? Это должно работать. Если нет, попробуйте изменить их все на env:ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
Ответы:
Чтобы использовать атрибуты от нескольких родителей, вам нужно использовать несколько правил и GOTO. Что-то вроде этого.
источник
Вы можете использовать два правила, как описано здесь (возможно, в сочетании с другим хитрым трюком, описанным в этом сообщении в блоге, чтобы сделать его более общим / легко расходуемым):
Тем не менее, первое правило должно однозначно соответствовать узлу , содержащему право
idVendor
иidProduct
еще нет никакой гарантии , что он устанавливаетUSB_IDS
правильные значения , и второе правило в состоянии соответствовать. Я не знаю ни одного атрибута, который мог бы вообще соответствовать листовым узлам USB, хотя. : /источник