Mă chinui să creez reguli udev pentru unele dispozitive similare (port serial USB).
Iată rezultatul detaliului de la unul dintre ele:
$ udevadm info --name=/dev/ttyACM0 --attribute-walk
Udevadm info începe cu dispozitivul specificat de devpath și apoi
urcă pe lanțul de dispozitive părinte. Imprimă pentru fiecare dispozitiv
găsite, toate atributele posibile în formatul cheii regulilor udev.
O regulă care să se potrivească, poate fi compusă de atributele dispozitivului
și atributele de la un singur dispozitiv părinte.
Privind dispozitivul „/devices/pci0000:00/0000:00:15.0/usb1/1-3/1-3:1.0/tty/ttyACM0”:
KERNEL=="ttyACM0"
SUBSYSTEM=="tty"
DRIVER==""
Privind dispozitivul părinte „/devices/pci0000:00/0000:00:15.0/usb1/1-3/1-3:1.0”:
SĂBURI=="1-3:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="cdc_acm"
ATTRS{iad_bFunctionClass}=="02"
ATTRS{iad_bInterfaceCount}=="02"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="01"
ATTRS{iad_bFunctionSubClass}=="02"
ATTRS{iad_bFirstInterface}=="00"
ATTRS{bInterfaceSubClass}=="02"
ATTRS{authorized}="1"
ATTRS{iad_bFunctionProtocol}=="00"
ATTRS{bmCapabilities}=="6"
ATTRS{supports_autosuspend}=="1"
ATTRS{bInterfaceClass}=="02"
ATTRS{bNumEndpoints}=="01"
Privind dispozitivul părinte „/devices/pci0000:00/0000:00:15.0/usb1/1-3”:
Sâmburi=="1-3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{maxchild}=="0"
ATTRS{busnum}="1"
ATTRS{viteza}=="12"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{rx_lanes}="1"
ATTRS{bDeviceSubClass}=="02"
ATTRS{idVendor}=="2341"
ATTRS{devnum}=="6"
ATTRS{bNumInterfaces}==" 2"
ATTRS{bDeviceProtocol}=="01"
ATTRS{quirks}="0x0"
ATTRS{devpath}="3"
ATTRS{bMaxPower}=="100mA"
ATTRS{bDeviceClass}=="ef"
ATTRS{tx_lanes}="1"
ATTRS{versiune}==" 2.00"
ATTRS{producător}=="Arduino"
ATTRS{ltm_capable}=="nu"
ATTRS{removable}=="necunoscut"
ATTRS{product}=="Nano 33 BLE"
ATTRS{bConfigurationValue}=="1"
ATTRS{idProduct}=="805a"
ATTRS{bNumConfigurations}=="1"
ATTRS{authorized}="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{serial}=="F594686789F67DE5"
ATTRS{bcdDevice}=="0101"
ATTRS{configurare}=""
ATTRS{urbnum}=="13"
ATTRS{bmAttributes}=="c0"
Privind dispozitivul părinte „/devices/pci0000:00/0000:00:15.0/usb1”:
SĂBURI=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceClass}=="09"
ATTRS{maxchild}=="8"
ATTRS{ltm_capable}=="nu"
ATTRS{urbnum}=="85"
ATTRS{producător}=="Linux 5.11.0-38-generic xhci-hcd"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{quirks}="0x0"
ATTRS{product}=="xHCI Host Controller"
ATTRS{bDeviceProtocol}=="01"
ATTRS{devpath}=="0"
ATTRS{devnum}=="1"
ATTRS{rx_lanes}="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{authorized_default}=="1"
ATTRS{speed}=="480"
ATTRS{busnum}="1"
ATTRS{versiune}==" 2.00"
ATTRS{bConfigurationValue}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{idProduct}=="0002"
ATTRS{authorized}="1"
ATTRS{bMaxPower}=="0mA"
ATTRS{serial}=="0000:00:15.0"
ATTRS{configurare}=""
ATTRS{removable}=="necunoscut"
ATTRS{bNumConfigurations}=="1"
ATTRS{idVendor}=="1d6b"
ATTRS{bmAttributes}=="e0"
ATTRS{bcdDevice}=="0511"
ATTRS{tx_lanes}="1"
ATTRS{bDeviceSubClass}=="00"
ATTRS{interface_authorized_default}=="1"
privind dispozitivul părinte „/devices/pci0000:00/0000:00:15.0”:
KERNELS=="0000:00:15.0"
SUBSYSTEMS=="pci"
DRIVERS=="xhci_hcd"
ATTRS{revision}=="0x0d"
ATTRS{irq}=="126"
ATTRS{driver_override}=="(null)"
ATTRS{dma_mask_bits}=="64"
ATTRS{device}=="0x5aa8"
ATTRS{subsystem_vendor}=="0x8086"
ATTRS{activare}=="1"
ATTRS{consistent_dma_mask_bits}=="64"
ATTRS{vendor}="0x8086"
ATTRS{subsystem_device}=="0x5aa8"
ATTRS{power_state}=="D0"
ATTRS{local_cpulist}=="0-3"
ATTRS{dbc}=="dezactivat"
ATTRS{class}="0x0c0330"
ATTRS{ari_enabled}=="0"
ATTRS{local_cpus}=="f"
ATTRS{broken_parity_status}=="0"
ATTRS{numa_node}=="-1"
ATTRS{msi_bus}=="1"
ATTRS{d3cold_allowed}=="1"
privind dispozitivul părinte „/devices/pci0000:00”:
KERNELS=="pci0000:00"
SUBSISTEME==""
ȘOFERI==""
La început vreau să creez o regulă pentru acest dispozitiv, fără a utiliza serial
atribut (vezi mai jos).
În /etc/udev/rules.d
Am creat 10-gest.reguli
cu acest continut:
SUBSYSTEM=="tty",SUBSYSTEMS=="usb",DRIVERS=="cdc_acm",ATTRS{idVendor}=="2341",ATTRS{idProduct}=="805a",SYMLINK+="gesture"
atunci:
$ sudo chmod 0644 10-gesture.rules
$ udevadm control --reload-rules && udevadm trigger
dar linkul simbolic nu este creat. Am incercat si eu sa:
$ sudo udevadm control --log-priority=debug
$ journalctl -f
dar nu găsesc nimic relevant.
Prima întrebare: Cu siguranță am greșit ceva în regulă.Mă poți ajuta să aflu ce?
Nu vreau să folosesc serial
pentru că trebuie să conectez mai multe dintre aceste dispozitive. Nu le voi cunoaște numele de serie (dispozitivele reale se pot schimba, apropo), așa că m-aș baza pe tipul de dispozitiv (SUBSISTEMUL
, SUBSISTEME
, ȘOFERI
și idVendor
/idProduct
atribute).
A doua întrebare: cum se creează un link simbolic cu un număr progresiv (adică „gesture1”, „gesture2”) pentru toate dispozitivele care se potrivesc cu regula? Ordinea nu este importantă.
Ubuntu 20.04