나는 usbtmc 인터페이스를 갖춘 USBTMC 장치를 가지고 있습니다. 인터페이스에는 각각 "fe", "3" 및 "1" 값을 갖는 bInterfaceClass, bInterfaceSubClass 및 bInterfaceProtocol 속성이 있습니다. 문제는 속성과 일치하는 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) 장치를 연결하면 속성 목록이 표시됩니다.