J'ai du mal à comprendre comment les attributs de périphérique udev de différents périphériques parents sont évalués dans une règle. Je veux écrire une règle pour un périphérique USB série spécifique (modem HUAWEI), avec une promenade d'attribut comme suit:
$ 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"
Afin d'identifier cet appareil, j'ai essayé d'utiliser la règle udev suivante:
ACTION=="add", KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="00", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/usr/bin/systemctl start modem_dialer"
mais malheureusement, je ne peux pas utiliser l'attribut ATTRS{bInterfaceNumber}=="00"
du périphérique d'interface et les attributs ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"
du périphérique physique ensemble. L'utilisation de l'un d'eux fonctionne bien, mais lorsque vous les utilisez ensemble, la règle ne fonctionne plus.
Suis-je en train de manquer quoi que ce soit concernant l'utilisation des attributs de différents périphériques parents ensemble dans une seule règle? Y a-t-il une autre raison pour laquelle l'utilisation des attributs de différents parents pourrait être un problème?
À propos, la distribution est Arch Linux ARM.
la source
ATTRS{bInterfaceNumber}=="00"
pourENV{ID_USB_INTERFACE_NUM}=="00"
? Cela devrait fonctionner. Sinon, essayez de les changer tous en env:ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
Réponses:
Pour utiliser les attributs de plusieurs parents, vous devez utiliser plusieurs règles et GOTO. Quelque chose comme ça.
la source
Vous pouvez utiliser deux règles décrites ici (éventuellement combinées avec une autre astuce intéressante trouvée dans ce billet de blog pour la rendre plus générique / facilement utilisable):
Cependant, la première règle doit correspondre de façon unique au nœud contenant le droit
idVendor
etidProduct
sinon il n'y a aucune garantie qu'elle définitUSB_IDS
les valeurs correctes et la deuxième règle peut correspondre. Je ne suis au courant d'aucun attribut qui pourrait correspondre de manière générique aux nœuds terminaux USB. : /la source