다음을 통해 공유


USB 2.0 케이블을 통해 수동으로 커널 모드 디버깅 설정

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

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

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

  • USB 2.0 디버그 케이블. 이 케이블은 USB2 디버그 장치 기능 사양과 호환되는 추가 하드웨어 구성 요소가 있기 때문에 표준 USB 2.0 케이블이 아닙니다. 인터넷에서 USB 2.0 디버그 케이블이라는 용어를 검색하여 이러한 케이블을 찾을 수 있습니다.

  • 호스트 컴퓨터에서 EHCI(USB 2.0) 호스트 컨트롤러

  • 대상 컴퓨터에서 디버깅을 지원하는 EHCI(USB 2.0) 호스트 컨트롤러

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

대상 컴퓨터 설정

  1. 대상 컴퓨터에서 UsbView 도구를 시작합니다. UsbView 도구는 Windows용 디버깅 도구에 포함되어 있습니다.

  2. UsbView에서 EHCI 사양과 호환되는 모든 호스트 컨트롤러를 찾습니다. 예를 들어 고급으로 나열된 컨트롤러를 찾을 수 있습니다.

  3. UsbView에서 EHCI 호스트 컨트롤러의 노드를 확장합니다. 호스트 컨트롤러가 디버깅을 지원한다는 표시를 찾고 디버그 포트 수를 찾습니다. 예를 들어 UsbView는 포트 1에서 디버깅을 지원하는 EHCI 호스트 컨트롤러에 대해 이 출력을 표시합니다.

    Xxx xxx xxx USB2 Enhanced Host Controller - 293A
    ...
    Debug Port Number:  1
    Bus.Device.Function (in decimal): 0.29.7
    

    많은 EHCI 호스트 컨트롤러는 포트 1에서 디버깅을 지원하지만 일부 EHCI 호스트 컨트롤러는 포트 2에서 디버깅을 지원합니다.

  4. 디버깅에 사용하려는 EHCI 컨트롤러의 버스, 디바이스 및 함수 번호를 기록해 둡니다. UsbView는 이러한 숫자를 표시합니다. 앞의 예제에서 버스 번호는 0이고, 디바이스 번호는 29이고, 함수 번호는 7입니다.

  5. 디버깅을 지원하는 EHCI 컨트롤러 및 포트 번호를 확인한 후 다음 단계는 올바른 포트 번호와 연결된 실제 USB 커넥터를 찾는 것입니다. 물리적 커넥터를 찾으려면 USB 2.0 디바이스를 대상 컴퓨터의 USB 커넥터에 연결합니다. UsbView를 새로 고쳐 디바이스가 있는 위치를 확인합니다. UsbView에서 디버그 포트로 식별된 EHCI 호스트 컨트롤러 및 포트에 연결된 디바이스를 표시하는 경우 디버깅에 사용할 수 있는 실제 USB 커넥터를 찾았습니다. EHCI 컨트롤러의 디버그 포트와 연결된 외부 물리적 USB 커넥터가 없을 수 있습니다. 이 경우 컴퓨터 내에서 실제 USB 커넥터를 찾을 수 있습니다. 동일한 단계를 수행하여 내부 USB 커넥터가 커널 디버깅에 적합한지 여부를 확인합니다. 디버그 포트와 연결된 실제 USB 커넥터(외부 또는 내부)를 찾을 수 없는 경우 USB 2.0 케이블을 통해 디버깅을 위한 대상으로 컴퓨터를 사용할 수 없습니다.

    예외는 이 설명에 유의하세요.

Important

bcdedit를 사용하여 부팅 정보를 변경하기 전에 테스트 PC에서 BitLocker 및 보안 부팅과 같은 Windows 보안 기능을 일시적으로 일시 중단해야 할 수 있습니다. 디버깅을 완료하고 커널 디버깅을 사용하지 않도록 설정한 후에는 보안 부팅을 다시 사용하도록 설정할 수 있습니다.

  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 는 호스트 컨트롤러의 버스, 디바이스 및 함수 번호입니다. 버스, 디바이스 및 함수 번호는 10진수 형식이어야 합니다(예 : busparams 0.29.7).

  1. 대상 컴퓨터를 다시 부팅합니다.

호스트 컴퓨터 설정

  1. 호스트 컴퓨터가 USB 디버깅의 대상으로 구성되지 않은지 확인합니다. (필요한 경우 관리자 권한으로 명령 프롬프트 창을 열고 bcdedit /debug off를 입력하고 다시 부팅합니다.)
  2. 호스트 컴퓨터에서 UsbView를 사용하여 디버깅을 지원하는 EHCI 호스트 컨트롤러 및 포트를 찾습니다. 가능하면 USB 2.0 디버그 케이블의 한쪽 끝을 디버깅을 지원하지 않는 EHCI 포트(호스트 컴퓨터)에 연결합니다. 그렇지 않으면 호스트 컴퓨터의 EHCI 포트에 케이블을 연결합니다.
  3. USB 2.0 디버그 케이블의 다른 쪽 끝을 대상 컴퓨터에서 이전에 식별한 커넥터에 연결합니다.

처음으로 디버깅 세션 시작

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

이때 USB 디버그 드라이버가 호스트 컴퓨터에 설치됩니다. 따라서 WinDbg의 비트와 Windows 비트의 비트를 일치해야 합니다. USB 디버그 드라이버가 설치되면 후속 디버깅 세션에 32비트 또는 64비트 버전의 WinDbg를 사용할 수 있습니다.

USB 2.0 디버그 케이블은 실제로 중간에 동글이 있는 두 개의 케이블입니다. 동글의 방향이 중요합니다. 한쪽은 디바이스의 전원을, 다른 쪽은 그렇지 않습니다. USB 디버깅이 작동하지 않는 경우 동글의 방향을 교환해 보세요. 즉, 동글에서 두 케이블을 분리하고 케이블이 연결된 측면을 교환합니다.

디버깅 세션 시작

WinDbg 사용

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

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

windbg /k usb:targetname=TargetName

KD 사용

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

kd /k usb:targetname=TargetName

USBView에 디버그 가능 포트가 표시되지만 실제 커넥터에 매핑된 포트가 표시되지 않으면 어떻게 될까요?

일부 컴퓨터에서 USBView는 디버그 가능 포트를 표시하지만 실제 USB 커넥터에 매핑된 포트는 표시하지 않습니다. 예를 들어 USBView는 eHCI 컨트롤러에 대한 디버그 포트 번호로 포트 2를 표시할 수 있습니다.

... USB Enhanced Host Controller ...
...
Debug Port Number:  2
Bus.Device.Function (in decimal): 0.29.0

또한 USBView를 사용하여 개별 포트를 살펴보면 디버그 가능으로 나열됩니다.

[Port 2]
Is Port User Connectable: Yes
Is Port Debug Capable: Yes
...
Protocols Supported
  USB 1.1      yes
  USB 2.0      yes
  USB 3.0      no

그러나 USB 2.0 디바이스(예: 플래시 드라이브)를 컴퓨터의 모든 USB 커넥터에 연결하는 경우 USBView는 디버그 가능 포트(이 예제의 포트 2)에 연결된 디바이스를 표시하지 않습니다. 실제로 외부 커넥터가 eHCI 컨트롤러의 디버그 가능 포트에 매핑되는 경우 USBView는 xHCI 컨트롤러의 포트에 매핑된 외부 커넥터를 표시할 수 있습니다.

USBView의 xHCI 및 EHCI 컨트롤러 스크린샷

이와 같은 경우 USB 2.0 케이블을 통해 커널 모드 디버깅을 설정할 수 있습니다. 여기에 제공된 예제에서는 USB 2.0 디버그 케이블을 xHCI 컨트롤러의 포트 2에 매핑되는 것으로 표시되는 커넥터에 연결합니다. 그런 다음, 버스 매개 변수를 eHCI 컨트롤러의 버스, 디바이스 및 함수 번호로 설정합니다(이 예제에서는 0.29.0).

bcdedit /set "{dbgsettings}" busparams 0.29.0

추가 지원

문제 해결 팁 및 기타 정보는 Microsoft USB 블로그를 참조하세요.

참고 항목

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