USB 하드웨어 검증 도구(USB3HWVerifierAnalyzer.exe)
이 문서에서는 특정 하드웨어 이벤트를 테스트하고 디버깅하는 데 사용되는 USB USB3HWVerifierAnalyzer.exe(하드웨어 검증 도구)에 대해 설명합니다.
대부분의 하드웨어 문제는 최종 사용자 환경이 저하되고 정확한 오류를 확인하기 어려운 방식으로 나타납니다. USB 하드웨어 검증 도구는 디바이스, 포트, 허브, 컨트롤러 또는 이들 조합에서 발생하는 하드웨어 오류를 캡처하는 것을 목표로 합니다.
USB 하드웨어 검증 도구는 다음 작업을 수행할 수 있습니다.
- 하드웨어 이벤트를 캡처하고 정보를 실시간으로 표시합니다.
- 모든 이벤트에 대한 정보를 사용하여 추적 파일을 생성합니다.
- 이벤트 정보에 대한 기존 추적 파일을 구문 분석합니다.
이 문서에는 다음과 같은 섹션이 포함되어 있습니다.
USB 하드웨어 검증 도구 분석기 도구 가져오기
USB 하드웨어 검증 도구는 MUTT 소프트웨어 패키지의 도구에서 다운로드할 수 있는 MUTT 소프트웨어 패키지에 포함되어 있습니다.
도구 패키지에는 스트레스 및 전송 테스트(전원 전환 포함) 및 SuperSpeed 테스트를 수행하는 여러 도구가 포함되어 있습니다. 패키지에는 추가 정보 문서도 있습니다(별도의 다운로드로 사용 가능). 이 문서에서는 MUTT 하드웨어 유형에 대한 간략한 개요를 제공합니다. 실행해야 하는 다양한 테스트에 대한 단계별 지침을 제공하고 컨트롤러, 허브, 디바이스 및 BIOS/UEFI 테스트를 위한 토폴로지도 제안합니다.
USB 하드웨어 검증 도구를 사용하여 이벤트를 캡처하는 방법
하드웨어 검증 도구를 사용하여 이벤트를 캡처하려면 다음 단계를 수행합니다.
관리자 권한 명령 프롬프트에서 이 명령을 실행하여 세션을 시작합니다.
USB3HWVerifierAnalyzer.exe
도구는 다음 옵션을 지원합니다.
옵션 설명 -v <VendorID> 지정된 VendorID에 대한 모든 하드웨어 검증 도구 이벤트를 기록합니다. -p <ProductID> 지정된 ProductID에 대한 모든 하드웨어 검증 도구 이벤트를 기록합니다. -f <ETL 파일> 지정된 ETL 파일을 구문 분석합니다. 실시간 구문 분석이 지원되지 않습니다. 이 옵션을 사용하면 도구가 파일을 오프라인으로 구문 분석합니다. /v 출력 콘솔에 모든 이벤트를 표시합니다. 하드웨어 이벤트를 캡처하려는 테스트 시나리오를 실행합니다.
세션 중에 USB 하드웨어 검증 도구는 발생하는 하드웨어 이벤트에 대한 정보를 캡처합니다. 특정 하드웨어에 대한 이벤트를 필터링하려면 하드웨어의 VendorId 및 ProductId를 지정합니다. 이 도구는 디바이스가 완전히 열거되기 전에 발생하는 이벤트에 대한 일부 정보(예: VID/PID)를 캡처하지 않을 수 있습니다. 누락된 정보는 세션이 끝날 때 생성된 자세한 보고서에서 사용할 수 있습니다(다음에 설명).
참고 항목
AllEvents ETL 파일에는 항상 모든 디바이스에 대한 모든 ETW 이벤트가 포함됩니다. -v 및 -p 스위치의 영향을 받지 않습니다.
VendorId 및 ProductId로 필터링할 명령줄은 다음과 같습니다.
USB3HWVerifierAnalyzer.exe -v 0781 -p 5595
하드웨어 검증 도구의 출력 예제는 다음과 같습니다.
Session Name : TraceSessionFriJan271351112023 Attempting to start session TraceSessionFriJan271351112023... Trace Session created...Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 Provider Enable Success, Status : 0 13319329877.425596: (UsbHub3/179) Event Message: Client Initiated Recovery Action VendorID/ProductID: 0x5e3/0x612 DeviceInterfacePath: \??\USB#VID_05E3&PID_0612#6&130491ac&0&4#{f18a0e88-c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic SuperSpeed USB Hub PortPath: 0x12, 0x4, 0x0, 0x0, 0x0, 0x0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Provider disable Success, Status : 0 Session Stopped...Status : 0
Ctrl+C를 눌러 세션을 중지합니다.
세션이 끝나면 AllEvents.etl이라는 파일이 현재 디렉터리에 추가됩니다. 이 파일에는 세션 중에 캡처된 모든 이벤트에 대한 추적 정보가 포함됩니다.
AllEvents.etl 외에도 명령 창에 보고서가 표시됩니다. 보고서에는 실시간 출력에서 누락된 특정 정보가 포함됩니다. 다음 출력은 이전 세션에 대한 테스트 보고서 예제를 보여줍니다. 보고서에는 USB 하드웨어 검증 도구에서 발생한 모든 이벤트가 표시됩니다.
Record #1 (Key = 0x57ff0de4858) VendorID/ProductID: 0x451/0x2077 DeviceInterfacePath: \??\USB#VID_0451&PID_2077#6&c4be011&0&2#{f18a0e88-c30c-11d0-8815-00a0c906bed8} DeviceDescription: Generic USB Hub PortPath: 0x2, 0x0, 0x0, 0x0, 0x0, 0x0 All errors encountered: #1: (UsbHub3/176): DescriptorValidationError20HubPortPwrCtrlMaskZero #2: (UsbHub3/179): Client Initiated Recovery Action #3: (UsbHub3/179): Client Initiated Recovery Action #4: (UsbHub3/179): Client Initiated Recovery Action #5: (UsbHub3/179): Client Initiated Recovery Action #6: (UsbHub3/179): Client Initiated Recovery Action #7: (UsbHub3/179): Client Initiated Recovery Action #8: (UsbHub3/179): Client Initiated Recovery Action #9: (UsbHub3/179): Client Initiated Recovery Action #10: (UsbHub3/179): Client Initiated Recovery Action #11: (UsbHub3/179): Client Initiated Recovery Action #12: (UsbHub3/179): Client Initiated Recovery Action #13: (UsbHub3/179): Client Initiated Recovery Action #14: (UsbHub3/179): Client Initiated Recovery Action Record #2 (Key = 0x57ff62a36a8) VendorID/ProductID: 0x1058/0x740 DeviceInterfacePath: \??\USB#VID_1058&PID_0740#57583931453631414E5A3331#{a5dcbf10-6530-11d2-901f-00c04fb951ed} DeviceDescription: USB Mass Storage Device PortPath: 0x2, 0x4, 0x0, 0x0, 0x0, 0x0 All errors encountered: #1: (UsbHub3/173): SuperSpeed Device is Connected on the 2.0 Bus Record #3 (Key = 0x57ff79fd4e8) VendorID/ProductID: 0x1edb/0xbd3b PortPath: 0x3, 0x0, 0x0, 0x0, 0x0, 0x0 All errors encountered: #1: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #2: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #3: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #4: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #5: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #6: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge #7: (UsbHub3/176): DescriptorValidationErrorStringMismatchBetweenBlengthAndBufferLength #8: (UsbHub3/176): DescriptorValidationErrorStringMismatchBetweenBlengthAndBufferLength
앞의 예제 보고서에서 각 레코드의 키 필드 값을 확인합니다. 보고서는 정보를 해당 키 값으로 분류하여 읽기 쉽도록 합니다. AllEvents.etl에서 캡처된 이벤트에 동일한 키 값이 사용됩니다.
다음 명령을 실행하여 AllEvents.etl을 텍스트 형식으로 변환합니다.
USB3HWVerifierAnalyzer.exe -f AllEvents.etl /v > Output.txt
출력 파일에서 이전에 기록 된 키 값을 검색합니다. 값은 fid_UcxController, fid_HubDevice 및 fid_UsbDevice 필드 중 하나와 연결됩니다.
Netmon에서 AllEvents.etl을 열고 field_name> 추가<를 선택하여 컨트롤러, 허브 및 디바이스별로 이벤트를 필터링하는 필터를 표시합니다. 자세한 내용은 Netmon 및 USB ETW 파서를 설치하는 방법을 참조 하세요.
USB 하드웨어 검증 도구 플래그
Flag | 다음을 나타냅니다. |
---|---|
DeviceHwVerifierClientInitiatedResetPipe | 클라이언트 드라이버는 I/O 오류에 대한 응답으로 특정 파이프를 다시 설정하여 복구 작업을 시작했습니다. 특정 클라이언트 드라이버는 다른 시나리오에서 오류 복구를 수행할 수 있습니다. |
DeviceHwVerifierClientInitiatedResetPort | 클라이언트 드라이버는 I/O 오류에 대한 응답으로 디바이스를 다시 설정하여 복구 작업을 시작했습니다. 특정 클라이언트 드라이버는 다른 시나리오에서 오류 복구를 수행할 수 있습니다. |
DeviceHwVerifierClientInitiatedCyclePort | 클라이언트 드라이버는 포트를 순환하여 복구 작업을 시작했습니다. 이 플래그를 사용하면 플러그 앤 플레이 관리자가 디바이스를 다시 열거합니다. |
DeviceHwVerifierSetIsochDelayFailure | USB 3.0 디바이스가 SET_ISOCH_DELAY 요청에 실패했습니다. 드라이버에 요청 정보가 필요하지 않거나 일시적인 오류가 발생했기 때문에 디바이스가 요청에 실패할 수 있습니다. 그러나 드라이버는 이러한 이유를 구별할 수 없습니다. 이 오류는 보고서에 캡처되지 않습니다. |
DeviceHwVerifierSetSelFailure | USB 3.0 디바이스가 SET_SEL 요청에 실패했습니다. 디바이스는 LPM(링크 전원 관리)에 대한 요청 정보를 사용합니다. 드라이버에 요청 정보가 필요하지 않거나 일시적인 오류가 발생했기 때문에 디바이스가 요청에 실패할 수 있습니다. 그러나 드라이버는 이러한 이유를 구별할 수 없습니다. 이 오류는 보고서에 캡처되지 않습니다. |
DeviceHwVerifierSerialNumberMismatchOnRenumeration | 디바이스는 초기 열거 중에 보고한 일련 번호와 달리 다시 열거하는 동안 다른 일련 번호를 보고했습니다. 다시 열거형은 다시 설정 포트 또는 시스템 다시 시작 작업의 결과로 발생할 수 있습니다. |
DeviceHwVerifierSuperSpeedDeviceWorkingAtLowerSpeed | USB 3.0 장치는 SuperSpeed보다 낮은 버스 속도를 작동합니다. |
DeviceHwVerifierControlTransferFailure | 디바이스의 기본 엔드포인트로 제어 전송에 실패했습니다. 디바이스 또는 컨트롤러 오류로 인해 전송이 실패할 수 있습니다. 허브 로그는 전송 실패에 대한 USBD 상태 코드를 나타냅니다. 이 플래그는 SET_SEL 제외하고 컨트롤 전송 실패를 SET_ISOCH_DELAY. 이러한 유형의 요청은 DeviceHwVerifierSetIsochDelayFailure 및 DeviceHwVerifierSetSelFailure 플래그로 처리됩니다. |
DeviceHwVerifierDescriptorValidationFailure | 디바이스에서 반환된 설명자는 USB 사양을 준수하지 않습니다. 허브 로그는 정확한 오류를 나타냅니다. |
DeviceHwVerifierInterfaceWakeCapabilityMismatch | RemoteWake 비트가 디바이스에서 잘못 설정되었습니다. 원격 절전 모드 해제를 지원하는 USB 3.0 디바이스도 함수 절전 모드 해제를 지원해야 합니다. 디바이스가 함수 절식에 대한 지원을 나타내는 두 가지 방법이 있습니다. 첫 번째 방법은 구성 설명자의 bmAttributes 필드를 통과하는 것이며 두 번째 방법은 인터페이스를 대상으로 하는 GET_STATUS 요청에 대한 응답입니다. 복합이 아닌 디바이스의 경우 RemoteWake 비트 값은 인터페이스 0을 대상으로 하는 GET_STATUS 요청에서 반환된 값과 일치해야 합니다. 복합 디바이스의 경우 함수 중 하나 이상에 대해 RemoteWake 비트가 1이어야 합니다. 그렇지 않으면 이 플래그는 디바이스가 여기에 모순된 값을 보고했음을 나타냅니다. |
DeviceHwVerifierBusRenumeration | 디바이스가 버스에 다시 열거됩니다. 다시 열거형은 다시 설정 포트 또는 시스템 다시 시작 작업의 결과로 발생할 수 있습니다. 디바이스를 사용하지 않도록 설정/사용하거나 중지/시작할 때 다시 열거도 발생합니다. |
HubHwVerifierTooManyResets | 허브는 짧은 기간 내에 너무 많은 재설정 작업을 거쳤습니다. 이러한 재설정이 성공했지만 허브는 요청을 처리하지 않으며 반복된 오류가 발생합니다. |
HubHwVerifierControlTransferFailure | 허브의 기본 엔드포인트를 대상으로 하는 컨트롤 전송이 실패했습니다. 디바이스 또는 컨트롤러 오류로 인해 전송이 실패할 수 있습니다. 허브 로그는 오류에 대한 USBD 상태 코드를 나타냅니다. |
HubHwVerifierInterruptTransferFailure | 허브의 인터럽트 엔드포인트를 대상으로 하는 데이터 전송이 실패했습니다. 디바이스 또는 컨트롤러 오류로 인해 전송이 실패할 수 있습니다. 허브 로그는 오류에 대한 USBD 상태 코드를 나타냅니다. 요청이 취소되어 전송에 실패한 경우 오류가 캡처되지 않습니다. |
HubHwVerifierNoSelectiveSuspendSupport | RemoteWake 비트는 허브의 구성 설명자에서 1로 설정되지 않습니다. |
HubHwVerifierPortResetTimeout | 디바이스를 열거하거나 다시 열거하는 동안 포트 재설정 작업은 타이밍이 초과됩니다. 포트 재설정이 완료되었음을 나타내는 포트 변경 알림이 수신되지 않습니다. |
HubHwVerifierInvalidPortStatus | 대상 포트의 포트 상태 USB 사양에 따라 유효하지 않습니다. 특정 디바이스로 인해 허브가 잘못된 상태 보고할 수 있습니다. |
HubHwVerifierPortLinkStateSSInactive | 대상 포트와 다운스트림 디바이스 간의 링크가 오류 상태입니다. |
HubHwVerifierPortLinkStateCompliance | 대상 포트와 다운스트림 디바이스 간의 링크는 준수 모드입니다. 시스템 절전 모드 다시 시작과 관련된 일부 시나리오에서는 준수 모드 오류가 예상되며 이러한 경우 오류가 캡처되지 않습니다. |
HubHwVerifierPortDeviceDisconnected | 대상 포트의 다운스트림 디바이스가 더 이상 버스에 연결되지 않습니다. |
HubHwVerifierPortOverCurrent | 다운스트림 포트가 과전류 상태를 보고했습니다. |
HubHwVerifierControllerOperationFailure | 대상 포트에 연결된 디바이스에 대한 컨트롤러 작업(예: 디바이스 사용, 엔드포인트 구성)이 실패했습니다. SET_ADDRESS 및 다시 설정 엔드포인트 요청의 오류는 캡처되지 않습니다. |