USB KDNET EEM カーネル モード デバッグの設定 (KDNET-EEM-USB)
Windows 用デバッグ ツールでは、イーサネット エミュレーション モード (EEM) を使用した USB ケーブル経由のカーネル デバッグがサポートされています。このトピックでは、kdnet.exe ユーティリティを使用して USB EEM を設定する方法について説明します。
デバッガを実行するコンピューターは ホスト コンピューターと呼ばれ、デバッグ対象のコンピューターは ターゲット コンピューターと呼ばれます。
カーネル モード USB EEM デバイスの要件
次が必要です。
ターゲット・コンピュータ上に、USBタイプCポートに接続されたシノプシスのUSB 3.0コントローラ。
ホスト コンピューターでは、外部からアクセス可能な USB 3.0 ポートが必要です。
Windows 10 October 2020 Update (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 用のバイナリ kd_0C_8086.dllと ARM のkd_8003_5143.dllは、KDNET-EEM-USB デバッガー トランスポートをサポートするために使用されます。
サポートされているUSBコントローラがターゲット上で利用可能であることを確認します。
ターゲット・コンピュータでDevice Managerを起動します。
シノプシスのUSB 3.0 Dual-Role Controllerが表示されていることを確認します。
複数のポートが使用可能な場合のデバッグ・ポートの決定
デバッグをサポートするポートを特定したら、次はそのポートに関連する物理的なUSBコネクタを特定します。
たとえば、Surface Pro X では、KDNET EEM デバッグに使用される 2 つの USB C ポートの下位を使用します。
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 デバッグ ポート テーブル 2 (DBG2)を参照してください。
kdnet.exeを使用して KDNET EEM USB を構成する
KDNET-EEM-USB トランスポートデバッグをサポートするコントローラのパラメータ情報を表示するには、kdnet.exe ユーティリティを使用します。
Windows デバッグ ツールがホストおよびターゲット システムにインストールされていることを確認します。 デバッガー ツールのダウンロードとインストールについては、「Windows 用デバッグ ツール」を参照してください。
kdnet.exe ユーティリティを見つけます。 既定では、ファイルはここに配置されます。
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
ターゲット コンピューターで、管理者として [コマンド プロンプト] ウィンドウを開きます。 サポートされているネットワーク アダプターがこのコンピューターにあることを確認したり、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.
kdnet.exeからの出力は、busparamsの値が1のサポートされているUSBコントローラが利用可能であることを示しているので、次に進みます。
ターゲット コンピューターのセットアップ
kdnet.exeユーティリティを使用して、以下の手順でターゲットPCのデバッガ設定を構成します。
重要
BCDEdit を使用してブート情報を変更する前に、テスト PC で BitLocker やセキュア ブートなどの Windows セキュリティ機能を一時的に中断することが必要になる場合があります。 BCDEdit を使用してブート情報を更新したら、Bit Locker と Secure Boot を再度有効にできます。 セキュリティ機能が無効になっている場合は、テスト PC を適切に管理してください。
以下のコマンドを使用して、busparams 値、ホストシステムの IP アドレスとポートを設定し、一意の接続キーを生成します。 169.254.255.255 の IP アドレスは全ての USB EMM 接続に使用されます。
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
返されたキーをメモ帳の .txt ファイルにコピーします。 次の例では、生成されたキーには次の値が設定されています。
2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
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ファイルに保存したポート番号とキーを貼り付けます。 [OK] を選択します。
[コマンド プロンプト] ウィンドウを開き、次のコマンドを入力して、WinDbg セッションを開始することもできます。ここで、ポートは上記で選択したもの、キーは上記の kdnet.exe で返されたものになります。 メモ帳に保存したキーを貼り付けます。
windbg -k -d net:port=<YourDebugPort>,key=<YourKey>
ターゲット コンピューターを再起動する
デバッガーが接続されたら、ターゲット コンピューターを再起動します。 PCを再起動する1つの方法は、管理者のコマンドプロンプトからshutdown -r -t 0
コマンドを使用することです。
ターゲット PC を再起動したら、デバッガーは自動的に接続されます。
トラブルシューティング
トラブルシューティング
Windows KDNET-USB-EMMネットワークアダプタがWindowsデバイスマネージャのネットワークアダプタに存在することを確認します。
Windowsカーネルデバッガで使用するためにコントローラが予約されている場合、デバイスのプロパティが表示されます。
ホストのトラブルシューティング
Windows KDNET-USB-EMMネットワークアダプタがWindowsデバイスマネージャのネットワークアダプタに存在することを確認します。
ホスト上で、USBタイプAポートを使用したKDNET-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
デバイスが再起動すると、エラーは消え、コマンドは想定どおりに動作します。