Attributi da vari dispositivi principali in una regola udev


11

Ho qualche problema a capire come vengono valutati gli attributi di un dispositivo udev da diversi dispositivi principali in una regola. Voglio scrivere una regola per un dispositivo USB seriale specifico (modem HUAWEI), con un attributo walk come segue:

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

Per identificare questo dispositivo ho provato ad usare la seguente regola 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"

ma sfortunatamente non posso usare insieme l'attributo ATTRS{bInterfaceNumber}=="00"dal dispositivo di interfaccia e gli attributi ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"dal dispositivo fisico. L'uso di uno di essi funziona correttamente, ma quando li si utilizza insieme la regola non funziona più.

Mi manca qualcosa per quanto riguarda l'utilizzo di attributi da diversi dispositivi genitore insieme in una regola? C'è qualche altro motivo per cui l'utilizzo degli attributi di genitori diversi potrebbe essere un problema?

A proposito, la distribuzione è Arch Linux ARM.



Grazie, questo spiega tutto. Esiste una soluzione alternativa se desidero identificare un'interfaccia specifica da un dispositivo USB specifico?
Kassiopeia,

2
E se cambi ATTRS{bInterfaceNumber}=="00"in ENV{ID_USB_INTERFACE_NUM}=="00"? Dovrebbe funzionare. Altrimenti prova a cambiarli tutti in env:ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
don_crissti

Risposte:


6

Per utilizzare gli attributi di più genitori, devi utilizzare più regole e GOTO. Qualcosa come questo.

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

Potresti usare due regole come descritto qui (possibilmente combinato con un altro trucco ordinato trovato in questo post del blog per renderlo più generico / facilmente spendibile):

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"

Tuttavia, la prima regola deve corrispondere univocamente il nodo contenente destra idVendored idProductaltro v'è alcuna garanzia che imposta USB_IDSi valori corretti e la seconda regola è in grado di eguagliare. Non sono a conoscenza di alcun attributo che sarebbe in grado di abbinare genericamente nodi foglia USB però. : /

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.