Ich habe einige Probleme zu verstehen, wie die udev-Geräteattribute von verschiedenen übergeordneten Geräten in einer Regel ausgewertet werden. Ich möchte eine Regel für ein bestimmtes serielles USB-Gerät (HUAWEI-Modem) mit einem Attribut-Walk wie folgt schreiben:
$ 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"
Um dieses Gerät zu identifizieren, habe ich versucht, die folgende udev-Regel zu verwenden:
ACTION=="add", KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="00", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/usr/bin/systemctl start modem_dialer"
Leider kann ich das Attribut ATTRS{bInterfaceNumber}=="00"
vom Schnittstellengerät und die Attribute ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"
vom physischen Gerät nicht zusammen verwenden. Die Verwendung von beiden funktioniert einwandfrei, aber wenn Sie sie zusammen verwenden, funktioniert die Regel nicht mehr.
Fehlt mir etwas in Bezug auf die Verwendung von Attributen von verschiedenen übergeordneten Geräten in einer Regel? Gibt es einen anderen Grund, warum die Verwendung der Attribute von verschiedenen Eltern ein Problem sein könnte?
Die Distribution ist übrigens Arch Linux ARM.
quelle
ATTRS{bInterfaceNumber}=="00"
zuENV{ID_USB_INTERFACE_NUM}=="00"
? Das sollte funktionieren. Wenn nicht, versuchen Sie, alle in env zuENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
Antworten:
Um Attribute von mehreren Eltern zu verwenden, müssen Sie mehrere Regeln und GOTO verwenden. Etwas wie das.
quelle
Sie können zwei Regeln verwenden, wie hier beschrieben (möglicherweise kombiniert mit einem anderen netten Trick in diesem Blog-Beitrag , um ihn allgemeiner / leicht entbehrlich zu machen):
Allerdings hat die erste Regel eindeutig den Knoten enthält die richtige enthält ,
idVendor
undidProduct
sonst gibt es keine Garantie , dass es setztUSB_IDS
auf die richtigen Werte und die zweite Regel in der Lage , entsprechen. Mir ist jedoch kein Attribut bekannt, mit dem USB-Blattknoten generisch übereinstimmen könnten. : /quelle