여러 인터페이스가 있는 장치에 대한 Udev 규칙

여러 인터페이스가 있는 장치에 대한 Udev 규칙

그래서 udev를 파고들다가 문제에 부딪혔습니다.

기본적인 전제는 이해한 것 같습니다(틀렸다면 정정해 주세요). 장치는 시스템 시작 시 또는 얼마 후에 연결됩니다. Udev는 일치하는 항목을 찾기 위해 모든 규칙을 면밀히 조사합니다. 일치하는 항목을 찾으면 요청된 모든 작업을 수행하고 마지막 항목에 도달할 때까지 규칙 목록을 계속 진행합니다. 그런 다음 다음 장치에서 시작됩니다.

이제 2개의 인터페이스를 생성하는 USB 장치가 있습니다. 붙여서 보면 can0 , can1 둘다 나옵니다 /sys/class/net/. 하지만 에는 /dev이와 관련된 항목이 하나만 있습니다 /dev/bus/usb/002/00X.

이제 이것이 내 문제가 있는 곳입니다. 저는 이러한 각 인터페이스에 특정 이름을 지정하고 싶습니다. 나는 하나가 항상 다른 것보다 먼저 온다는 것을 알고 있습니다. 아무것도 하지 않으면 이름이 can0및 로 지정됩니다 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)

답변1

에 표시된 대로 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"

ATTR위에서는 및 키의 특정 조합을 사용했습니다 ATTRS. 이는 현재 또는 현재 및 상위 장치에서 값을 찾고 있기 때문에 중요합니다.http://www.reactivated.net/writing_udev_rules.html.

인터페이스 이름이 동일한 경우 로 구분할 수 있습니다 ATTR{bInterfaceNumber}.

관련 정보