คุณสมบัติจากอุปกรณ์แม่ต่าง ๆ ในกฎ udev


11

ฉันมีปัญหาบางอย่างในการทำความเข้าใจวิธีการประเมินคุณลักษณะของอุปกรณ์ udev จากอุปกรณ์แม่ที่แตกต่างกันในกฎ ฉันต้องการเขียนกฎสำหรับอุปกรณ์ usb แบบอนุกรมเฉพาะ (โมเด็ม HUAWEI) ด้วยคุณสมบัติการเดินดังนี้:

$ udevadm info --attribute-walk --name=/dev/ttyUSB0

  looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="generic"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0':
    KERNELS=="1-1.3:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbserial_generic"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="02"
    ATTRS{bInterfaceProtocol}=="01"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3':
    KERNELS=="1-1.3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="1.3"
    ATTRS{idVendor}=="12d1"
    ATTRS{speed}=="480"
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="5"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="500mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="0001"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="4561"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="HUAWEI"
    ATTRS{removable}=="removable"
    ATTRS{idProduct}=="1506"
    ATTRS{bDeviceClass}=="00"
    ATTRS{product}=="HUAWEI MOBILE"

เพื่อระบุอุปกรณ์นี้ฉันพยายามใช้กฎ udev ต่อไปนี้:

ACTION=="add", KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="00", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/usr/bin/systemctl start modem_dialer"

แต่น่าเสียดายที่ฉันไม่สามารถใช้คุณสมบัติATTRS{bInterfaceNumber}=="00"จากอุปกรณ์อินเตอร์เฟซและคุณลักษณะATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"จากอุปกรณ์ทางกายภาพร่วมกัน การใช้งานอย่างใดอย่างหนึ่งอาจทำงานได้ดี แต่เมื่อใช้ร่วมกันกฎจะไม่ทำงานอีกต่อไป

ฉันไม่มีสิ่งใดเกี่ยวกับการใช้คุณลักษณะจากอุปกรณ์หลักต่าง ๆ กันในกฎเดียวหรือไม่ มีเหตุผลอื่นอีกไหมทำไมการใช้คุณสมบัติจากผู้ปกครองที่แตกต่างกันอาจเป็นปัญหา?

โดยวิธีการที่ distro เป็น Arch Linux ARM



ขอบคุณที่อธิบายทุกอย่าง มีวิธีแก้ไขหรือไม่ถ้าฉันต้องการระบุอินเทอร์เฟซเฉพาะจากอุปกรณ์ USB ที่ระบุ?
kassiopeia

2
เกิดอะไรขึ้นถ้าคุณเปลี่ยนATTRS{bInterfaceNumber}=="00"ไปENV{ID_USB_INTERFACE_NUM}=="00"? ว่าควรจะทำงาน ถ้าไม่ลองเปลี่ยนพวกเขาทั้งหมดเป็น env:ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
don_crissti

คำตอบ:


6

ในการใช้แอตทริบิวต์จากผู้ปกครองหลายคนคุณต้องใช้กฎหลายข้อและ GOTO บางสิ่งเช่นนี้

SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}!="00", GOTO="huawei_end"
ACTION=="add", KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/usr/bin/systemctl start modem_dialer"
LABEL="huawei_end"

1

คุณสามารถใช้กฎสองข้อตามที่อธิบายไว้ที่นี่ (อาจรวมกับเคล็ดลับเรียบร้อยอื่น ๆ ที่พบในโพสต์บล็อกนี้เพื่อให้เป็นแบบทั่วไป / ใช้ง่ายขึ้น):

ACTION=="add", SUBSYSTEM=="usb", ENV{USB_IDS}="%s{idVendor}:%s{idProduct}"
ACTION=="add", ENV{USB_IDS}=="12d1:1506", ATTRS{bInterfaceNumber}=="00", RUN+="/usr/bin/systemctl start modem_dialer"

อย่างไรก็ตามกฎข้อแรกต้องจับคู่โหนดที่มีสิทธิ์โดยเฉพาะidVendorและidProductไม่รับประกันว่าUSB_IDSจะถูกตั้งค่าเป็นค่าที่ถูกต้องและกฎข้อที่สองสามารถจับคู่ได้ ฉันไม่ทราบคุณลักษณะใด ๆ ที่จะสามารถจับคู่โหนดใบไม้ USB โดยทั่วไปได้ : /

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.