设置 USB KDNET EEM 内核模式调试 (KDNET-EEM-USB)

Windows 调试工具支持使用以太网仿真模式通过 USB 电缆进行内核调试(EEM),本主题介绍如何使用 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 表数组条目。

电缆要求

  • 将主机类型 A 端口连接到目标 C 端口需要标准 USB 3.0 类型 C 到类型 A 电缆。

二进制传输文件

x64 的二进制文件kd_0C_8086.dll,ARM kd_8003_5143.dll用于支持 KDNET-EEM-USB 调试器传输。

确认目标上是否提供了受支持的 USB 控制器

在目标计算机上,启动设备管理器。

确认 已列出 Synopsys USB 3.0 双角色控制器

设备管理器屏幕截图,其中突出显示了 Synopsys USB 3.0 双角色控制器的 USB 节点。

确定多个端口可用时的调试端口

确定支持调试的端口后,下一步是找到与该端口关联的物理 USB 连接器。

例如,在 Surface Pro X 上,使用两个 USB C 端口的下部用于 KDNET EEM 调试。

具有两个 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。 通常,设备不使用 busparams=0,因为通常为串行设备 COM 保留 0 DBG2 表项。 有关 ACPI DBG2 表的详细信息,请参阅Microsoft调试端口表 2(DBG2)。

使用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 实用工具在目标电脑上配置调试器设置。

重要

在使用 bcdedit 更改启动信息之前,可能需要在测试电脑上暂时挂起 Windows 安全功能,例如 BitLocker 和安全启动。 使用 BCDEdit 更新启动信息后,可以重新启用 Bit Locker 和安全启动。 在禁用安全功能时,适当地管理测试电脑。

  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文件中的端口号和密钥。 选择“确定”

还可以通过打开命令提示符窗口并输入以下命令来启动 WinDbg 会话,其中内容为上述所选择的端口以及上述由 kdnet.exe 返回的密钥。 粘贴之前保存在记事本.txt文件中的密钥。

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

重新启动目标计算机

连接调试器后,重新启动目标计算机。 重启电脑的一种方法是使用 shutdown -r -t 0 管理员命令提示符中的命令。

目标电脑重启后,调试器应自动连接。

故障排除

故障排除目标

确认 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驱动程序错误地探测调试设备。 若要消除错误,请在管理员命令提示符下在 TARGET 设备上创建以下注册表项。

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)