다음을 통해 공유


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

Windows용 디버깅 도구는 EEM(이더넷 에뮬레이션 모드)을 사용하여 USB 케이블을 통해 커널 디버깅을 지원합니다. 이 항목에서는 kdnet.exe 유틸리티를 사용하여 USB EEM을 설정하는 방법을 설명합니다.

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

커널 모드 USB EEM 디바이스 요구 사항

다음이 필요합니다.

  • 대상 컴퓨터에서 Synopsys USB 3.0 컨트롤러가 USB 형식 C 포트에 연결됩니다.

  • 호스트 컴퓨터에서 외부에서 액세스할 수 있는 USB 3.0 포트가 필요합니다.

  • Windows 10 2020년 10월 업데이트(20H2) 이상

KDNET-EEM-USB 전송은 다음을 위해 구성할 수 있습니다.

  • PCI 디버그 디바이스. 이러한 디버그 디바이스는 dbgsettings::busparams=seg.bus.dev.fun을 사용하여 설정됩니다.
  • ACPI-DBG2 테이블 디버그 디바이스. 이러한 디버그 디바이스는 dbgsettings::busparams=1|2|3을 사용하여 설정되며, 1|2|3은 디버그 디바이스 구성을 포함하는 특정 ACPI DBG2-Table 배열 항목을 가리킵니다.

케이블 요구 사항

  • 호스트 형식 A 포트를 대상 형식 C 포트에 연결하려면 표준 USB 3.0 형식 C-A 케이블이 필요합니다.

이진 전송 파일

x64 및 ARM용 kd_8003_5143.dll kd_0C_8086.dll 이진 파일은 KDNET-EEM-USB 디버거 전송을 지원하는 데 사용됩니다.

지원되는 USB 컨트롤러를 대상에서 사용할 수 있는지 확인합니다.

대상 컴퓨터에서 장치 관리자 시작합니다.

Synopsys USB 3.0 이중 역할 컨트롤러가 나열되어 있는지 확인합니다.

Synopsys USB 3.0 이중 역할 컨트롤러가 강조 표시된 USB 노드를 표시하는 장치 관리자 스크린샷

여러 포트를 사용할 수 있는 경우 디버깅 포트 확인

디버깅을 지원하는 포트를 식별한 후 다음 단계는 해당 포트와 연결된 실제 USB 커넥터를 찾는 것입니다.

예를 들어 Surface Pro X에서는 KDNET EEM 디버깅에 사용되는 두 개의 USB C 포트 중 아래쪽을 사용합니다.

두 개의 USB-C 포트가 있는 Surface Pro X 측면의 사진입니다.

kdnet.exe 사용하여 디바이스 지원 확인 및 busparams 값 보기

Intel/AMD 64 디바이스

BCDEDIT 디버그 옵션은 BCD(부팅 구성 데이터) 저장소에 저장됩니다. 자세한 내용은 BCDEdit /debug를 참조하세요.

ARM 장치

ARM 디바이스는 디버거를 구성하기 위해 ACPI DBG2 테이블을 사용합니다. 여기서 busparams는 DBG2 테이블 항목을 가리킵니다. 사용할 디버깅 포트를 지정하기 위해 busparm이 사용됩니다. 일반적으로 첫 번째 busparam만 사용되며 디바이스에 따라 0 또는 1입니다. 일반적으로 디바이스는 0 DBG2 테이블 항목이 일반적으로 직렬 디바이스 COM용으로 예약되므로 busparams=0을 사용하지 않습니다. ACPI DBG2 테이블에 대한 자세한 내용은 Microsoft DBG2(디버그 포트 테이블 2)를 참조하세요.

kdnet.exe 사용하여 KDNET EEM USB 구성

kdnet.exe 유틸리티를 사용하여 KDNET-EEM-USB 전송 디버깅을 지원하는 컨트롤러에 대한 매개 변수 정보를 표시합니다.

  1. Windows 디버깅 도구가 호스트 및 대상 시스템에 설치되어 있는지 확인합니다. 디버거 도구 다운로드 및 설치에 대한 자세한 내용은 Windows용 디버깅 도구를 참조 하세요.

  2. kdnet.exe 유틸리티를 찾습니다. 기본적으로 파일은 여기에 있습니다.

    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

  3. 대상 컴퓨터에서 관리자 권한으로 명령 프롬프트 창을 엽니다. 대상 컴퓨터에 지원되는 네트워크 어댑터가 있는지 확인하고 busparams 값을 보려면 이 명령을 입력합니다.

    C:\KDNET>kdnet.exe
    
    Network debugging is not supported on any of the NICs in this machine.
    KDNET supports NICs from Intel, Broadcom, Realtek, Atheros, Emulex, Mellanox
    and Cisco.
    
    Network debugging is supported on the following USB controllers:
    busparams=1, Device-mode USB controller with Vendor ID: 5143 (Default)
    busparams=2, Device-mode USB controller with Vendor ID: 5143
    busparams=3, Device-mode USB controller with Vendor ID: 5143
    busparams=4, Device-mode USB controller with Vendor ID: 5143
    
    This Microsoft hypervisor supports using KDNET in guest VMs.
    
  4. kdnet.exe 출력은 버스 매개 변수 값이 1인 지원되는 USB 컨트롤러를 사용할 수 있음을 나타내므로 계속 진행할 수 있습니다.

대상 컴퓨터 설정

kdnet.exe 유틸리티를 사용하여 다음 단계에 따라 대상 PC에서 디버거 설정을 구성합니다.

Important

bcdedit를 사용하여 부팅 정보를 변경하기 전에 테스트 PC에서 BitLocker 및 보안 부팅과 같은 Windows 보안 기능을 일시적으로 일시 중단해야 할 수 있습니다. BCDEdit을 사용하여 부팅 정보를 업데이트한 후에는 Bit Locker 및 Secure Boot를 다시 사용하도록 설정할 수 있습니다. 보안 기능이 비활성화된 경우 테스트 PC를 적절하게 관리합니다.

  1. 아래 표시된 명령을 사용하여 호스트 시스템의 버스 매개 변수 값, IP 주소 및 포트를 설정하고 고유한 연결 키를 생성합니다. 169.254.255.255 IP 주소는 모든 USB EMM 연결에 사용됩니다.

  2. 권장 범위인 50000-50039 내에서 작업하는 각 대상/호스트 쌍에 대한 고유한 포트 주소를 선택합니다. 50005는 예제에 나와 있습니다.


   C:\>kdnet.exe 169.254.255.255 50005

   Enabling network debugging on Intel(R) 82577LM Gigabit Network Connection.
   Key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
  1. 반환된 키를 메모장 .txt 파일에 복사합니다. 표시된 예제에서 생성된 키의 값은 다음과 같습니다.

    2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

  2. BCDEdit 명령을 사용하여 매개 변수가 예상대로 표시되는지 확인합니다. 자세한 내용은 BCDEdit /dbgsettings를 참조 하세요.

   C:\>bcdedit /dbgsettings

   busparams               1
   key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
   debugtype               NET
   hostip                  169.254.255.255
   port                    50005
   dhcp                    No
   The operation completed successfully.

호스트에서 방화벽 사용 안 함

호스트에서 디버거에 대한 방화벽을 사용하지 않도록 설정합니다.

커널 디버깅을 위해 WinDbg를 대상에 연결

호스트 컴퓨터에서 WinDbg를 엽니다. 파일 메뉴에서 커널 디버그를 선택합니다. 커널 디버깅 대화 상자에서 Net 탭을 엽니다. 이전에 메모장 .txt 파일에 저장한 포트 번호와 키를 붙여넣습니다. 확인을 선택합니다.

명령 프롬프트 창을 열고 위에서 선택한 포트와 위의 kdnet.exe 반환한 키인 다음 명령을 입력하여 WinDbg 세션을 시작할 수도 있습니다. 이전에 저장한 키를 메모장 .txt 파일에 붙여넣습니다.

windbg -k -d net:port=<YourDebugPort>,key=<YourKey>

대상 컴퓨터 다시 부팅

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

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

문제 해결

대상 문제 해결

Windows 장치 관리자 네트워크 어댑터 아래에 Windows KDNET-USB-EMM 네트워크 어댑터가 있는지 확인합니다.

디바이스 속성은 컨트롤러가 Windows 커널 디버거에서 사용하도록 예약된 경우 표시됩니다.

컨트롤러가 예약되었음을 나타내는 Synopsys USB 3.0 이중 역할 컨트롤러가 있는 USB 노드를 표시하는 장치 관리자 스크린샷

호스트 문제 해결

Windows 장치 관리자 네트워크 어댑터 아래에 Windows KDNET-USB-EMM 네트워크 어댑터가 있는지 확인합니다.

호스트에서 USB 유형 A 포트를 사용하는 KDNET-EEM 연결이 표시됩니다.

Windows KDNET USB-EEM 네트워크 어댑터 항목이 있는 네트워크 노드를 표시하는 장치 관리자 스크린샷

Intel PCI - 연결이 디버거 콘솔 창에서 메시지를 다시 시도하며 대상에 침입할 수 없음 - 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 3.0 xHCI-DBC 커널 모드 디버깅 설정(KDUSB)

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