udev 규칙이 날 미치게 만들어

udev 규칙이 날 미치게 만들어

나는 이 usb-serial장치를 가지고 있습니다:

root@imx6_armboard:/etc/udev/rules.d# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

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/fsl-ehci.1/usb2/2-1/2-1.1/2-1.1:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/fsl-ehci.1/usb2/2-1/2-1.1/2-1.1:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="ftdi_sio"
    ATTRS{latency_timer}=="1"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/platform/fsl-ehci.1/usb2/2-1/2-1.1/2-1.1:1.0':
    KERNELS=="2-1.1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="ftdi_sio"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="ff"
    ATTRS{bInterfaceProtocol}=="ff"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{interface}=="FT232R USB UART"

  looking at parent device '/devices/platform/fsl-ehci.1/usb2/2-1/2-1.1':
    KERNELS=="2-1.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="a0"
    ATTRS{bMaxPower}==" 90mA"
    ATTRS{urbnum}=="30409"
    ATTRS{idVendor}=="0403"
    ATTRS{idProduct}=="6001"
    ATTRS{bcdDevice}=="0600"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="9"
    ATTRS{devpath}=="1.1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="FTDI"
    ATTRS{product}=="FT232R USB UART"
    ATTRS{serial}=="A400CZBK"

  looking at parent device '/devices/platform/fsl-ehci.1/usb2/2-1':
    KERNELS=="2-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  2mA"
    ATTRS{urbnum}=="15513"
    ATTRS{idVendor}=="0424"
    ATTRS{idProduct}=="2513"
    ATTRS{bcdDevice}=="0bb3"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="3"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/platform/fsl-ehci.1/usb2':
    KERNELS=="usb2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="48"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0300"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="1"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 3.0.35-02671-gb0836db ehci_hcd"
    ATTRS{product}=="Freescale On-Chip EHCI Host Controller"
    ATTRS{serial}=="fsl-ehci.1"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/platform/fsl-ehci.1':
    KERNELS=="fsl-ehci.1"
    SUBSYSTEMS=="platform"
    DRIVERS=="fsl-ehci"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS=="

이에 대한 규칙을 만들어 보았습니다 /etc/udev/rules.d/99-usbserial-sensors.rules. 이것

SUBSYSTEM=="usb-serial", KERNEL=="ttyUSB?", ATTRS{serial}=="A400CZBK", SYMLINK+="sensO2"

나는 하나를 썼다모두어느 날, 문서를 보고 디버그 모드로 실행하면서 규칙이 예상대로 작동하지 않는 이유를 알아내려고 udevd노력했습니다 .udevadm

결국 (그날) 이 규칙이 적용되었습니다.

SUBSYSTEMS=="usb", KERNEL=="ttyUSB?", ATTRS{serial}=="A400CZBK", SYMLINK+="sensO2"

그래서 기본적으로 저는 SUBSYSTEM 절을 사용했습니다.에스= = = =USB" SUBSYSTEM="usb-serial" 대신.

문제는 그것이 왜 작동하는가입니다. 왜 데몬을 usb-serial트리거 하지 않습니까? 특히 사람들이 ???로 잡을 udev수 있도록 거기에 있는 경우에는 더욱 그렇습니다 .udevadm info

감사해요

답변1

udev 규칙에서는 하나의 장치만 일치시킬 수 있습니다. 일치시킬 장치를 선택할 수 있지만 여러 장치에 대한 조건을 혼합할 수는 없습니다. 출력에 나와 있듯이 udevadm info:

일치 규칙은 장치의 속성과 장치의 속성으로 구성될 수 있습니다.단일 상위 장치.

ATTRS{serial}=="A400CZBK"KERNELS=="2-1.1"및 이 있는 상위 항목이 있습니다 SUBSYSTEMS=="usb". 대상 장치 자체에는 KERNEL=="ttyUSB0"및 가 있습니다 SUBSYSTEM=="tty". 그래서 당신은 그들 중 하나를 사용할 수 있습니다. 하지만 사용할 수 없으며 SUBSYSTEM=="usb-serial"어떤 기기에도 존재하지 않으며 사용할 수 없으며 SUBSYSTEMS=="usb-serial"다른 부모에만 존재합니다.

관련 정보