我有一个带有 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) 设备,您将看到一个属性列表。