Usb

具有多個介面的設備的 Udev 規則

  • April 12, 2018

所以,我正在研究 udev 並遇到了一個問題。

我認為我理解了基本前提(如果我錯了,請糾正我)。由於您的系統啟動或之後的某個時間,設備已連接。Udev 會遍歷所有規則來尋找匹配項。一旦找到匹配項,它就會執行請求的任何操作,並繼續沿著規則列表向下移動,直到到達最後一個。然後它在下一個設備上開始。

現在,我有一個創建 2 個介面的 USB 設備。當我附上它時,當我查看時我得到了一個 can0 和 can1 /sys/class/net/。但是在/dev下,只有一個條目/dev/bus/usb/002/00X

現在,這就是我的問題所在。我想將這些介面中的每一個命名為特定的名稱。我知道一個總是在另一個之前出現。如果我什麼都不做,他們會被命名為can0and can1。如果我放入 udev 規則,出現的第一個規則會被正確重命名,但查看dmesg日誌,第二個會出錯,因為核心名稱也是can0(因為沒有can1)。

如何解決這個問題?udevadm沒有幫助,因為 中只列出了一個設備/dev,所以我似乎無法通過屬性來區分它們。

下面的輸出lsusb -v

Bus 001 Device 011: ID 0c72:0011 PEAK System 
Device Descriptor:
 bLength                18
 bDescriptorType         1
 bcdUSB               2.00
 bDeviceClass            0 (Defined at Interface level)
 bDeviceSubClass         0 
 bDeviceProtocol         0 
 bMaxPacketSize0        64
 idVendor           0x0c72 PEAK System
 idProduct          0x0011 
 bcdDevice            0.00
 iManufacturer           1 PEAK-System Technik GmbH
 iProduct                2 PCAN-USB Pro FD
 iSerial                 0 
 bNumConfigurations      1
 Configuration Descriptor:
   bLength                 9
   bDescriptorType         2
   wTotalLength          111
   bNumInterfaces          2
   bConfigurationValue     1
   iConfiguration          4 Config00
   bmAttributes         0x80
     (Bus Powered)
   MaxPower              240mA
   Interface Descriptor:
     bLength                 9
     bDescriptorType         4
     bInterfaceNumber        0
     bAlternateSetting       0
     bNumEndpoints           6
     bInterfaceClass         0 (Defined at Interface level)
     bInterfaceSubClass      0 
     bInterfaceProtocol      0 
     iInterface              5 PCAN-USB Pro FD CAN
     Endpoint Descriptor:
       bLength                 7
       bDescriptorType         5
       bEndpointAddress     0x81  EP 1 IN
       bmAttributes            2
         Transfer Type            Bulk
         Synch Type               None
         Usage Type               Data
       wMaxPacketSize     0x0200  1x 512 bytes
       bInterval               0
     Endpoint Descriptor:
       bLength                 7
       bDescriptorType         5
       bEndpointAddress     0x01  EP 1 OUT
       bmAttributes            2
         Transfer Type            Bulk
         Synch Type               None
         Usage Type               Data
       wMaxPacketSize     0x0200  1x 512 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     0x0200  1x 512 bytes
       bInterval               0
     Endpoint Descriptor:
       bLength                 7
       bDescriptorType         5
       bEndpointAddress     0x02  EP 2 OUT
       bmAttributes            2
         Transfer Type            Bulk
         Synch Type               None
         Usage Type               Data
       wMaxPacketSize     0x0200  1x 512 bytes
       bInterval               0
     Endpoint Descriptor:
       bLength                 7
       bDescriptorType         5
       bEndpointAddress     0x83  EP 3 IN
       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     0x03  EP 3 OUT
       bmAttributes            2
         Transfer Type            Bulk
         Synch Type               None
         Usage Type               Data
       wMaxPacketSize     0x0200  1x 512 bytes
       bInterval               0
   Interface Descriptor:
     bLength                 9
     bDescriptorType         4
     bInterfaceNumber        1
     bAlternateSetting       0
     bNumEndpoints           6
     bInterfaceClass         0 (Defined at Interface level)
     bInterfaceSubClass      0 
     bInterfaceProtocol      0 
     iInterface              6 PCAN-USB Pro FD LIN
     Endpoint Descriptor:
       bLength                 7
       bDescriptorType         5
       bEndpointAddress     0x84  EP 4 IN
       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     0x04  EP 4 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     0x85  EP 5 IN
       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     0x05  EP 5 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     0x86  EP 6 IN
       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     0x06  EP 6 OUT
       bmAttributes            2
         Transfer Type            Bulk
         Synch Type               None
         Usage Type               Data
       wMaxPacketSize     0x0040  1x 64 bytes
       bInterval               0
Device Qualifier (for other device speed):
 bLength                10
 bDescriptorType         6
 bcdUSB               2.00
 bDeviceClass            0 (Defined at Interface level)
 bDeviceSubClass         0 
 bDeviceProtocol         0 
 bMaxPacketSize0        64
 bNumConfigurations      1
Device Status:     0x0000
 (Bus Powered)

如 中所示lsusb -v,您的介面有不同的名稱。這可以通過以下方式額外檢查

udevadm info -a -p $(udevadm info -q path -n can0)
udevadm info -a -p $(udevadm info -q path -n can1)

因此,您可以使用ATTR{interface}它們來區分它們。

SUBSYSTEM=="usb", ATTRS{idVendor}=="0c72", ATTRS{idProduct}=="0011", ATTR{interface}=="PCAN-USB Pro FD CAN"

請注意,上面我們使用重要的ATTRATTRS鍵的特定組合,因為我們在目前或目前和父設備中查找值,請參閱http://www.reactivated.net/writing_udev_rules.html

如果介面名稱相同,則可以通過 . 來區分它們ATTR{bInterfaceNumber}

引用自:https://unix.stackexchange.com/questions/389675