다음을 통해 공유


USB 3.0 xHCI 커널 모드 디버깅 설정(KDUSB xHCI-DBC USB 3.0)

Windows용 디버깅 도구는 USB 3.0 케이블을 통해 커널 모드 디버깅을 지원합니다. 이 문서에서는 USB 3.0 디버깅을 수동으로 설정하는 방법을 설명합니다.

디버거를 실행하는 컴퓨터를 호스트 컴퓨터라고 하며 디버깅 중인 컴퓨터를 대상 컴퓨터라고 합니다.

USB 3.0 케이블을 통해 디버깅하려면 다음 하드웨어가 필요합니다.

  • 호스트 컴퓨터에서 xHCI(USB 3.0) 호스트 컨트롤러
  • 대상 컴퓨터에서 디버깅을 지원하는 xHCI(USB 3.0) 호스트 컨트롤러
  • 대상 컴퓨터 USB 호스트 컨트롤러는 Intel xHCI-Debug 기능 인터페이스(DBC)를 지원해야 합니다. 자세한 내용은 Intel 웹 사이트에서 사용할 수 있는 xHCI 사양을 참조하세요.

케이블 요구 사항

  • 주황색 Microsoft USB 디버그 케이블은 두 개의 남성 유형 A 플러그와 Vbus 연결이 없는 A-A 크로스오버 케이블입니다. 이 케이블은 DataPro - USB 3.0 초고속 A/A 디버깅 케이블과 같은 공급업체에서 사용할 수 있습니다.

문제 해결을 간소화하려면 허브 또는 도킹 스테이션을 방지하여 대상 컴퓨터와 호스트 컴퓨터 간에 직접 케이블을 연결합니다.

이진 전송 파일

이 kdstub.dll KDUSB xHCI-DBC USB 3.0 디버거 전송을 지원하는 데 사용됩니다.

대상 컴퓨터 설정

  1. 대상 컴퓨터에서 UsbView 도구를 시작합니다. UsbView 도구는 Windows용 디버깅 도구에 포함되어 있습니다. x64 시스템의 경우 UsbView는 C:\Program Files (x86)\Windows Kits\10\Tools\kitversion\x64\usbview.exe 있습니다.

  2. UsbView에서 모든 xHCI 호스트 컨트롤러를 찾습니다.

  3. UsbView에서 xHCI 호스트 컨트롤러의 노드를 확장합니다. 호스트 컨트롤러의 포트가 디버깅을 지원한다는 표시를 찾습니다.

    [Port1]
    
    Is Port User Connectable:         yes
    Is Port Debug Capable:            yes
    Companion Port Number:            3
    Companion Hub Symbolic Link Name: USB#ROOT_HUB30#5&32bab638&0&0#{...}
    Protocols Supported:
     USB 1.1:                         no
     USB 2.0:                         no
     USB 3.0:                         yes
    
  4. 디버깅에 사용하려는 xHCI 컨트롤러의 버스, 디바이스 및 함수 번호를 기록해 둡니다. UsbView는 이러한 숫자를 표시합니다. 다음 예제에서 버스 번호는 48, 디바이스 번호는 0, 함수 번호는 0입니다.

    USB xHCI Compliant Host Controller
    ...
    DriverKey: {36fc9e60-c465-11cf-8056-444553540000}\0020
    ...
    Bus.Device.Function (in decimal): 48.0.0
    
  5. 디버깅을 지원하는 xHCI 컨트롤러를 식별한 후 다음 단계는 xHCI 컨트롤러의 포트와 연결된 실제 USB 커넥터를 찾는 것입니다. 물리적 커넥터를 찾으려면 USB 3.0 디바이스를 대상 컴퓨터의 USB 커넥터에 연결합니다. UsbView를 새로 고쳐 디바이스가 있는 위치를 확인합니다. UsbView에서 선택한 xHCI 호스트 컨트롤러에 연결된 디바이스를 표시하는 경우 USB 3.0 디버깅에 사용할 수 있는 실제 USB 커넥터를 찾았습니다.

Important

bcdedit 부팅 정보를 변경하기 전에 테스트 PC에서 BitLocker 및 보안 부팅과 같은 Windows 보안 기능을 일시적으로 일시 중단해야 할 수 있습니다. 테스트가 완료되면 이러한 보안 기능을 다시 사용하도록 설정하고 보안 기능을 사용하지 않도록 설정하면 테스트 PC를 적절하게 관리합니다.

  1. 대상 컴퓨터에서 관리자 권한으로 명령 프롬프트 창을 열고 다음 명령을 입력합니다.

    bcdedit /debug on
    bcdedit /dbgsettings usb targetname:<TargetName>
    

    TargetName 은 대상 컴퓨터에 대해 만드는 이름입니다. TargetName대상 컴퓨터의 공식 이름이 될 필요는 없습니다. 이러한 제한 사항을 충족하는 한 만드는 모든 문자열일 수 있습니다.

    • 문자열은 대문자 또는 소문자를 조합하여 TargetName의 아무 곳이나 "디버그"를 포함해서는 안 됩니다. 예를 들어 대상 이름에서 "DeBuG" 또는 "DEBUG"를 사용하는 경우 디버깅이 제대로 작동하지 않습니다.
    • 문자열의 유일한 문자는 하이픈(-), 밑줄(_), 숫자 0~9, 문자 A~Z(대문자 또는 소문자)입니다.
    • 문자열의 최대 길이는 24자입니다.
  2. 장치 관리자 디버깅에 사용할 USB 컨트롤러를 찾습니다. 일반 탭의 위치 아래에 버스, 장치 및 함수 번호가 표시됩니다. 다음 명령을 입력합니다.

    bcdedit /set "{dbgsettings}" busparams <b.d.f>
    

    B, df 는 USB 호스트 컨트롤러의 버스, 디바이스 및 함수 번호입니다. 버스, 디바이스 및 기능 번호는 10진수 형식이어야 합니다.

    예시:

    bcdedit /set "{dbgsettings}" busparams 48.0.0
    
  3. 대상 컴퓨터를 다시 부팅합니다.

전원 관리 사용 안 함

경우에 따라 전원 전환이 USB 3.0을 통해 디버깅을 방해할 수 있습니다. 이러한 문제를 방지하려면 디버깅에 사용하는 xHCI 호스트 컨트롤러 및 해당 루트 허브에 대해 선택적 일시 중단을 사용하지 않도록 설정합니다.

  1. 장치 관리자 xHCI 호스트 컨트롤러의 노드로 이동합니다. 노드를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 전원 관리 탭이 있는 경우 탭을 열고 컴퓨터에서 이 디바이스를 해제하여 전원을 절약하도록 허용 확인란의 선택을 취소합니다.

  2. 장치 관리자 xHCI 호스트 컨트롤러의 루트 허브에 대한 노드로 이동합니다. 노드를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 전원 관리 탭이 있는 경우 탭을 열고 컴퓨터에서 이 디바이스를 해제하여 전원을 절약하도록 허용 확인란의 선택을 취소합니다.

디버깅에 xHCI 호스트 컨트롤러 사용을 마치면 xHCI 호스트 컨트롤러에 대해 선택적 일시 중단을 다시 사용하도록 설정합니다.

처음으로 디버깅 세션 시작

  1. 호스트 및 대상 컴퓨터에서 디버깅을 위해 선택한 USB 3.0 포트에 USB 3.0 디버그 케이블을 연결합니다.
  2. 호스트 컴퓨터에서 실행되는 Windows의 비트(32비트 또는 64비트)를 결정합니다.
  3. 호스트 컴퓨터에서 호스트 컴퓨터에서 실행되는 Windows의 비트와 일치하는 WinDbg(관리자 권한) 버전을 엽니다. 예를 들어 호스트 컴퓨터가 64비트 버전의 Windows를 실행하는 경우 관리자 권한으로 WinDbg의 64비트 버전을 엽니다.
  4. 파일 메뉴에서 커널 디버그를 선택합니다. 커널 디버깅 대화 상자에서 USB 탭을 엽니다. 대상 컴퓨터를 설정할 때 만든 대상 이름을 입력합니다. 확인을 클릭합니다.

이 시점에서 USB 디버그 드라이버가 호스트 컴퓨터에 설치되므로 WinDbg의 비트와 Windows 비트의 비트를 일치시키는 것이 중요합니다. USB 디버그 드라이버가 설치되면 후속 디버깅 세션에 32비트 또는 64비트 버전의 WinDbg를 사용할 수 있습니다.

디버깅 세션 시작

WinDbg 사용

호스트 컴퓨터에서 WinDbg를 엽니다. 파일 메뉴에서 커널 디버그를 선택합니다. 커널 디버깅 대화 상자에서 USB 탭을 엽니다. 대상 컴퓨터를 설정할 때 만든 대상 이름을 입력합니다. 확인을 선택합니다.

명령 프롬프트 창에서 다음 명령을 입력하여 WinDbg로 세션을 시작할 수도 있습니다. 여기서 TargetName 은 대상 컴퓨터를 설정할 때 만든 대상 이름입니다.

windbg /k usb:targetname=<TargetName>

KD 사용

호스트 컴퓨터에서 명령 프롬프트 창을 열고 다음 명령을 입력합니다. 여기서 TargetName 은 대상 컴퓨터를 설정할 때 만든 대상 이름입니다.

kd /k usb:targetname=<TargetName>

대상 컴퓨터 다시 부팅

디버거가 연결되면 대상 컴퓨터를 다시 부팅합니다. PC를 다시 부팅하는 한 가지 방법은 관리자의 명령 프롬프트에서 명령을 사용하는 shutdown -r -t 0 것입니다.

대상 PC가 다시 시작되면 디버거가 자동으로 연결됩니다.

문제 해결

USB 디바이스가 인식되지 않음

디버그 케이블을 삽입할 때 텍스트 USB 디바이스가 인식 되지 않는 호스트에 창 알림이 표시되면 알려진 USB 3.1~3.1 호환성 문제가 발생할 수 있습니다. 이 문제는 디버그 케이블이 호스트의 USB 3.1 컨트롤러와 대상의 Intel(Ice Lake 또는 Tiger Lake) 3.1 USB 컨트롤러에 연결된 경우 디버그 구성에 영향을 줍니다.

자세한 내용 및 프로세서 모델 목록은 Ice Lake(마이크로프로세서) 또는 Tiger Lake(마이크로프로세서)를 참조하세요. 대상 컴퓨터의 프로세서 모델을 찾으려면 설정 앱을 열고 System then About으로 이동합니다. 프로세서 는 디바이스 사양에 따라 나열됩니다.

이 문제를 확인하려면 장치 관리자 열고 유니버설 직렬 버스 컨트롤러에서 USB 디버그 연결 디바이스를 찾습니다. 이 디바이스를 찾을 수 없는 경우 다른 디바이스에서 알 수 없는 디바이스확인합니다. 디바이스를 마우스 오른쪽 단추로 클릭하여 해당 속성 페이지를 엽니다. 디바이스 상태 텍스트 상자에 Windows가 이 디바이스를 중지한 것은 문제를 보고했기 때문입니다(코드 43) . USB 디바이스에서 잘못된 USB BOS 설명자를 반환했습니다.

이 문제를 해결하려면 관리자 명령 프롬프트에서 다음 명령을 실행하여 레지스트리를 변경합니다.

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\349500E00000 /v SkipBOSDescriptorQuery /t REG_DWORD /d 1 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\045E06560000 /v SkipBOSDescriptorQuery /t REG_DWORD /d 1 /f

그런 다음 디버그 케이블을 제거하고 다시 삽입합니다.

연결은 디버거 콘솔 창에서 메시지를 다시 시도하며 대상에 침입할 수 없습니다. SkipPciProbeDebugDevice

KDNET 디버거 콘솔에서 다음 메시지가 표시되면 대상에 침입을 시작할 수 없거나 특정 명령(예: kdfiles)에 문제가 발생할 수 있습니다. 이는 KDNET이 시퀀스 외부 ping 패킷을 수신하기 때문일 수 있습니다."

... Retry sending the same data packet for 128 times.

The transport connection between host kernel debugger and target Windows seems lost.
please try resync with target, recycle the host debugger, or reboot the target Windows.

이 문제는 pci.sys 드라이버가 디버그 디바이스를 잘못 검색하기 때문에 발생할 수 있습니다. 오류를 제거하려면 관리자 명령 프롬프트에서 대상 디바이스에 다음 레지스트리 항목을 만듭니다.

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\SERVICES\kdnet /v SkipPciProbeDebugDevice /t REG_DWORD /d 1 /f

그런 다음 대상 컴퓨터를 다시 시작합니다.

shutdown /r /t 0

디바이스가 다시 부팅되면 오류가 사라지고 명령이 예상대로 작동해야 합니다.

참고 항목

수동으로 커널 모드 디버깅 설정

자동으로 KDNET 네트워크 커널 디버깅 설정

수동으로 KDNET 네트워크 커널 디버깅 설정

USB KDNET EEM 커널 모드 디버깅 설정(KDNET-EEM-USB)

USB KDNET 커널 모드 디버깅 설정(KDNET-USB)