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.
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}== ...