Saya mengalami kesulitan memahami bagaimana atribut perangkat udev dari perangkat induk yang berbeda dievaluasi dalam suatu aturan. Saya ingin menulis aturan untuk perangkat usb serial tertentu (HUAWEI Modem), dengan atribut walk sebagai berikut:
$ 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"
Untuk mengidentifikasi perangkat ini, saya mencoba menggunakan aturan udev berikut:
ACTION=="add", KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="00", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/usr/bin/systemctl start modem_dialer"
tapi sayangnya saya tidak dapat menggunakan atribut ATTRS{bInterfaceNumber}=="00"
dari perangkat antarmuka dan atribut ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"
dari perangkat fisik secara bersamaan. Menggunakan salah satu dari mereka berfungsi dengan baik, tetapi saat menggunakannya bersama-sama aturan tidak berfungsi lagi.
Apakah saya melewatkan sesuatu mengenai penggunaan atribut dari perangkat induk yang berbeda secara bersamaan dalam satu aturan? Adakah alasan lain mengapa menggunakan atribut dari orang tua yang berbeda mungkin menjadi masalah?
Omong-omong, distronya adalah Arch Linux ARM.
sumber
ATTRS{bInterfaceNumber}=="00"
keENV{ID_USB_INTERFACE_NUM}=="00"
? Itu seharusnya bekerja. Jika tidak coba ubah semuanya menjadi env:ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
Jawaban:
Untuk menggunakan atribut dari banyak orang tua, Anda perlu menggunakan beberapa aturan dan GOTO. Sesuatu seperti ini.
sumber
Anda dapat menggunakan dua aturan seperti yang dijelaskan di sini (mungkin dikombinasikan dengan trik lain yang ditemukan di posting blog ini agar lebih umum / mudah dikeluarkan):
Namun, aturan pertama harus secara unik mencocokkan node yang berisi hak
idVendor
danidProduct
tidak ada jaminan bahwa ia menetapkanUSB_IDS
ke nilai yang benar dan aturan kedua dapat cocok. Saya tidak mengetahui adanya atribut yang secara umum dapat mencocokkan node daun USB. : /sumber