"usb-devices" 명령의 출력을 어떻게 읽나요?

"usb-devices" 명령의 출력을 어떻게 읽나요?

Ubuntu 22.04에서 USB 문제를 디버깅하려고 합니다. 나는이 usb-devices명령을 발견했습니다. 그러나 나는 그 결과를 이해하지 못합니다. 매뉴얼 페이지를 읽었으며 다음과 같이 말합니다.

이 스크립트의 출력은 /proc/bus(usbfs가 설치된 경우) 또는 /sys/kernel/debug(debugfs가 설치된 경우) 아래의 usb/devices 파일과 유사합니다. 이 스크립트는 주로 파일을 사용할 수 없을 때 사용됩니다. usb/devices 파일과 달리 이 스크립트는 활성 인터페이스(usb/devices 파일에 "*"로 표시된 인터페이스)와 해당 엔드포인트만 나열합니다. 정보 정렬 방법과 출력 형식에 차이가 있을 수 있다는 점에 유의하세요.

그러나 이러한 파일의 출력을 읽는 방법에 대한 명확한 지침도 찾을 수 없습니다. 다음은 다양한 컴퓨터의 샘플 출력입니다.

T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  3 Spd=1.5 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=045e ProdID=082c Rev=01.00
S:  Manufacturer=Microsoft
S:  Product=Microsoft Ergonomic Keyboard
S:  SerialNumber=601135501321
C:  #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=01 Driver=usbhid
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=10ms
I:  If#= 1 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=10ms

이것을 어떻게 읽나요? 약어는 무엇을 의미하나요? 스크립트 자체를 읽을 수 있어 vim $(which usb-devices)약간 도움이 됩니다. 예를 들어 첫 번째 줄에서는 다음을 출력합니다.

T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0

코드에서 다음 줄에서 참조되는 것을 볼 수 있습니다.

printf "\nT: Bus=%02i Lev=%02i Prnt=%02i Port=%02i Cnt=%02i Dev#=%3i Spd=%-3s MxCh=%2i\n" \ $busnum $level $parent $port $count $devnum $speed $maxchild

그래서 나는 그것이 어디에서 왔는지 알 수 있지만 , 그때에도 "처음에"가 무엇을 의미하는지 $busnum알 수 없습니다 .T

답변1

몇번의 파헤침 끝에 답을 찾았습니다여기. 흥미로운 부분은 아래에 인용되어 있습니다.

T:로 시작하는 줄은 토폴로지입니다. 버스는 장치가 어느 버스에 있는지 나타냅니다. Lev는 루트 허브의 경우 레벨 00부터 시작하고 루트 허브에 연결된 모든 장치의 경우 레벨 01, 레벨 01 허브에 연결된 모든 장치의 경우 레벨 02 등으로 장치의 레벨을 나타냅니다. Prnt는 이 장치의 상위 장치입니다(루트 허브의 경우 항상 00, 루트 허브에 연결된 장치의 경우 01). 포트는 상위 장치의 포트이며, 각 장치의 첫 번째 포트는 00으로 시작합니다. 인쇄/포트는 버스별로 고유합니다. Cnt는 첫 번째 장치에 대해 01부터 시작하여 해당 토폴로지 수준 내의 열거 순서에 따라 이 수준의 장치 번호를 나타냅니다. Dev#은 레벨에 상관없이 버스 열거 순서에 따라 장치 번호를 나타냅니다. 모든 버스는 독특합니다. Spd는 장치의 작동 속도를 Mbps 단위로 나타냅니다(현재 USB 버전의 경우 1.5 또는 12). MxCh는 이 장치에 연결할 수 있는 장치 수를 나타내며, 허브를 제외한 모든 장치의 경우 00입니다. 드라이버는 이 장치에서 어떤 장치 드라이버를 사용하고 있는지 나타냅니다. (없음) 항목은 사용 중인 드라이버가 없음을 나타냅니다.

D:로 시작하는 줄은 장치 설명자의 정보입니다. Ver는 장치가 준수한다고 주장하는 USB 사양 버전을 나타냅니다. Cls는 장치가 준수한다고 주장하는 장치 클래스를 16진수 및 문자열 형식으로 나타냅니다. Cls 항목 00(>ifc)은 장치 클래스 사양 준수가 인터페이스와 관련되어 있으며 장치 클래스 정보를 얻으려면 인터페이스 설명자를 읽어야 함을 나타냅니다. Sub는 장치가 준수하는 하위 클래스를 나타냅니다(Cls 항목 내에서). Prot는 장치가 충족한다고 주장하는 클래스 또는 하위 클래스 내의 프로토콜을 나타냅니다. MxPS는 끝점 0의 패킷 크기를 나타냅니다. #Cfgs는 장치에 포함된 구성 수를 나타냅니다.

D:와 마찬가지로 P:로 시작하는 줄은 장치 설명자의 정보이며, 한 줄에 모두 들어갈 수 없기 때문에 주로 분리됩니다. Vendor는 장치의 공급업체 식별 코드를 나타내고, ProdID는 장치의 제품 식별 코드를 나타냅니다. Rev는 제품 개정 번호를 나타냅니다.

S:(있는 경우)로 시작하는 줄은 장치에서 반환된 공급업체 및 제품 문자열입니다.

C:로 시작하는 줄은 구성 설명자의 정보입니다. 각 장치의 C: 줄 수는 #Cfgs로 제공되며 별표가 뒤에 오는 항목은 현재 구성입니다. #If는 장치에 있는 인터페이스 수를 나타냅니다. Cfg#은 설명되는 구성을 나타냅니다. Atr은 장치 속성의 16진수 표시입니다(0x80은 버스 전원 공급을 의미, 0x40은 자체 전원 공급을 의미, 0x20은 원격 깨우기 가능을 의미). MxPwr은 이 장치 구성에 대한 최대 전력 소비(밀리암페어)입니다. 구성 설명자에 대한 자세한 내용은 USB 사양 섹션 9.7.2를 참조하세요.

I:로 시작하는 줄은 인터페이스 설명자의 정보입니다. 각 C: 줄의 I: 줄 수는 #Ifs 항목에 의해 제공됩니다. If#은 특정 장치 구성에 어떤 인터페이스가 설명되어 있는지 나타냅니다. Alt 이 인터페이스의 대체 설정이 설명되고 있음을 나타냅니다. #EPs 이 끝점에 대한 대체 설정에 있는 끝점 수를 나타냅니다. Cls는 인터페이스의 대체 설정이 해당하는 클래스를 16진수 및 문자열 형식으로 나타냅니다. Sub 인터페이스의 대체 설정이 속한 하위 클래스를 나타냅니다. Prot 인터페이스의 대체 설정이 준수하는 인터페이스 프로토콜(클래스 및 하위 클래스 튜플 내)을 나타냅니다. 드라이버는 어떤 USB 드라이버가 이 인터페이스를 요청했는지 나타냅니다. 자세한 내용은 USB 사양 섹션 9.7.3을 참조하세요.

E:로 시작하는 줄은 엔드포인트 설명자의 정보입니다. 각 I: 줄에 대한 E: 줄의 수는 #EPs 항목에 의해 제공됩니다. 끝점 0은 표시되지 않습니다. 광고는 끝점이 In 끝점인지 Out 끝점인지를 나타내는 문자를 사용하여 끝점 주소를 나타냅니다. Atr은 엔드포인트와 연관된 속성(전송 유형)을 나타내며 그 뒤에 전송 유형을 변환하는 문자열이 옵니다. MxPS는 이 엔드포인트가 보내거나 받을 수 있는 최대 패킷 크기를 나타냅니다. Ivl은 폴링 인터럽트 끝점 사이의 시간 간격(밀리초)을 나타냅니다. 대량 전송 및 제어 전송의 경우 Ivl은 무시되고 등시성 전송의 경우 Ivl은 1로 설정됩니다. 끝점 설명자에 대한 자세한 내용은 USB 사양 섹션 9.7.4를 참조하세요.

관련 정보