다음을 통해 공유


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

Windows용 디버깅 도구는 USB를 통해 KDNET을 사용하여 USB 3.0 케이블을 통해 커널 모드 디버깅을 지원합니다. 이 문서에서는 이 전송 옵션을 구성하는 방법을 설명합니다.

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

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

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

이진 전송 파일

kdstub.dll 및 kdnic.sys 드라이버는 KDNET-USB 디버거 전송을 지원하는 데 사용됩니다.

케이블 요구 사항

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

  • 호스트 형식 A 포트를 대상 형식 C 포트에 연결하려면 표준 USB 3.0 형식 C를 A형 어댑터에 연결해야 합니다.

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

대상 컴퓨터 설정

  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. 버스 매개 변수를 확인해야 하는 경우 장치 관리자 사용합니다. 장치 관리자 디버깅에 사용할 USB 컨트롤러를 찾습니다. 일반 탭의 위치 아래에 버스, 장치 및 함수 번호가 표시됩니다. b, df 는 USB3 호스트 컨트롤러의 버스, 디바이스 및 함수 번호입니다. 버스, 디바이스 및 기능 번호는 10진수 형식이어야 합니다.

  6. kdnet.exe 사용하여 USB 컨트롤러에 대한 정보를 수집할 수도 있습니다.

    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64>kdnet
    
    Network debugging is supported on the following USB controllers:
    busparams=0.20.0, Intel(R) USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    
    This Microsoft hypervisor supports using KDNET in guest VMs.
    
  7. 디버깅을 지원하는 xHCI 컨트롤러를 식별한 후 다음 단계는 xHCI 컨트롤러의 포트와 연결된 실제 USB 커넥터를 찾는 것입니다. 물리적 커넥터를 찾으려면 USB 3.0 디바이스를 대상 컴퓨터의 USB 커넥터에 연결합니다. UsbView를 새로 고쳐 디바이스가 있는 위치를 확인합니다. UsbView에서 선택한 xHCI 호스트 컨트롤러에 연결된 디바이스를 표시하는 경우 USB 3.0 디버깅에 사용할 수 있는 실제 USB 커넥터를 찾았습니다.

Important

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

  1. 권장되는 범위인 50000-50039 내에서 작업하는 각 대상/호스트 쌍에 대해 고유한 <port address> 항목을 선택합니다. 50005는 아래 예제에 나와 있습니다.

  2. CPU 유형과 일치하는 WDK 디버거 디렉터리에서 KDNet.exe 유틸리티를 찾습니다(예: x64).

  3. 대상 컴퓨터에서 관리자 권한으로 명령 프롬프트 창을 열고 이 명령을 입력하여 옵션으로 -k 커널 디버깅을 사용하도록 설정합니다. -w, -b 및 -h는 winload, bootmgr 및 하이퍼바이저 시스템 애플리케이션에 커널 디버깅을 사용하도록 설정합니다. WinDbg 옵션에 대한 자세한 내용은 WinDbg - 명령줄 시작 옵션을 참조 하세요.

    kdnet.exe 169.254.255.255 50005 -k
    
    • 169.254.255.255 라우팅할 수 없는 링크 로컬 고정 IP 주소는 USB3을 통해 KDNET에 사용해야 합니다.
    • kdnet.exe WinDbg에서 대상 디바이스에 연결하는 데 사용할 키를 w.x.y.z 반환합니다.

    특정 USB 포트를 사용하려면 -busparams 매개 변수를 사용합니다.

    kdnet.exe -busparams 0.13.0 169.254.255.255 50005 -k
    

    KDNET 유틸리티를 사용하는 것이 좋습니다. 이 도구는 bcdedit를 사용하여 설정하기 더 복잡한 옵션을 설정하고 PCI 및 전원 관리에 대한 레지스트리 값을 확인하고 설정합니다.

    bcdedit /dbgsettings NET hostip:169.254.255.255 port:50001 key:1.2.3.4 busparams:0.20.0 noDhcp
    

전원 관리 사용 안 함

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

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

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

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

WinDbg를 사용하여 디버깅 세션 시작

  1. 호스트 및 대상 컴퓨터에서 디버깅을 위해 선택한 식별된 USB 3.0 포트에 USB 3.0 디버그 케이블을 연결합니다.

  2. 호스트 컴퓨터에서 호스트 컴퓨터에서 실행되는 Windows의 비트와 일치하는 WinDbg(관리자 권한) 버전을 엽니다. 예를 들어 호스트 컴퓨터가 64비트 버전의 Windows를 실행하는 경우 관리자 권한으로 WinDbg의 64비트 버전을 엽니다.

  3. [파일] 메뉴에서 [커널에 연결]을 선택합니다. 커널 디버깅 대화 상자에서 Net 탭을 엽니다. 다음 정보를 입력하고 확인을 클릭합니다.

    • <port address> 각 대상/호스트 쌍에 대해 고유하며 권장되는 범위인 50000-50039 내에 있는 값은 kdnet.exe 실행될 때 입력으로 제공되었습니다.

    • <session key> kdnet.exe 실행될 때 생성되고 명령 출력에 해당 값이 표시된 w.x.y.z입니다.

WinDbg를 사용하여 명령줄 세션

명령 프롬프트 창에서 이 명령을 입력하여 WinDbg로 세션을 시작할 수도 있습니다.

Windbg /k NET:port=<port address>,key=<session key>

대상 컴퓨터 다시 부팅

디버거가 로드되고 준비되면 대상 컴퓨터를 다시 부팅합니다. 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 드라이버가 디버그 디바이스를 검색하기 때문에 발생할 수 있습니다. 이러한 오류 메시지를 제거하려면 관리자 명령 프롬프트에서 대상 디바이스에 다음 레지스트리 항목을 만듭니다.

또한 이 설정을 사용하면 부팅 시 디버그 디바이스를 구성할 수 없는 경우와 같은 다른 이유로 인해 초기 KD 전송이 부팅 시 연결되지 않은 경우 디버거가 연결할 수 있습니다.

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

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

shutdown /r /t 0

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

향상된 성능 및 별칭을 위한 NO_KDNIC 설정

이더넷 NIC가 대상 PC에 설치된 경우 옵션을 설정하여 추가 안정성 및 성능 향상을 NO_KDNIC 달성할 수 있습니다.

bcdedit /set {current} loadoptions NO_KDNIC

추가 NO_KDNIC 는 선택 사항이며 대상에 WINDOWS에 대한 네트워크 액세스를 제공하기 위해 USB-이더넷 어댑터를 연결하는 추가 NIC, Wi-Fi 또는 USB 포트가 있는 경우에만 사용할 수 있습니다.

추가 NO_KDNIC 하면 kdnic.sys 드라이버(미니포트 타이머 기반 드라이버)가 KDNET 위에서 실행되지 않습니다. 즉, Windows TCP/IP 트래픽은 KDNET 전송을 통해 라우팅되지 않습니다. 그런 다음 KDNET 전송은 대상 KDNET과 호스트 디버거 간에 디버깅 관련 패킷을 라우팅하는 데만 사용할 수 있습니다.

이는 kdnic.sys 드라이버가 kdnet을 기반으로 실행 중일 때 영향을 받을 수 있는 네트워크 성능에 도움이 될 수 있습니다. 이 경우 대상은 절전 모드로 이동하지 않고 전원 드립 테스트를 방지하거나 RDP를 통해 대상에 액세스할 때 지연이 발생합니다. 이는 kdnic.sys 실행 중일 때 KDNET 인터페이스가 디버거 패킷과 Windows TCP/IP 네트워크 패킷을 모두 라우팅해야 하기 때문입니다.

참고 항목

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

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

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

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

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