次の方法で共有


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 Web サイトで入手できる xHCI 仕様を参照してください。

バイナリ トランスポート ファイル

KDSTUB.DLLおよびkdnic.sys ドライバーは、KDNET-USB デバッガー トランスポートをサポートするために使用されます。

ケーブルの要件

  • オレンジ色の Microsoft USB デバッグ ケーブル。これは、2 つのオス型 A プラグと Vbus 接続がない A-A クロスオーバー ケーブルです。 このケーブルは、DataPro - USB 3.0 Super-Speed A/A デバッグ ケーブルなどのベンダーから入手できます

  • ホストタイプAポートをターゲットタイプCポートに接続するには、タイプAアダプタへの標準USB 3.0タイプCが必要です。

トラブルシューティングを簡素化するため、ハブやドッキング・ステーションを避けて、ターゲット・コンピュータとホスト・コンピュータの間にケーブルを直接接続してください。

ターゲット コンピューターを設定する

  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コントローラを探します。 GeneralタブのLocationの下に、バス番号、デバイス番号、ファンクション番号が表示されます。 bd、および f は、USB3 ホスト コントローラーのバス、デバイス、および関数番号です。 bus、device、function の番号は 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コネクタが見つかったことになります。

重要

bcdeditまたはkdnet.exeを使用してブート情報を変更する前に、テスト PC で BitLocker やセキュア ブートなどの Windows セキュリティ機能を一時的に中断することが必要になる場合があります。 テストが完了したらこれらのセキュリティ機能を再度有効にし、セキュリティ機能が無効になっている場合はテストPCを適切に管理します。

  1. 推奨される 50000 から 50039 の範囲内で、操作するターゲット/ホスト ペアごとに一意の <port address> を選択します。 50005 を以下の例に示します。

  2. CPU の種類 (x64 など) に一致する WDK デバッガー ディレクトリで、KDNet.exe ユーティリティを見つけます。

  3. ターゲット コンピューターで、管理者としてコマンド プロンプト ウィンドウを開き、このコマンドを入力して、 -k オプションを使用してカーネル デバッグを有効にします。 -w、-b、および -h は、winload、bootmgr、ハイパーバイザー システム アプリケーションのカーネル デバッグを有効にします。WinDbg オプションの詳細については、「 WinDbg - コマンド ラインスタートアップ オプションを参照してください。

    kdnet.exe 169.254.255.255 50005 -k
    
    • 169.254.255.255 USB3 経由の KDNET では、ルーティング不可能なリンク ローカル静的 IP アドレスを使用する必要があります。
    • 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ホストコントローラのノードに移動します。 ノードを右クリックし、Propertiesを選択します。 [電源管理]タブがある場合は、そのタブを開き、[電力を節約するためにコンピュータがこのデバイスの電源を切ることを許可する]チェックボックスをオフにします。

  2. デバイスマネージャで、xHCIホストコントローラのルートハブのノードに移動します。 ノードを右クリックし、Propertiesを選択します。 [電源管理]タブがある場合は、そのタブを開き、[電力を節約するためにコンピュータがこのデバイスの電源を切ることを許可する]チェックボックスをオフにします。

xHCIホストコントローラをデバッグに使用し終わったら、xHCIホストコントローラの選択的サスペンドを再度有効にします。

WinDbg を使用してデバッグ セッションを開始する

  1. USB 3.0 デバッグ ケーブルを、ホストコンピューターとターゲット コンピューターでのデバッグ用に選択した特定の USB 3.0 ポートに接続します。

  2. ホストコンピュータで、ホストコンピュータで実行されているWindowsのビットサイズに合ったバージョンのWinDbgを(管理者として)開きます。 例えば、ホスト・コンピュータがWindowsの64ビット・バージョンを実行している場合、64ビット・バージョンのWinDbgをAdministratorとして開きます。

  3. [ File メニューの [カーネルへのアタッチ] 選択。 [カーネル デバッグ] ダイアログ ボックスで、[ Net ] タブを開きます。次の情報を入力し、[ OK] をクリック

    • ターゲットとホストのペアごとに一意であり、推奨される 50000 から 50039 の範囲内にある <port address> は、kdnet.exeの実行時に入力として提供されました。

    • kdnet.exeの実行時に生成され、その値がコマンド出力に表示された <session key> w.x.y.z。

WinDbg を使用したコマンド ライン セッション

コマンド プロンプト ウィンドウでこのコマンドを入力して、WinDbg とのセッションを開始することもできます。

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

ターゲット コンピューターを再起動する

デバッガーが読み込まれて準備ができたら、ターゲット コンピューターを再起動します。 PCを再起動する1つの方法は、管理者のコマンドプロンプトから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(マイクロプロセッサー)を参照してください。 ターゲット・マシンのプロセッサー・モデルを確認するには、設定アプリを開き、「システム」「バージョン情報」と進みます。 「プロセッサ」「デバイスの仕様」の下に表示されます。

この問題を確認するには、デバイス・マネージャーを開き、ユニバーサル・シリアル・バス・コントローラーの下にあるUSBデバッグ接続デバイスを探します。 このデバイスが見つからない場合は、「その他のデバイス」の下に「不明なデバイス」がないか確認します。 デバイスを右クリックしてプロパティ・ページを開きます。 デバイス ステータス テキスト ボックスには、「問題が報告されたため (コード 43)、Windows がこのデバイスを停止しました。」および「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の追加は省略可能であり、ターゲットに USB イーサネット アダプターを接続して Windows へのネットワーク アクセスを提供する追加の NIC、Wi-Fi、または USB ポートがある場合にのみ使用できます。

NO_KDNICを追加すると、KDNIC.SYS ドライバー (ミニポート タイマー ベースのドライバー) が KDNET 上で実行されなくなります。つまり、Windows TCP/IP トラフィックは KDNET トランスポート経由でルーティングされません。 その後、KDNET トランスポートは、ターゲット KDNET とホスト デバッガーの間でデバッグ関連のパケットをルーティングするためにのみ使用できます。

これは、kdnic.sys ドライバーが kdnet 上で実行されているときに影響を受ける可能性があるネットワーク パフォーマンスに役立ちます。 この状況では、ターゲットがスリープ状態になることがなく、電源ドリップ テストを防ぐか、RDP 経由でターゲットにアクセスするときに遅延が発生します。 これは、KDNET インターフェイスは、デバッガー パケットと Windows TCP/IP ネットワーク パケットの両方を、kdnic.sys実行中にルーティングする必要があるためです。

関連項目

KDNET ネットワーク カーネル デバッグの自動設定

KDNET ネットワーク カーネル デバッグの手動設定

カーネルモードデバッグを手動で設定する

USB 3.0 xHCI-DBC カーネル モード デバッグ (KDUSB) の設定

USB KDNET EEM カーネル モード デバッグの設定 (KDNET-EEM-USB)