在哪里可以找到 USB 错误代码列表?

在哪里可以找到 USB 错误代码列表?

每次我启动 Debian 时,启动日志都会显示一堆xhci_hcd问题,以及诸如此类的消息

usb 3-13: hub failed to enable device, error -22
usb 3-13: device descriptor read/8, error -61

不过,我很难找出这些错误代码的实际含义。是否有任何地方列出了所有这些错误代码的含义?

答案1

errno程序(程序包的一部分moreutils)将错误号转换为相应的名称:

    $ errno 61
    ENODATA 61 No data available

答案2

第一个是 EINVAL(标准 POSIX C 错误)的倒置。如果你好奇的话,它来自[src]/drivers/usb/core/hub.c(v. 3.19) 中的第 4218 行:

4217     if (udev->state != USB_STATE_DEFAULT)
4218         return -EINVAL;

另一个来自hub_port_init()同一文件中的函数。

然而,这些类型的错误消息实际上并不是为了向最终用户提供比现有信息更多的信息(“集线器无法启用设备”)。它们用于调试,可能包括您是否要提交错误报告。

如果您希望获得能够详细解释问题的文档,我认为您不走运。造成这种情况的部分原因可能是无法提供更准确、更详细的解释。有些事情可能会因一系列不确定的潜在原因而以同样的方式失败。

答案3

错误代码的来源可以在相关集线器的源代码中找到。

例如grep -A 1 -m 1 22 /usr/src/linux-source-4.3/drivers/usb/host/xhci.h

#define PORT_PLC        (1 << 22)
/* port configure error change - port failed to configure its link partner */

你会发现它的意义一些错误代码在/usr/src/linux-source-$yourKernel/Documentation/usb/error-codes.txt

例如

-EINVAL         a) Invalid transfer type specified (or not supported)
                b) Invalid or unsupported periodic transfer interval
                c) ISO: attempted to change transfer interval
                d) ISO: number_of_packets is < 0
                e) various other cases

并且ISO madness, if this happens: Log off and go home


对于 61 错误: /usr/src/linux-headers-4.3.0-0.bpo.1-common/include/uapi/asm-generic/errno.h

#define ENODATA         61      /* No data available */

相关内容