Được rồi, đầu tiên tôi bây giờ hiểu những gì các tài liệu hướng dẫn cho $id
phương tiện
Tên của thiết bị trùng khớp trong khi tìm kiếm đường dẫn lên trên cho SUBSYSTEMS, Kernels, DRIVERS và ATTRS.
... Và đó không phải là điều tôi nghĩ (được hình thành do không hiểu tài liệu kết hợp với một số thử nghiệm).
Với "Tên của thiết bị", nó nói về cùng một thứ mà KERNEL
khóa khớp với. Các tài liệu nói về KERNEL
chìa khóa là:
Khớp tên của thiết bị sự kiện.
Đó là cách bạn biết "tên" và "KernEL" có liên quan.
Phần "khớp trong khi tìm kiếm đường dẫn lên trên cho SUBSYSTEMS, Kernels, DRIVERS và ATTRS" có nghĩa là nếu bạn đã chỉ định một trận đấu "SUBSYSTEMS, Kernels, DRIVERS hoặc ATTRS" trong quy tắc, nó sẽ đi lên cây thiết bị cho đến khi tìm thấy trận đấu; tên của thiết bị phù hợp sẽ được sử dụng.
Vì vậy, theo quy tắc đầu tiên của tôi, nó phù hợp với khóa ATTRS và thiết bị đó tình cờ là thiết bị USB vật lý.
Bây giờ đối với quy tắc khác của tôi, tôi phải nhìn vào cái cây và tìm thứ gì đó phù hợp với thiết bị vật lý nhưng không có gì bên dưới nó. Đây là cây thiết bị của tôi:
# udevadm info --attribute-walk --name=/dev/cdc-wdm0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/platform/atmel-ehci/usb1/1-1/1-1.7/1-1.7.2/1-1.7.2:1.5/usb/cdc-wdm0':
KERNEL=="cdc-wdm0"
SUBSYSTEM=="usb"
DRIVER==""
looking at parent device '/devices/platform/atmel-ehci/usb1/1-1/1-1.7/1-1.7.2/1-1.7.2:1.5':
KERNELS=="1-1.7.2:1.5"
SUBSYSTEMS=="usb"
DRIVERS=="qmi_wwan"
ATTRS{bInterfaceNumber}=="05"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="03"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="f1"
ATTRS{bInterfaceProtocol}=="ff"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/atmel-ehci/usb1/1-1/1-1.7/1-1.7.2':
KERNELS=="1-1.7.2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}=="Pantech, Incorporated"
ATTRS{bNumInterfaces}==" 6"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="c0"
ATTRS{bMaxPower}=="500mA"
ATTRS{urbnum}=="496"
ATTRS{idVendor}=="106c"
ATTRS{idProduct}=="3718"
ATTRS{bcdDevice}=="0000"
ATTRS{bDeviceClass}=="02"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="12"
ATTRS{devpath}=="1.7.2"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Pantech, Incorporated"
ATTRS{product}=="PANTECH UML290"
looking at parent device '/devices/platform/atmel-ehci/usb1/1-1/1-1.7':
KERNELS=="1-1.7"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="188"
ATTRS{idVendor}=="1a40"
ATTRS{idProduct}=="0101"
ATTRS{bcdDevice}=="0111"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="3"
ATTRS{devpath}=="1.7"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="4"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{product}=="USB 2.0 Hub"
looking at parent device '/devices/platform/atmel-ehci/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="53"
ATTRS{idVendor}=="1a40"
ATTRS{idProduct}=="0201"
ATTRS{bcdDevice}=="0100"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="02"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="2"
ATTRS{devpath}=="1"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="7"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{product}=="USB 2.0 Hub [MTT]"
looking at parent device '/devices/platform/atmel-ehci/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="26"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0002"
ATTRS{bcdDevice}=="0206"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="3"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 2.6.39.4-acnbfx100 ehci_hcd"
ATTRS{product}=="Atmel EHCI UHP HS"
ATTRS{serial}=="atmel-ehci"
ATTRS{authorized_default}=="1"
looking at parent device '/devices/platform/atmel-ehci':
KERNELS=="atmel-ehci"
SUBSYSTEMS=="platform"
DRIVERS=="atmel-ehci"
ATTRS{companion}==""
looking at parent device '/devices/platform':
KERNELS=="platform"
SUBSYSTEMS==""
DRIVERS==""
Thiết bị tôi muốn kết hợp là /devices/platform/atmel-ehci/usb1/1-1/1-1.7/1-1.7.2'
. Bạn có thể thấy rằng DRIVERS cho thiết bị đó là 'usb' và không có gì bên dưới nó sẽ phù hợp với điều đó. Quy tắc sau đây giải quyết vấn đề của tôi, thậm chí nên là một giải pháp chung vì tôi khá chắc chắn rằng không có điểm cuối nào của thiết bị sẽ được xử lý bởi trình điều khiển usb.
DRIVERS=="usb", KERNEL=="*cdc-wdm*", ENV{id}="$id", RUN="/usr/local/bin/modem_setup.sh"
Và kết quả là tôi đã tìm kiếm tất cả cùng:
# udevadm info --query=all --name=/dev/cdc-wdm0
P: /devices/platform/atmel-ehci/usb1/1-1/1-1.7/1-1.7.2/1-1.7.2:1.5/usb/cdc-wdm0
N: cdc-wdm0
E: DEVNAME=/dev/cdc-wdm0
E: DEVPATH=/devices/platform/atmel-ehci/usb1/1-1/1-1.7/1-1.7.2/1-1.7.2:1.5/usb/cdc-wdm0
E: MAJOR=180
E: MINOR=176
E: SUBSYSTEM=usb
E: USEC_INITIALIZED=12243969
E: id=1-1.7.2