- ep1 in (прерывание) < /li>
ep2 в (прерывание) < /li>
ep3 (BUMBE) < /li>
< /li> gr /br />
gr /ul>
gr /br /ul>
gr /ul gr /ul>
UDC () с помощью этой ошибки ядра:Код: Выделить всё
echo > /sys/kernel/config/usb_gadget/mygadget/UDCправильно установленКод: Выделить всё
configfs-gadget 5100000.udc-controller: failed to start mygadget: -524 sh: write error: No error information < /code> Вот соответствующая часть моего определения дескриптора в c: < /p> .intf = { .bLength = sizeof(vendor_descs.hs_descs.intf), .bDescriptorType = USB_DT_INTERFACE, .bNumEndpoints = 3, .bInterfaceClass = USB_CLASS_VENDOR_SPEC, .iInterface = 1, .bInterfaceNumber = 0, .bAlternateSetting = 0, .bInterfaceSubClass = 0x00, .bInterfaceProtocol = 0x00, }, .ep_in_cmd = { .bLength = sizeof(vendor_descs.hs_descs.ep_in_cmd), .bDescriptorType = USB_DT_ENDPOINT, .bmAttributes = USB_ENDPOINT_XFER_INT, .bEndpointAddress = 1 | USB_DIR_IN, .wMaxPacketSize = __cpu_to_le16(64), .bInterval = 0x04, }, .ep_in_video = { .bLength = sizeof(vendor_descs.hs_descs.ep_in_video), .bDescriptorType = USB_DT_ENDPOINT, .bmAttributes = USB_ENDPOINT_XFER_INT, .bEndpointAddress = 2 | USB_DIR_IN, .wMaxPacketSize = __cpu_to_le16(64), .bInterval = 0x04, }, .ep_out_cmd = { .bLength = sizeof(vendor_descs.hs_descs.ep_out_cmd), .bDescriptorType = USB_DT_ENDPOINT, .bmAttributes = USB_ENDPOINT_XFER_BULK, .bEndpointAddress = 3 | USB_DIR_OUT, .wMaxPacketSize = __cpu_to_le16(512), .bInterval = 0x00, }, < /code> .bNumEndpoints = 3 - правильно используется
Код: Выделить всё
.length = __cpu_to_le32(sizeof(vendor_descs)) - Я пишу дескрипторы и строки в EP0 перед обязанностью UDC
- Я подтвердил, что/sys/class/udc/ показывает действительное имя UDC ()
Код: Выделить всё
5100000.udc-controller - ep0, ep1, ep2 и ep3 были успешно созданы в разделе /dev/ffs_vendor/.
- Linux kernel: 5.x (custom build)
- FunctionFS with descriptor v2
- High-speed USB
- Allwinner SoC: UDC 5100000.udc-controller
Подробнее здесь: https://stackoverflow.com/questions/796 ... -error-524