2013-10-04 106 views
2

我想使用udev给相关名称一个USB串行设备,但我现在有运气。udev规则与bInterfaceNumber不起作用

# lsusb -d 04e2:1412 -v 

    Bus 004 Device 028: ID 04e2:1412 Exar Corp. 
    Device Descriptor: 
     bLength    18 
     bDescriptorType   1 
     bcdUSB    2.00 
     bDeviceClass   239 Miscellaneous Device 
     bDeviceSubClass   2 Common Class 
     bDeviceProtocol   1 Interface Association 
     bMaxPacketSize0  64 
     idVendor   0x04e2 Exar Corp. 
     idProduct   0x1412 
     bcdDevice   0.02 
     iManufacturer   0 
     iProduct    0 
     iSerial     0 
     bNumConfigurations  1 
     Configuration Descriptor: 
     bLength     9 
     bDescriptorType   2 
     wTotalLength   141 
     bNumInterfaces   4 
     bConfigurationValue  1 
     iConfiguration   0 
     bmAttributes   0xa0 
      (Bus Powered) 
      Remote Wakeup 
     MaxPower    94mA 
     Interface Association: 
      bLength     8 
      bDescriptorType  11 
      bFirstInterface   0 
      bInterfaceCount   2 
      bFunctionClass   2 Communications 
      bFunctionSubClass  2 Abstract (modem) 
      bFunctionProtocol  0 None 
      iFunction    0 
     Interface Descriptor: 
      bLength     9 
      bDescriptorType   4 
      bInterfaceNumber  0 
      bAlternateSetting  0 
      bNumEndpoints   1 
      bInterfaceClass   2 Communications 
      bInterfaceSubClass  2 Abstract (modem) 
      bInterfaceProtocol  1 AT-commands (v.25ter) 
      iInterface    0 
      CDC Header: 
      bcdCDC    1.10 
      CDC ACM: 
      bmCapabilities  0x06 
       sends break 
       line coding and serial state 
      CDC Union: 
      bMasterInterface  0 
      bSlaveInterface   1 
      CDC Call Management: 
      bmCapabilities  0x01 
       call management 
      bDataInterface   1 
      Endpoint Descriptor: 
      bLength     7 
      bDescriptorType   5 
      bEndpointAddress  0x85 EP 5 IN 
      bmAttributes   3 
       Transfer Type   Interrupt 
       Synch Type    None 
       Usage Type    Data 
      wMaxPacketSize  0x0040 1x 64 bytes 
      bInterval    2 
     Interface Descriptor: 
      bLength     9 
      bDescriptorType   4 
      bInterfaceNumber  1 
      bAlternateSetting  0 
      bNumEndpoints   2 
      bInterfaceClass  10 CDC Data 
      bInterfaceSubClass  0 Unused 
      bInterfaceProtocol  0 
      iInterface    0 
      Endpoint Descriptor: 
      bLength     7 
      bDescriptorType   5 
      bEndpointAddress  0x01 EP 1 OUT 
      bmAttributes   2 
       Transfer Type   Bulk 
       Synch Type    None 
       Usage Type    Data 
      wMaxPacketSize  0x0040 1x 64 bytes 
      bInterval    0 
      Endpoint Descriptor: 
      bLength     7 
      bDescriptorType   5 
      bEndpointAddress  0x81 EP 1 IN 
      bmAttributes   2 
       Transfer Type   Bulk 
       Synch Type    None 
       Usage Type    Data 
      wMaxPacketSize  0x0040 1x 64 bytes 
      bInterval    0 
     Interface Association: 
      bLength     8 
      bDescriptorType  11 
      bFirstInterface   2 
      bInterfaceCount   2 
      bFunctionClass   2 Communications 
      bFunctionSubClass  2 Abstract (modem) 
      bFunctionProtocol  0 None 
      iFunction    0 
     Interface Descriptor: 
      bLength     9 
      bDescriptorType   4 
      bInterfaceNumber  2 
      bAlternateSetting  0 
      bNumEndpoints   1 
      bInterfaceClass   2 Communications 
      bInterfaceSubClass  2 Abstract (modem) 
      bInterfaceProtocol  1 AT-commands (v.25ter) 
      iInterface    0 
      CDC Header: 
      bcdCDC    1.10 
      CDC ACM: 
      bmCapabilities  0x06 
       sends break 
       line coding and serial state 
      CDC Union: 
      bMasterInterface  2 
      bSlaveInterface   3 
      CDC Call Management: 
      bmCapabilities  0x01 
       call management 
      bDataInterface   3 
      Endpoint Descriptor: 
      bLength     7 
      bDescriptorType   5 
      bEndpointAddress  0x86 EP 6 IN 
      bmAttributes   3 
       Transfer Type   Interrupt 
       Synch Type    None 
       Usage Type    Data 
      wMaxPacketSize  0x0040 1x 64 bytes 
      bInterval    2 
     Interface Descriptor: 
      bLength     9 
      bDescriptorType   4 
      bInterfaceNumber  3 
      bAlternateSetting  0 
      bNumEndpoints   2 
      bInterfaceClass  10 CDC Data 
      bInterfaceSubClass  0 Unused 
      bInterfaceProtocol  0 
      iInterface    0 
      Endpoint Descriptor: 
      bLength     7 
      bDescriptorType   5 
      bEndpointAddress  0x02 EP 2 OUT 
      bmAttributes   2 
       Transfer Type   Bulk 
       Synch Type    None 
       Usage Type    Data 
      wMaxPacketSize  0x0040 1x 64 bytes 
      bInterval    0 
      Endpoint Descriptor: 
      bLength     7 
      bDescriptorType   5 
      bEndpointAddress  0x82 EP 2 IN 
      bmAttributes   2 
       Transfer Type   Bulk 
       Synch Type    None 
       Usage Type    Data 
      wMaxPacketSize  0x0040 1x 64 bytes 
      bInterval    0 
    Device Status:  0x0000 
     (Bus Powered) 

我想udev的规则是:

KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="01", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB0" 
    KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="01", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB1" 
    KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="02", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB2" 
    KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="03", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB3" 

当我只用第一udev规则没有bInterfaceNumber属性,就像这样:

KERNEL=="ttyUSB[0-9]*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ACTION=="add", SYMLINK+="test_USB0" 

它工作正常。我可以看到创建了指向/ dev/ttyUSB0的符号链接/ dev/test_USB0,但插入此usbserial设备时创建的其他ttyUSB设备又如何?

我的猜测是使用bInterfaceNumber属性,但是当我放入时,没有任何反应,它似乎完全绕过我的规则。

任何人都可以帮助我吗?

回答

6

可能是因为带有“usb”子系统的设备接口没有得到任何 创建的设备文件,只有usb设备本身。当您使用udevadm monitor插入设备时,您可以看到创建的udev事件 以及变量。

我看到对应的sysfs节点,它可以 有bInterfaceNumber属性不具备DEVNAME变量,它 可能意味着没有设备文件的设备的事件。同样的sysfs节点 也没有“dev”文件,这加强了这一点。然后,我认为你不想创建一个符号链接到一个裸露的“usb”设备,但是 而不是“tty”设备,所以你应该匹配“tty”子系统。

我能到我的单接口TTY转换器,这个规则匹配:

SUBSYSTEM=="tty", ACTION=="add", \ 
    ENV{ID_VENDOR_ID}=="067b", ENV{ID_MODEL_ID}=="2303", \ 
    ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="test_USB0" 

但随后的“ID_USB_INTERFACE_NUM”是越来越受udev规则我 系统(Debian的杰西)和你的分配,但是不太可能,可能没有他们。 但是,您应该能够制定这样的规则,可能首先匹配接口设备,然后将bInterfaceNumber分配给变量环境 ,然后在匹配tty设备的规则中使用它。

+0

ENV {ID_USB_INTERFACE_NUM}适用于Fedora 18. ATTRS {bInterfaceNumber}不支持。 – GioMac