Các thuộc tính từ các thiết bị mẹ khác nhau trong quy tắc udev


11

Tôi gặp một số khó khăn khi hiểu các thuộc tính của thiết bị udev từ các thiết bị mẹ khác nhau được đánh giá theo quy tắc. Tôi muốn viết quy tắc cho một thiết bị usb nối tiếp cụ thể (Modem HUAWEI), với một thuộc tính đi bộ như sau:

$ 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"

Để xác định thiết bị này, tôi đã thử sử dụng quy tắc udev sau:

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

nhưng thật không may, tôi không thể sử dụng thuộc tính ATTRS{bInterfaceNumber}=="00"từ thiết bị giao diện và các thuộc tính ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"từ thiết bị vật lý với nhau. Sử dụng một trong số chúng hoạt động tốt, nhưng khi sử dụng chúng cùng nhau, quy tắc không hoạt động nữa.

Tôi có thiếu điều gì liên quan đến việc sử dụng các thuộc tính từ các thiết bị mẹ khác nhau trong một quy tắc không? Có bất kỳ lý do khác tại sao sử dụng các thuộc tính từ các cha mẹ khác nhau có thể là một vấn đề?

Nhân tiện, bản phân phối là Arch Linux ARM.



Cảm ơn, điều đó giải thích mọi thứ. Có cách giải quyết nào không nếu tôi muốn xác định một giao diện cụ thể từ một thiết bị USB cụ thể?
kassiopeia

2
Nếu bạn đổi ATTRS{bInterfaceNumber}=="00"thành ENV{ID_USB_INTERFACE_NUM}=="00"gì? Cần làm việc. Nếu không thử thay đổi tất cả chúng thành env:ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
don_crissti

Câu trả lời:


6

Để sử dụng các thuộc tính từ nhiều cha mẹ, bạn cần sử dụng nhiều quy tắc và GOTO. Một cái gì đó như thế này.

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

Bạn có thể sử dụng hai quy tắc như được mô tả ở đây (có thể kết hợp với một thủ thuật gọn gàng khác được tìm thấy trong bài đăng trên blog này để làm cho nó chung chung hơn / dễ dàng sử dụng hơn):

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"

Tuy nhiên, quy tắc đầu tiên phải khớp duy nhất với nút chứa quyền idVendoridProductkhông có gì đảm bảo rằng nó đặt USB_IDSthành các giá trị chính xác và quy tắc thứ hai có thể khớp. Tôi không biết bất kỳ thuộc tính nào có thể khớp chung với các nút lá USB. : /

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.