Правило udev с {serial} для ttyUSB не работает
Я использую Ubuntu 17.10 вместе с адаптером tty-to-USB (добавлю еще в будущем), поэтому намереваюсь создать уникальный идентификатор udev для адаптера.
Я сделал lsusb:
Bus 007 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
udevadm info -a -n / dev / ttyUSB0 | grep '{serial}' | голова -n1 ведет к
ATTRS{serial}=="**0000:00:16.0**"
таким образом я сделал 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"
после управления sudo udevadm --reload-rules && sudo udevadm триггер я ожидал некоторого /dev/ttyUSB...., но ll /dev/ttyUSB* приводит к
crw-rw---- 1 root dialout 188, 0 Nov 20 18:04 /dev/ttyUSB0
ТОЛЬКО если я опускаю ATTRS{serial}, это работает.....
ЛЮБАЯ ИДЕЯ?? - поскольку добавление большего количества этих адаптеров потребует серийного номера, чтобы различать адаптеры...
Привет! поскольку мне не очень понятно, какие уместные части: я добавляю полный вывод...
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==""
2 ответа
Насколько я знаю, вы можете объединить информацию только одного конкретного ребенка с родителем. В вашей линии
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", ATTRS{serial}=="0000:00:16.0", SYMLINK+="ttyUSBComfoAir"
вы объединяете информацию от этого ребенка
looking at parent device '/devices/pci0000:00/0000:00:16.0/usb7/7-1':
И этот ребенок
looking at parent device '/devices/pci0000:00/0000:00:16.0/usb7':`
Если вы посмотрите на первое, нет включенного ATTRS(последовательного), а если вы посмотрите на второе, то не будет включено ATTRS(idVendor/idProduct).
Правила Udev не поддерживают условия смешивания из нескольких родительских узлов.
- листовой узел:
SUBSYSTEM=="tty" - родительский режим:
ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303" - другой родительский узел:
ATTRS{serial}=="0000:00:16.0"
- листовой узел:
Это известная проблема со многими адаптерами RS232, у которых нет последовательного порта. Обычно пользователи выбирают фиксированный пост USB для определенного адаптера и устанавливают правило udeu для этого порта.
Другой вариант, некоторые микросхемы PL2303 могут быть запрограммированы с индивидуальным серийным и даже vid/pid. Инструмент предоставляется бесплатно, но ему нужен адаптер, который подает на микросхему программирующее напряжение 6,5 В (нормальный режим 5 В).