Puncte:1

regula udev pentru dispozitive similare

drapel ve

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

Puncte:1
drapel ng
  • 10-gest.reguli 10 este foarte devreme pentru astfel de dispozitive și această regulă doar pentru a crea legături sim.

    Încercați să utilizați numărul mare 90~99 numai dacă cunoașteți regulile pe care doriți să le depășiți (total sau parțial) sau să le influențați acțiunile mai târziu)

  • udev acceptă înlocuirea variabilelor, astfel încât să puteți folosi unele atribute în numele link-ului simbolic. În caz contrar, creați un script care verifică legăturile simbolice anterioare (sau stochează ultimul număr într-un fișier), creșteți și utilizați-l cu RUN+="" acțiune.

drapel ve
O să încerc sugestia ta și apoi revin cu un feedback. L-am setat la `10-` deoarece directorul `/etc/udev/rules.d` era gol, așa că am presupus că nu existau reguli anterioare...
user.dz avatar
drapel ng
@Mark, trebuie să știți că există mai multe locații ale regulilor și acestea sunt scanate de udev împreună, consultați https://unix.stackexchange.com/a/205738/12209. Se recomandă să păstrați regulile personalizate în `/etc/udev/rules.d` și să aveți grijă de numere și nume similare în alte foldere, astfel încât să cunoașteți ordinea și să evitați suprascrierile neintenționate. De asemenea, puteți testa folosind `udevadm test ...` pentru a vedea toate regulile încărcate și ce acțiune este declanșată.
drapel ve
Am înțeles, mulțumesc! Dar, din păcate, nici mutarea regulilor la `99-` nu a funcționat. Am schimbat regula în `KERNEL=="ttyACM*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", SYMLINK+="ttyGesture%n", GROUP="dialout ", MODE="0666"` și în acest fel este declanșat. Dar nu sunt sigur dacă este abordarea corectă.
user.dz avatar
drapel ng
@Mark Good, abordarea ta este bună atâta timp cât nu ai un dispozitiv similar care ar putea interfera. Deși este mai strict decât cel precedent, ar putea fi ca linkul simbolic să fie rescris de mai multe ori în configurarea anterioară!
drapel ve
Există vreo modalitate de a afișa aceste rescrieri? Ar fi util pentru depanare
user.dz avatar
drapel ng
@Mark o modalitate este de a adăuga script de înregistrare cu `RUN+=""` o alta este de a folosi `udevadm trigger ...` și `udevadm monitor -u` . Am reluat odată ce astfel de indicii în https://unix.stackexchange.com/a/207712/12209, obișnuiam să „recupereze” o linie într-un fișier jurnal de fiecare dată când regula este declanșată și înregistram numele și/sau calea nodului.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.