USB 오류 코드 목록은 어디에서 찾을 수 있나요?

USB 오류 코드 목록은 어디에서 찾을 수 있나요?

데비안을 부팅할 때마다 부팅 로그에는 다음 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(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 */

관련 정보