FunctionFS配置3个端点(2个中断IN、1个批量OUT)启动失败,错误码-524排查求助
FunctionFS配置3个端点(2个中断IN、1个批量OUT)启动失败,错误码-524排查求助
各位好,我现在在Linux上用FunctionFS实现一个USB Gadget,配置了3个端点:EP1 IN(中断传输)、EP2 IN(中断传输)、EP3 OUT(批量传输)。但执行绑定UDC的命令时失败了:
echo <udc> > /sys/kernel/config/usb_gadget/mygadget/UDC
对应的内核报错如下:
configfs-gadget 5100000.udc-controller: failed to start mygadget: -524 sh: write error: No error information
下面是我C代码里相关的描述符定义:
.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, },
我已经仔细检查过这些点:
- 接口描述符里的
.bNumEndpoints = 3确实正确设置了 - 描述符总长度用了
.length = __cpu_to_le32(sizeof(vendor_descs)),格式没问题 - 绑定UDC前已经把描述符和字符串写入了ep0
/sys/class/udc/里能看到有效的UDC设备5100000.udc-controller/dev/ffs_vendor/下已经成功创建了ep0、ep1、ep2、ep3这几个端点
想请教各位大佬,这个错误码-524对应的根本原因可能是什么?
我的环境信息:
- Linux内核:5.x(自定义编译版本)
- 使用FunctionFS descriptor v2
- USB工作在高速模式
- Allwinner SoC,UDC控制器为
5100000.udc-controller
感谢各位的指导!
内容来源于stack exchange
相关产品推荐
相关产品推荐

