1

I have read lot of research about this and I am still struggling to configure a usbtmc device using udev rules. I am running my test on Raspberry Pi OS 5.15. My udev rules /etc/udev/rules.d/99-usbtmc.rules are :

SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="F4EC", ATTRS{idProduct}=="EE3A", GROUP="usbtmc", MODE="0660"

The permissions of the device are wrong :

$ ls -l /dev/usbtmc0 
crw------- 1 root root 180, 176 Nov  7 17:38 /dev/usbtmc0

Here is the output of udevadm info:

$ udevadm info -a /dev/usbtmc0

Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device.

looking at device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/usbmisc/usbtmc0': KERNEL=="usbtmc0" SUBSYSTEM=="usbmisc" DRIVER=="" ATTR{power/control}=="auto" ATTR{power/runtime_active_time}=="0" ATTR{power/runtime_status}=="unsupported" ATTR{power/runtime_suspended_time}=="0"

looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0': KERNELS=="1-1.1:1.0" SUBSYSTEMS=="usb" DRIVERS=="usbtmc" ATTRS{authorized}=="1" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceClass}=="fe" ATTRS{bInterfaceNumber}=="00" ATTRS{bInterfaceProtocol}=="01" ATTRS{bInterfaceSubClass}=="03" ATTRS{bNumEndpoints}=="03" ATTRS{device_capabilities}=="0" ATTRS{interface_capabilities}=="0" ATTRS{supports_autosuspend}=="0" ATTRS{usb488_device_capabilities}=="15" ATTRS{usb488_interface_capabilities}=="7"

looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1': KERNELS=="1-1.1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="64" ATTRS{bMaxPower}=="2mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 1" ATTRS{bcdDevice}=="0200" ATTRS{bmAttributes}=="c0" ATTRS{busnum}=="1" ATTRS{configuration}=="" ATTRS{devnum}=="3" ATTRS{devpath}=="1.1" ATTRS{devspec}=="(null)" ATTRS{idProduct}=="ee3a" ATTRS{idVendor}=="f4ec" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="Siglent Technologies Co,. Ltd." ATTRS{maxchild}=="0" ATTRS{power/active_duration}=="803000" ATTRS{power/autosuspend}=="2" ATTRS{power/autosuspend_delay_ms}=="2000" ATTRS{power/connected_duration}=="803000" ATTRS{power/control}=="on" ATTRS{power/level}=="on" ATTRS{power/persist}=="1" ATTRS{power/runtime_active_time}=="802770" ATTRS{power/runtime_status}=="active" ATTRS{power/runtime_suspended_time}=="0" ATTRS{product}=="2569-MSO" ATTRS{quirks}=="0x0" ATTRS{removable}=="unknown" ATTRS{rx_lanes}=="1" ATTRS{serial}=="499A20103" ATTRS{speed}=="12" ATTRS{tx_lanes}=="1" ATTRS{urbnum}=="30" ATTRS{version}==" 2.00"

looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1': KERNELS=="1-1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="09" ATTRS{bDeviceProtocol}=="01" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="64" ATTRS{bMaxPower}=="100mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 1" ATTRS{bcdDevice}=="0421" ATTRS{bmAttributes}=="e0" ATTRS{busnum}=="1" ATTRS{configuration}=="" ATTRS{devnum}=="2" ATTRS{devpath}=="1" ATTRS{devspec}=="(null)" ATTRS{idProduct}=="3431" ATTRS{idVendor}=="2109" ATTRS{ltm_capable}=="no" ATTRS{maxchild}=="4" ATTRS{power/active_duration}=="803590" ATTRS{power/autosuspend}=="0" ATTRS{power/autosuspend_delay_ms}=="0" ATTRS{power/connected_duration}=="803590" ATTRS{power/control}=="auto" ATTRS{power/level}=="auto" ATTRS{power/runtime_active_time}=="803254" ATTRS{power/runtime_status}=="active" ATTRS{power/runtime_suspended_time}=="0" ATTRS{product}=="USB2.0 Hub" ATTRS{quirks}=="0x0" ATTRS{removable}=="unknown" ATTRS{rx_lanes}=="1" ATTRS{speed}=="480" ATTRS{tx_lanes}=="1" ATTRS{urbnum}=="1165" ATTRS{version}==" 2.10"

looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1': KERNELS=="usb1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{authorized_default}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="09" ATTRS{bDeviceProtocol}=="01" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="64" ATTRS{bMaxPower}=="0mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 1" ATTRS{bcdDevice}=="0515" ATTRS{bmAttributes}=="e0" ATTRS{busnum}=="1" ATTRS{configuration}=="" ATTRS{devnum}=="1" ATTRS{devpath}=="0" ATTRS{idProduct}=="0002" ATTRS{idVendor}=="1d6b" ATTRS{interface_authorized_default}=="1" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="Linux 5.15.74-v7l+ xhci-hcd" ATTRS{maxchild}=="1" ATTRS{power/active_duration}=="803760" ATTRS{power/autosuspend}=="0" ATTRS{power/autosuspend_delay_ms}=="0" ATTRS{power/connected_duration}=="803760" ATTRS{power/control}=="auto" ATTRS{power/level}=="auto" ATTRS{power/runtime_active_time}=="803751" ATTRS{power/runtime_status}=="active" ATTRS{power/runtime_suspended_time}=="0" ATTRS{product}=="xHCI Host Controller" ATTRS{quirks}=="0x0" ATTRS{removable}=="unknown" ATTRS{rx_lanes}=="1" ATTRS{serial}=="0000:01:00.0" ATTRS{speed}=="480" ATTRS{tx_lanes}=="1" ATTRS{urbnum}=="27" ATTRS{version}==" 2.00"

looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0': KERNELS=="0000:01:00.0" SUBSYSTEMS=="pci" DRIVERS=="xhci_hcd" ATTRS{ari_enabled}=="0" ATTRS{broken_parity_status}=="0" ATTRS{class}=="0x0c0330" ATTRS{consistent_dma_mask_bits}=="64" ATTRS{current_link_speed}=="5.0 GT/s PCIe" ATTRS{current_link_width}=="1" ATTRS{device}=="0x3483" ATTRS{dma_mask_bits}=="64" ATTRS{driver_override}=="(null)" ATTRS{enable}=="1" ATTRS{irq}=="78" ATTRS{local_cpulist}=="0-3" ATTRS{local_cpus}=="f" ATTRS{max_link_speed}=="5.0 GT/s PCIe" ATTRS{max_link_width}=="1" ATTRS{msi_bus}=="1" ATTRS{msi_irqs/78}=="msi" ATTRS{power/control}=="on" ATTRS{power/runtime_active_time}=="803915" ATTRS{power/runtime_status}=="active" ATTRS{power/runtime_suspended_time}=="0" ATTRS{power_state}=="D0" ATTRS{reset_method}=="pm bus" ATTRS{revision}=="0x01" ATTRS{subsystem_device}=="0x3483" ATTRS{subsystem_vendor}=="0x1106" ATTRS{vendor}=="0x1106"

looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0': KERNELS=="0000:00:00.0" SUBSYSTEMS=="pci" DRIVERS=="pcieport" ATTRS{ari_enabled}=="0" ATTRS{broken_parity_status}=="0" ATTRS{class}=="0x060400" ATTRS{consistent_dma_mask_bits}=="32" ATTRS{current_link_speed}=="5.0 GT/s PCIe" ATTRS{current_link_width}=="1" ATTRS{device}=="0x2711" ATTRS{dma_mask_bits}=="32" ATTRS{driver_override}=="(null)" ATTRS{enable}=="1" ATTRS{irq}=="77" ATTRS{local_cpulist}=="0-3" ATTRS{local_cpus}=="f" ATTRS{max_link_speed}=="5.0 GT/s PCIe" ATTRS{max_link_width}=="1" ATTRS{msi_bus}=="1" ATTRS{power/control}=="on" ATTRS{power/runtime_active_time}=="803932" ATTRS{power/runtime_status}=="active" ATTRS{power/runtime_suspended_time}=="0" ATTRS{power_state}=="D0" ATTRS{revision}=="0x10" ATTRS{secondary_bus_number}=="1" ATTRS{subordinate_bus_number}=="1" ATTRS{subsystem_device}=="0x0000" ATTRS{subsystem_vendor}=="0x0000" ATTRS{vendor}=="0x14e4"

looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS=="" ATTRS{power/control}=="auto" ATTRS{power/runtime_active_time}=="0" ATTRS{power/runtime_status}=="unsupported" ATTRS{power/runtime_suspended_time}=="0"

looking at parent device '/devices/platform/scb/fd500000.pcie': KERNELS=="fd500000.pcie" SUBSYSTEMS=="platform" DRIVERS=="brcm-pcie" ATTRS{driver_override}=="(null)" ATTRS{power/control}=="auto" ATTRS{power/runtime_active_time}=="0" ATTRS{power/runtime_status}=="unsupported" ATTRS{power/runtime_suspended_time}=="0"

looking at parent device '/devices/platform/scb': KERNELS=="scb" SUBSYSTEMS=="platform" DRIVERS=="simple-pm-bus" ATTRS{driver_override}=="(null)" ATTRS{power/control}=="auto" ATTRS{power/runtime_active_time}=="0" ATTRS{power/runtime_status}=="unsupported" ATTRS{power/runtime_suspended_time}=="0"

looking at parent device '/devices/platform': KERNELS=="platform" SUBSYSTEMS=="" DRIVERS=="" ATTRS{power/control}=="auto" ATTRS{power/runtime_active_time}=="0" ATTRS{power/runtime_status}=="unsupported" ATTRS{power/runtime_suspended_time}=="0"

And finally the output of udevadm test:

$ udevadm test /sys/bus/usb/devices/1-1/1-1.1/1-1.1:1.0/usbmisc/usbtmc0
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

Load module index Skipping empty file: /etc/systemd/network/99-default.link Skipping empty file: /etc/systemd/network/73-usb-net-by-mac.link Created link configuration context. Reading rules file: /usr/lib/udev/rules.d/10-local-rpi.rules Reading rules file: /usr/lib/udev/rules.d/15-i2c-modprobe.rules Reading rules file: /usr/lib/udev/rules.d/40-usb_modeswitch.rules Reading rules file: /usr/lib/udev/rules.d/50-firmware.rules Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules Reading rules file: /usr/lib/udev/rules.d/55-dm.rules Reading rules file: /usr/lib/udev/rules.d/56-hpmud.rules Reading rules file: /usr/lib/udev/rules.d/60-autosuspend.rules Reading rules file: /usr/lib/udev/rules.d/60-block.rules Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules Reading rules file: /usr/lib/udev/rules.d/60-crda.rules Reading rules file: /usr/lib/udev/rules.d/60-drm.rules Reading rules file: /usr/lib/udev/rules.d/60-evdev.rules Reading rules file: /usr/lib/udev/rules.d/60-fido-id.rules Reading rules file: /usr/lib/udev/rules.d/60-flashrom.rules Reading rules file: /usr/lib/udev/rules.d/60-i2c-tools.rules Reading rules file: /usr/lib/udev/rules.d/60-input-id.rules Reading rules file: /usr/lib/udev/rules.d/60-libgphoto2-6.rules Reading rules file: /usr/lib/udev/rules.d/60-libopenni2-0.rules Reading rules file: /usr/lib/udev/rules.d/60-libsane1.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-dm.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules Reading rules file: /usr/lib/udev/rules.d/60-rpi.gpio-common.rules Reading rules file: /usr/lib/udev/rules.d/60-sensor.rules Reading rules file: /usr/lib/udev/rules.d/60-serial.rules Reading rules file: /usr/lib/udev/rules.d/60-triggerhappy.rules Reading rules file: /usr/lib/udev/rules.d/61-gnome-settings-daemon-rfkill.rules Reading rules file: /usr/lib/udev/rules.d/61-mutter.rules Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules Reading rules file: /usr/lib/udev/rules.d/64-xorg-xkb.rules Reading rules file: /usr/lib/udev/rules.d/65-libwacom.rules Reading rules file: /usr/lib/udev/rules.d/69-cd-sensors.rules Reading rules file: /usr/lib/udev/rules.d/69-libmtp.rules Reading rules file: /usr/lib/udev/rules.d/70-joystick.rules Reading rules file: /usr/lib/udev/rules.d/70-microbit.rules Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules Reading rules file: /usr/lib/udev/rules.d/70-printers.rules Reading rules file: /usr/lib/udev/rules.d/70-touchpad.rules Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules Reading rules file: /usr/lib/udev/rules.d/71-ipp-usb.rules Reading rules file: /usr/lib/udev/rules.d/71-seat.rules Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules Reading rules file: /usr/lib/udev/rules.d/73-special-net-names.rules Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-broadmobi-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-cinterion-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-dell-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-dlink-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-ericsson-mbm.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-fibocom-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-foxconn-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-haier-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-huawei-net-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-longcheer-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-mtk-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-nokia-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-pcmcia-device-blacklist.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-qdl-device-blacklist.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-quectel-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-sierra.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-simtech-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-telit-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-tplink-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-ublox-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-usb-device-blacklist.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-usb-serial-adapters-greylist.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-x22x-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-zte-port-types.rules Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules Reading rules file: /usr/lib/udev/rules.d/80-debian-compat.rules Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules Reading rules file: /usr/lib/udev/rules.d/80-ifupdown.rules Reading rules file: /usr/lib/udev/rules.d/80-iio-sensor-proxy.rules Reading rules file: /usr/lib/udev/rules.d/80-libinput-device-groups.rules Reading rules file: /usr/lib/udev/rules.d/80-mm-candidate.rules Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules Reading rules file: /usr/lib/udev/rules.d/80-noobs.rules Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules Reading rules file: /usr/lib/udev/rules.d/84-nm-drivers.rules Reading rules file: /usr/lib/udev/rules.d/85-hwclock.rules Reading rules file: /usr/lib/udev/rules.d/85-nm-unmanaged.rules Reading rules file: /usr/lib/udev/rules.d/85-regulatory.rules Reading rules file: /usr/lib/udev/rules.d/90-alsa-restore.rules Reading rules file: /usr/lib/udev/rules.d/90-console-setup.rules Reading rules file: /usr/lib/udev/rules.d/90-libinput-fuzz-override.rules Reading rules file: /usr/lib/udev/rules.d/90-nm-thunderbolt.rules Reading rules file: /usr/lib/udev/rules.d/90-pi-bluetooth.rules Reading rules file: /usr/lib/udev/rules.d/90-pipewire-alsa.rules Reading rules file: /usr/lib/udev/rules.d/90-pulseaudio.rules Reading rules file: /usr/lib/udev/rules.d/91-pulseaudio-rpi.rules Reading rules file: /usr/lib/udev/rules.d/95-cd-devices.rules Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules Reading rules file: /usr/lib/udev/rules.d/95-upower-csr.rules Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules Reading rules file: /usr/lib/udev/rules.d/95-upower-hidpp.rules Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules Reading rules file: /usr/lib/udev/rules.d/96-e2scrub.rules Reading rules file: /usr/lib/udev/rules.d/97-hid2hci.rules Reading rules file: /etc/udev/rules.d/99-com.rules Reading rules file: /usr/lib/udev/rules.d/99-libsane1.rules Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules Reading rules file: /etc/udev/rules.d/99-usbtmc.rules DEVPATH=/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/usbmisc/usbtmc0 DEVNAME=/dev/usbtmc0 MAJOR=180 MINOR=176 ACTION=add SUBSYSTEM=usbmisc Unload module index Unloaded link configuration context.

Can you explain to me why i still get a root group for my device ? Also I don't understand how we know which rules apply for which device.

I found a similar case on ttyUSB here but without good result.

Thank you

1 Answers1

0

What was working for me is using this:

KERNEL=="usbtmc[0-9]", ATTRS{idVendor}=="F4EC", ATTRS{idProduct}=="EE3A", GROUP="usbtmc", MODE="0660"