USB 가젯에 엔드포인트를 추가하고 주소를 변경하는 방법은 무엇입니까?

USB 가젯에 엔드포인트를 추가하고 주소를 변경하는 방법은 무엇입니까?

저는 Linux 운영 체제에서 직렬 통신을 위한 일괄 입력 및 일괄 출력 기능을 갖춘 USB 가젯을 만들려고 합니다. 하지만 장치 설명자를 설정하는 데 어려움을 겪고 있습니다. 구체적으로 엔드포인트 수와 해당 주소가 무엇인지와 같은 매개변수를 결정하고 싶지만 그렇게 할 수 없습니다.

내용 아래 /sys/kernel/config/usb_gadget/ 내가 만든다g1폴더 사용량mkdir g1주문하다

그 후 나는 이것을 보았다.

  UDC              bDeviceSubClass  bcdUSB           idProduct        os_desc
  bDeviceClass     bMaxPacketSize0  configs          idVendor         strings
  bDeviceProtocol  bcdDevice        functions        max_speed

이 웹사이트에 대한 매개변수를 설정했습니다.https://docs.kernel.org/usb/gadget_configfs.html

그 후 보드를 Ubuntu PC에 연결했고 다음 설명자를 보았습니다.lsusb -d 2020:1111 -v 주문하다

 Bus 003 Device 045: ID 2020:1111 VIA Labs, Inc.          USB2.0 Hub             
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.10
      bDeviceClass            0 
      bDeviceSubClass         0 
      bDeviceProtocol         0 
      bMaxPacketSize0        64
      idVendor           0x2020 
      idProduct          0x1111 
      bcdDevice            0.00
      iManufacturer           1 Manufacturer
      iProduct                2 Product
      iSerial                 3 0
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength       0x0020
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          4 0
        bmAttributes         0xa0
          (Bus Powered)
          Remote Wakeup
        MaxPower              100mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass       255 Vendor Specific Class
          bInterfaceSubClass      0 
          bInterfaceProtocol      0 
          iInterface              0 
          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
    Binary Object Store Descriptor:
      bLength                 5
      bDescriptorType        15
      wTotalLength       0x0016
      bNumDeviceCaps          2
      USB 2.0 Extension Device Capability:
        bLength                 7
        bDescriptorType        16
        bDevCapabilityType      2
        bmAttributes   0x0000010e
          BESL Link Power Management (LPM) Supported
        BESL value      256 us 
      SuperSpeed USB Device Capability:
        bLength                10
        bDescriptorType        16
        bDevCapabilityType      3
        bmAttributes         0x00
        wSpeedsSupported   0x000f
          Device can operate at Low Speed (1Mbps)
          Device can operate at Full Speed (12Mbps)
          Device can operate at High Speed (480Mbps)
          Device can operate at SuperSpeed (5Gbps)
        bFunctionalitySupport   1
          Lowest fully-functional device speed is Full Speed (12Mbps)
        bU1DevExitLat          10 micro seconds
        bU2DevExitLat         511 micro seconds
    can't get debug descriptor: Resource temporarily unavailable
    Device Status:     0x0001
      Self Powered

여태까지는 그런대로 잘됐다.

문제는 이 설명자에 엔드포인트가 2개 있는데 그 수를 4로 늘리고 내가 직접 제공한 엔드포인트 주소를 쓰고 싶다는 것입니다. 내가 하고 싶은 일의 예는 다음과 같습니다. 끝점은 EP1(OUT) EP1(IN) 0x81, 0x01 대신 EP2(OUT) EP4(OUT) EP6(IN) EP8(IN)이 되며 각 주소를 설정하고 싶습니다. 각각 0x02, 0x04, 0x86, 0x88로 설정해야 하는데 어떻게 해야 하나요?

감사합니다.

관련 정보