【问题标题】:UDEV-How to get value of a child device attributesUDEV-如何获取子设备属性的值
【发布时间】:2013-10-09 13:25:39
【问题描述】:

我正在编写一个 udev 规则来设置两个串行端口的名称。我想在符号链接中使用属性 bInterfaceNumber 的值。

我的规则是:

SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", SYMLINK+="toto%s{bInterfaceNumber}"

规则与设备匹配,但始终找不到该属性的值。

这是一个设备的分层视图:

console@host:udevadm info --name=/dev/ttyUSB0 --attribute-walk
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0':
    KERNELS=="1-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="ftdi_sio"
    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{idVendor}=="0403"
    ATTRS{idProduct}=="6010"

提前致谢

【问题讨论】:

    标签: linux serial-port udev


    【解决方案1】:

    这是我为双端口 FTDI 芯片创建别名的规则:

    # Internal serial ports
    SUBSYSTEMS=="usb", ATTRS{interface}=="Dual RS232", SYMLINK+="sertest%s{bInterfaceNumber}"
    

    根据post,属性必须在一个级别上匹配。这就是为什么idVendoridProduct 不能与bInterfaceNumber 一起使用。下面你可以看到,interfacebInterfaceNumber 属于同一级别:

    looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1.2/1-1.2:1.0':
    KERNELS=="1-1.2: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}=="Dual RS232"
    

    【讨论】:

    • 感谢您的回答。我做了同样的规则。我希望使用 idvendor 更准确。
    【解决方案2】:

    我认为你可以使用像that 这样的环境变量。

    在你的情况下,它会是这样的:

    SUBSYSTEM=="usb", DRIVER=="ftdi_sio", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010" ENV{MY_DEV}="yes"
    
    ENV{MY_DEV}="yes", SUBSYSTEMS=="usb", SYMLINK+="toto%s{bInterfaceNumber}"
    

    【讨论】:

    • 这不太奏效,但从 /usr/lib/udev/rules.d/60-serial.rules 获得了一些灵感: SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACE_NUM}="$ attr{bInterfaceNumber}" SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", SYMLINK+="tty%s{serial}_$env{ID_USB_INTERFACE_NUM}"跨度>
    猜你喜欢
    • 1970-01-01
    • 2015-01-16
    • 2015-10-15
    • 2013-01-25
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多