Score:1

กฎ udev สำหรับอุปกรณ์ที่คล้ายกัน

ธง ve

ฉันกำลังดิ้นรนในการสร้างกฎ udev สำหรับอุปกรณ์ที่คล้ายกัน (พอร์ต USB อนุกรม) นี่คือผลลัพธ์ของรายละเอียดจากหนึ่งในนั้น:

ข้อมูล $ udevadm --name=/dev/ttyACM0 --attribute-walk 

ข้อมูล Udevadm เริ่มต้นด้วยอุปกรณ์ที่ระบุโดย devpath จากนั้น
เดินขึ้นห่วงโซ่ของอุปกรณ์หลัก มันพิมพ์สำหรับทุกอุปกรณ์
พบแอตทริบิวต์ที่เป็นไปได้ทั้งหมดในรูปแบบคีย์กฎ udev
กฎการจับคู่สามารถประกอบขึ้นจากคุณสมบัติของอุปกรณ์
และแอตทริบิวต์จากอุปกรณ์หลักเครื่องเดียว

  กำลังดูอุปกรณ์ '/devices/pci0000:00/0000:00:15.0/usb1/1-3/1-3:1.0/tty/ttyACM0':
    เคอร์เนล = "ttyACM0"
    ระบบย่อย = "tty"
    คนขับ==""

  ดูที่อุปกรณ์หลัก '/devices/pci0000:00/0000:00:15.0/usb1/1-3/1-3:1.0':
    เมล็ด = "1-3:1.0"
    ระบบย่อย = "usb"
    ไดรเวอร์ = "cdc_acm"
    ATTRS{iad_bFunctionClass}=="02"
    ATTRS{iad_bInterfaceCount}=="02"
    ATTRS{bการตั้งค่าสำรอง}==" 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"

  ดูที่อุปกรณ์หลัก '/devices/pci0000:00/0000:00:15.0/usb1/1-3':
    เมล็ด = "1-3"
    ระบบย่อย = "usb"
    ไดรเวอร์ = "usb"
    ATTRS{maxchild}=="0"
    ATTRS{บัสนัม}=="1"
    ATTRS{speed}=="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}=="เอฟ"
    ATTRS{tx_lanes}=="1"
    ATTRS{เวอร์ชัน}==" 2.00"
    ATTRS{ผู้ผลิต}=="Arduino"
    ATTRS{ltm_capable}=="ไม่"
    ATTRS{removable}=="ไม่ทราบ"
    ATTRS{product}=="นาโน 33 BLE"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{idProduct}=="805a"
    ATTRS{bNumการกำหนดค่า}=="1"
    ATTRS{authorized}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{ซีเรียล}=="F594686789F67DE5"
    ATTRS{bcdDevice}=="0101"
    ATTRS{การกำหนดค่า}==""
    ATTRS{urbnum}=="13"
    ATTRS{bmAttributes}=="c0"

  ดูที่อุปกรณ์หลัก '/devices/pci0000:00/0000:00:15.0/usb1':
    เมล็ด = "usb1"
    ระบบย่อย = "usb"
    ไดรเวอร์ = "usb"
    ATTRS{bDeviceClass}=="09"
    ATTRS{maxchild}=="8"
    ATTRS{ltm_capable}=="ไม่"
    ATTRS{urbnum}=="85"
    ATTRS{ผู้ผลิต}=="Linux 5.11.0-38-generic xhci-hcd"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{product}=="xHCI โฮสต์คอนโทรลเลอร์"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{devpath}=="0"
    ATTRS{devnum}=="1"
    ATTRS{rx_lanes}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{authorized_default}=="1"
    ATTRS{speed}=="480"
    ATTRS{บัสนัม}=="1"
    ATTRS{เวอร์ชัน}==" 2.00"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{idProduct}=="0002"
    ATTRS{authorized}=="1"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{serial}=="0000:00:15.0"
    ATTRS{การกำหนดค่า}==""
    ATTRS{removable}=="ไม่ทราบ"
    ATTRS{bNumการกำหนดค่า}=="1"
    ATTRS{idVendor}=="1d6b"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bcdDevice}=="0511"
    ATTRS{tx_lanes}=="1"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{interface_authorized_default}=="1"

  ดูที่อุปกรณ์หลัก '/devices/pci0000:00/0000:00:15.0':
    เมล็ด = "0000:00:15.0"
    ระบบย่อย = "pci"
    ไดรเวอร์ = "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{enable}=="1"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{ผู้ขาย}=="0x8086"
    ATTRS{subsystem_device}=="0x5aa8"
    ATTRS{power_state}=="D0"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{dbc}=="ปิดใช้งาน"
    ATTRS{คลาส}=="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"

  ดูที่อุปกรณ์หลัก '/devices/pci0000:00':
    เมล็ด = "pci0000:00"
    ระบบย่อย==""
    ไดรเวอร์ ==""

ในตอนแรกฉันต้องการสร้างกฎสำหรับอุปกรณ์นี้โดยไม่ต้องใช้ อนุกรม คุณลักษณะ (ดูด้านล่าง)

ใน /etc/udev/rules.d ฉันสร้าง 10-gesture.rules ด้วยเนื้อหานี้:

SUBSYSTEM=="tty",SUBSYSTEMS="usb",DRIVERS=="cdc_acm",ATTRS{idVendor}=="2341",ATTRS{idProduct}=="805a",SYMLINK+="ท่าทาง"

แล้ว:

$ sudo chmod 0644 10-gesture.rules
$ การควบคุม udevadm --reload-กฎ && ทริกเกอร์ udevadm

แต่ไม่ได้สร้าง symlink ฉันยังพยายาม:

$ sudo udevadm ควบคุม --log-priority=debug
$journalctl -ฉ

แต่ฉันพบว่าไม่มีอะไรที่เกี่ยวข้อง

คำถามแรก: ฉันทำผิดกฎอย่างแน่นอนคุณช่วยฉันค้นหาอะไรได้บ้าง

ฉันไม่ต้องการใช้ อนุกรม เนื่องจากฉันต้องเชื่อมต่ออุปกรณ์เหล่านี้หลายตัว ฉันจะไม่ทราบชื่อซีเรียลของพวกเขา (อุปกรณ์จริงสามารถเปลี่ยนแปลงได้) ดังนั้นฉันจะใช้ประเภทของอุปกรณ์ (ระบบย่อย, ระบบย่อย, ไดรเวอร์ และ ไอดีเวนเดอร์/รหัสผลิตภัณฑ์ คุณลักษณะ).

คำถามที่สอง: วิธีสร้าง symlink ด้วยหมายเลขโปรเกรสซีฟ (เช่น "gesture1", "gesture2") สำหรับอุปกรณ์ทั้งหมดที่ตรงกับกฎ ลำดับไม่สำคัญ

อูบุนตู 20.04

Score:1
ธง ng
  • 10-gesture.rules 10 นั้นเร็วมากสำหรับอุปกรณ์ดังกล่าวและกฎนี้เพียงเพื่อสร้างซิมลิงก์

    ลองใช้ตัวเลขสูง 90~99 เฉพาะเมื่อคุณทราบกฎที่คุณต้องการลบล้าง (ทั้งหมดหรือบางส่วน) หรือมีอิทธิพลต่อการดำเนินการในภายหลัง)

  • udev รองรับการแทนที่ตัวแปร ดังนั้นคุณสามารถใช้แอตทริบิวต์บางอย่างในชื่อ symlink มิฉะนั้น ให้สร้างสคริปต์ที่ตรวจสอบ symlink ก่อนหน้า (หรือจัดเก็บหมายเลขสุดท้ายในไฟล์) เพิ่มและใช้กับ วิ่ง+="" หนังบู๊.

ve flag
ฉันจะลองใช้คำใบ้ของคุณ แล้วจะกลับมาพร้อมข้อเสนอแนะ ฉันตั้งค่าเป็น `10-` เนื่องจากไดเร็กทอรี `/etc/udev/rules.d` ว่างเปล่า ดังนั้นฉันจึงถือว่าไม่มีกฎก่อนหน้านี้...
user.dz avatar
ng flag
@Mark คุณต้องทราบว่ามีกฎหลายตำแหน่งและจะถูกสแกนโดย udev ทั้งหมด ดู https://unix.stackexchange.com/a/205738/12209 แนะนำให้เก็บกฎที่กำหนดเองของคุณใน `/etc/udev/rules.d` และระวังหมายเลขและชื่อที่คล้ายกันในโฟลเดอร์อื่นๆ เพื่อให้คุณทราบลำดับและหลีกเลี่ยงการแทนที่โดยไม่ได้ตั้งใจ นอกจากนี้ คุณยังสามารถทดสอบโดยใช้ `udevadm test ...` เพื่อดูกฎทั้งหมดที่โหลดและการดำเนินการใดที่เรียกใช้
ve flag
รับทราบ ขอบคุณ! แต่น่าเสียดายที่แม้การย้ายกฎเป็น `99-` ก็ไม่ได้ผล ฉันเปลี่ยนกฎเป็น `KERNEL=="ttyACM*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", SYMLINK+="ttyGesture%n", GROUP="dialout ", MODE="0666"` และด้วยวิธีนี้ มันถูกเรียกใช้ แต่ฉันไม่แน่ใจว่าเป็นแนวทางที่ถูกต้องหรือไม่
user.dz avatar
ng flag
@Mark Good แนวทางของคุณดีตราบใดที่คุณไม่มีอุปกรณ์ที่คล้ายกันที่อาจรบกวน แม้ว่าจะมีความเข้มงวดมากกว่าก่อนหน้านี้ แต่อาจเป็นไปได้ว่า symlink กำลังถูกเขียนใหม่หลายครั้งในการตั้งค่าก่อนหน้านี้!
ve flag
มีวิธีแสดงการเขียนซ้ำเหล่านี้หรือไม่? มันจะมีประโยชน์สำหรับการดีบัก
user.dz avatar
ng flag
@ทำเครื่องหมายวิธีหนึ่งคือเพิ่มสคริปต์การบันทึกด้วย `RUN+=""` อีกวิธีหนึ่งคือการใช้ `udevadm trigger ...` และ `udevadm monitor -u` ฉันดำเนินการต่อเมื่อคำแนะนำดังกล่าวใน https://unix.stackexchange.com/a/207712/12209 ฉันเคย `echo` บรรทัดในไฟล์บันทึกทุกครั้งที่มีการเรียกใช้กฎและบันทึกชื่อโหนดและหรือเส้นทาง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา