当USB设备用于gadgetfs时,系统挂起并出现错误110。

时间:2019-02-06 07:57:03

标签: usb

使用“ http://www.linux-usb.org/gadget/usb.c”程序尝试在Jetson TX2上设置gadgetfs。

更新Nvidia的VID PID:      #define DRIVER_VENDOR_NUM 0x0955     #define DRIVER_PRODUCT_NUM 0x7020

还更新了Nvidia的自动配置功能:

*/* Nvidia processors, high/full speed */
else if (stat (DEVNAME = "tegra-xudc", &statb) == 0) {
    HIGHSPEED = 1;
    device_desc.bcdDevice = __constant_cpu_to_le16 (0x0001);
    fs_source_desc.bEndpointAddress
    = hs_source_desc.bEndpointAddress
    = USB_DIR_IN | 1;
    EP_IN_NAME = "ep1in-bulk";
    fs_sink_desc.bEndpointAddress
    = hs_sink_desc.bEndpointAddress
    = USB_DIR_OUT | 2;
    EP_OUT_NAME = "ep2out-bulk";
    source_sink_intf.bNumEndpoints = 3;
    fs_status_desc.bEndpointAddress
    = hs_status_desc.bEndpointAddress
    = USB_DIR_IN | 3;
    EP_STATUS_NAME = "ep3in-int";
}*

运行程序后,在Jetson TX2终端上输出:

*/dev/gadget/musb_hdrc ep0 configured
serial="1.3"
** Thu Jan 1 05:19:27
CONNECT high speed
DISCONNECT
CONNECT high speed
SETUP 80.06 v0300 i0000 255*

在Linux主机PC上的输出日志是:

*usb 3-2: new high-speed USB device number 48 using xhci_hcd
usb 3-2: string descriptor 0 read error: -110
usb 3-2: New USB device found, idVendor=0955, idProduct=7020
usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-2: can't set config #2, error -110*

逐步调试 usb.c 后,发现该程序卡在了函数“ handle_control”中。获取USB_REQ_GET_DESCRIPTOR事件,然后调用USB_DT_STRING,但在“状态=写(fd,buf,tmp)”之后; Jetson TX2卡住并重新启动。

Jetson TX2卡住并在主机PC上出现错误-110响应的原因是什么?

搜索与错误-110相关的错误后,我们得到了两个不同的errno.h。

一个表示110为:     #define ESHUTDOWN 110 / *套接字关闭后无法发送* /

第二个文件将110表示为:     #define ETIMEDOUT 110 / *连接超时* /

在两种情况下,都有一个共同的结果,即主机和设备之间的通信由于某种原因而中断。那么,此连接的中断可能是什么?

1 个答案:

答案 0 :(得分:0)

内核源文件中存在与gadgetfs相关的错误。在使用以下更新修补了该错误之后,使用批量传输类型的设备和主机之间的gadgetfs进行了usb通信工作。

https://www.systutorials.com/linux-kernels/88555/usb-gadgetfs-fix-crash-caused-by-inadequate-synchronization-linux-4-4-92/

https://www.systutorials.com/linux-kernels/88554/usb-gadget-inode-c-fix-unbalanced-spin_lock-in-ep0_write-linux-4-4-92/