如何编写与设备接口属性匹配的 udev 规则

如何编写与设备接口属性匹配的 udev 规则

我有一个带有 usbtmc 接口的 USBTMC 设备。该接口具有 bInterfaceClass、bInterfaceSubClass 和 bInterfaceProtocol 属性,其值分别为“fe”、“3”和“1”。问题是如何编写匹配属性的 udev 规则界面设备的。看起来匹配启动了设备级别,并且只能“向上”查看设备的父级,但不能“向下”(沿着 sysfs 树向下)查看设备的接口。

我可以编写一个基于 VID/PID 匹配的工作规则:

SUBSYSTEM=="usb", ATTR{idProduct}=="5c18", ATTR{idVendor}=="2a8d", MODE:="0660", GROUP="plugdev"

但这样的规则不起作用:

SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="fe", ATTR{bInterfaceSubClass}=="03", MODE:="0660", GROUP="plugdev"

下面显示了设备列表,并显示了在 1-1:1.0 下找到的接口的属性:

me@box:/sys/bus/usb/devices/1-1$ ls
1-1:1.0            bcdDevice            bDeviceProtocol  bMaxPacketSize0     bNumInterfaces  descriptors  devpath  idProduct    manufacturer  power    removable  serial     tx_lanes  version
authorized         bConfigurationValue  bDeviceSubClass  bMaxPower           busnum          dev          driver   idVendor     maxchild      product  remove     speed      uevent
avoid_reset_quirk  bDeviceClass         bmAttributes     bNumConfigurations  configuration   devnum       ep_00    ltm_capable  port          quirks   rx_lanes   subsystem  urbnum
me@box:/sys/bus/usb/devices/1-1$ cat 1-1\:1.0/bInterfaceClass 
fe
me@box:/sys/bus/usb/devices/1-1$ cat 1-1\:1.0/bInterfaceSubClass 
03
me@box:/sys/bus/usb/devices/1-1$ cat 1-1\:1.0/bInterfaceProtocol 
01
me@box:/sys/bus/usb/devices/1-1$

命令:udevadm info -a -n

列出可以使用的设备 ATTR 以及父 ATTRS。这些都不包括(子)接口属性。

任何帮助,将不胜感激。

答案1

看起来答案是使用 ENV 和 ID_USB_INTERFACES,例如:

SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}==":fe0301:", ...

我使用 libudev API 发现了这一点,并枚举了我的设备的属性名称/值,它看起来(部分)如下所示:

ID_BUS : usb
ID_MODEL_ID : 5c18
ID_REVISION : 0100
...
ID_USB_INTERFACES : :fe0301:

另外,以下内容将转储可以(显然)与 udev 规则中的 ENV 一起使用的设备属性:

udevadm info --query all <device node>

或者

udevadm monitor --udev --subsystem-match=usb --property

然后插入您的 (USB) 设备,您将看到一个属性列表。

相关内容