Ubuntu – udev rule with {serial} for ttyUSB not working

ttyudevusb

I am using Ubuntu 17.10 along a tty-to-USB adapter (adding more in future), thus intending to create a unique udev identifyier to the adapter.

I did lsusb:

Bus 007 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n1 leads to

ATTRS{serial}=="**0000:00:16.0**"

thus I did sudo vi /etc/udev/rules.d/99-usb-serial.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{serial}=="0000:00:16.0", SYMLINK+="ttyUSBComfoAir"

after a sudo udevadm control –reload-rules && sudo udevadm trigger I expected some /dev/ttyUSB…., but a ll /dev/ttyUSB* leads to

crw-rw---- 1 root dialout 188, 0 Nov 20 18:04 /dev/ttyUSB0

ONLY if I omit ATTRS{serial} it works…..

ANY IDEA?? – as adding more of these adapters will require the serial number to differentiate the adapters…

Hi!
as I am not so clear what the relevant parts are: I am adding the complete output…

  looking at device '/devices/pci0000:00/0000:00:16.0/usb7/7-1/7-1:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:16.0/usb7/7-1/7-1:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="pl2303"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:16.0/usb7/7-1/7-1:1.0':
    KERNELS=="7-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="pl2303"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:16.0/usb7/7-1':
    KERNELS=="7-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}=="100mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0400"
    ATTRS{bmAttributes}=="80"
    ATTRS{busnum}=="7"
    ATTRS{configuration}==""
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{idProduct}=="2303"
    ATTRS{idVendor}=="067b"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Prolific Technology Inc. "
    ATTRS{maxchild}=="0"
    ATTRS{product}=="USB-Serial Controller D"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{speed}=="12"
    ATTRS{urbnum}=="258959"
    ATTRS{version}==" 1.10"

  looking at parent device '/devices/pci0000:00/0000:00:16.0/usb7':
    KERNELS=="usb7"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0413"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="7"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0001"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.13.0-16-generic ohci_hcd"
    ATTRS{maxchild}=="4"
    ATTRS{product}=="OHCI PCI host controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{serial}=="0000:00:16.0"
    ATTRS{speed}=="12"
    ATTRS{urbnum}=="36"
    ATTRS{version}==" 1.10"

  looking at parent device '/devices/pci0000:00/0000:00:16.0':
    KERNELS=="0000:00:16.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="ohci-pci"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0310"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{device}=="0x4397"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="18"
    ATTRS{local_cpulist}=="0-1"
    ATTRS{local_cpus}=="3"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{revision}=="0x00"
    ATTRS{subsystem_device}=="0x8496"
    ATTRS{subsystem_vendor}=="0x1043"
    ATTRS{vendor}=="0x1002"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Best Answer

As far as I know you can only combine the information of one particular child with the parent. In your line

SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{serial}=="0000:00:16.0", SYMLINK+="ttyUSBComfoAir"

you combine information from this child

looking at parent device '/devices/pci0000:00/0000:00:16.0/usb7/7-1':

AND this child

looking at parent device '/devices/pci0000:00/0000:00:16.0/usb7':`

If you look at the former, there's no ATTRS(serial) included and if you look at the latter there's no ATTRS(idVendor/idProduct) included.

Related Question