udev 규칙에서 다양한 상위 장치의 속성


11

다른 부모 장치의 udev 장치 속성이 규칙에서 어떻게 평가되는지 이해하는 데 어려움이 있습니다. 다음과 같이 속성을 사용하여 특정 직렬 USB 장치 (HUAWEI 모뎀)에 대한 규칙을 작성하고 싶습니다.

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

이 장치를 식별하기 위해 다음 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"

그러나 불행히도 ATTRS{bInterfaceNumber}=="00"인터페이스 장치의 속성 ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"과 실제 장치 의 속성 을 함께 사용할 수 없습니다 . 둘 중 하나를 사용하면 정상적으로 작동하지만 함께 사용하면 규칙이 더 이상 작동하지 않습니다.

하나의 규칙에서 다른 상위 장치의 속성 사용과 관련하여 누락 된 것이 있습니까? 다른 부모의 속성을 사용하는 것이 문제가되는 다른 이유가 있습니까?

그건 그렇고, 배포판은 Arch Linux ARM입니다.



고마워, 그게 모든 것을 설명해. 특정 USB 장치에서 특정 인터페이스를 식별하려는 경우 해결 방법이 있습니까?
kassiopeia

2
로 변경 ATTRS{bInterfaceNumber}=="00"하면 ENV{ID_USB_INTERFACE_NUM}=="00"어떻게됩니까? 작동합니다. 모두 env로 변경하지 않으면 :ENV{ID_USB_INTERFACE_NUM}=="00", ENV{ID_VENDOR_ID}=="12d1", ENV{ID_MODEL_ID}== ...
don_crissti

답변:


6

여러 부모의 속성을 사용하려면 여러 규칙과 GOTO를 사용해야합니다. 이 같은.

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

여기에 설명 된대로 두 가지 규칙을 사용할 수 있습니다 (이 블로그 게시물 에있는 다른 깔끔한 트릭과 결합하여 보다 일반적이고 쉽게 소비 할 수 있도록 할 수 있음).

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"

그러나 첫 번째 규칙은 권한이 포함 된 노드와 고유하게 일치해야 idVendor하며 idProduct그렇지 않으면 USB_IDS올바른 값으로 설정되었다고 보장 할 수 없으며 두 번째 규칙은 일치 할 수 있습니다. 그래도 USB 리프 노드와 일반적으로 일치 할 수있는 속성을 알지 못합니다. : /

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.