首页 文章

UDEV-如何获取子设备属性的值

提问于
浏览
1

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

我的规则是:

SUBSYSTEMS ==“usb”,DRIVERS ==“usb”,ATTRS ==“0403”,ATTRS ==“6010”,SYMLINK =“toto%s

规则与设备匹配,但从未找到属性的值 .

以下是一个设备的分层视图:

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"

提前致谢

2 回答

  • 0

    这是我为双端口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"
    
  • 1

    我想你可以使用像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}"
    

相关问题