Compartir a través de


Configuración de la depuración en modo kernel 2PF mediante KDNET

Las herramientas de depuración para Windows admiten la depuración de kernel a través de un cable de red mediante varias funciones físicas (PF) en las NIC admitidas mediante la creación de particiones del espacio de configuración PCI.

Con la depuración 2PF, cada PF se puede conectar a un único puerto de red, lo que permite que la funcionalidad de depuración del kernel se conecte a una PF mientras la pila de red estándar se comunica con la otra PF. Debido a esto, KDNIC no necesita enrutar el tráfico de red de Windows a través de KDNET y KDNET solo será responsable del enrutamiento del tráfico del depurador del kernel de host. Esto da como resultado un aumento drástico del rendimiento.

En este tema se describe cómo configurar la depuración 2PF mediante la utilidad kdnet.exe.

Se recomienda a los proveedores de tarjetas de red habilitar la compatibilidad con esta característica. Para obtener más información, consulte Compatibilidad con el controlador de red de minipuerto de depurador 2PF KDNET.

Dos controladores se ejecutarán en el espacio de configuración PCI particionado.

  • El controlador de bandeja de entrada de Windows se ejecutará fuera del puerto de red principal en la ubicación de PCI bus.dev.fun0.0.

  • El módulo KDNET-Ext. se quedará sin la PF agregada en bus.dev.fun0.1. Esta técnica garantiza que el controlador NIC de la bandeja de entrada de Windows no se vea afectado al compartir la NIC con KDNET.

El equipo que ejecuta el depurador se denomina equipo host y el equipo que se depura se denomina equipo de destino.

Requisitos del dispositivo 2PF en modo kernel

Se necesita lo siguiente:

  • En el equipo de destino, una tarjeta de red 2PF compatible.

  • En el equipo host, una tarjeta de red.

  • Una conexión de red entre el destino y el host.

  • Windows 10, compilación 21313 y posteriores.

Tarjetas de red compatibles con 2PF

Los proveedores como NVIDIA Mellanox y Cisco proporcionan NIC que admiten la depuración de red 2PF. Consulte con el proveedor de tarjetas de red para ver qué modelos de la tarjeta de red se admiten. Tenga en cuenta que algunos proveedores admiten 2PF en un subconjunto de tarjetas de red que comparten el mismo identificador de PnP.

Use kdnet.exe para confirmar la compatibilidad del dispositivo y ver el valor de busparams

Use la utilidad kdnet.exe para mostrar la información de parámetros de los controladores que admiten la depuración de transporte KDNET 2PF.

  1. Confirme que las herramientas de depuración de Windows estén instaladas en el sistema host. Para obtener información sobre cómo descargar e instalar las herramientas del depurador, consulte Herramientas de depuración para Windows.

  2. Busque los archivos kdnet.exe y VerifiedNICList.xml. De forma predeterminada, se encuentran aquí.

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

  3. En el equipo host, copie los dos archivos en un recurso compartido de red o una unidad USB, de modo que estén disponibles en el equipo de destino.

  4. En el equipo de destino, cree un directorio C:\KDNET y copie los archivos kdnet.exe y VerifiedNICList.xml en ese directorio.

  5. En el equipo de destino, abra una ventana de símbolo del sistema como administrador. Escriba este comando para comprobar que el equipo de destino tiene un adaptador de red compatible y para ver el valor de busparams.

    
    C:\KDNET>kdnet.exe
    
    Network debugging is supported on the following NICs:
    busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, Plugged in, Primary function, multiple physical functions are supported.
    
    Network debugging is supported on the following USB controllers:
    busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    

    Dado que la salida mostrada arriba no incluye "KDNET se está ejecutando en esta NIC.", esto indica que la depuración de KDNET tradicional no está habilitada en ninguno de los adaptadores.

    Si la NIC no admite la característica de PF múltiple, la notificación de estado de PF de "se admiten varias funciones físicas" se omitirá (en blanco) de la información mostrada.

    Si la NIC admite varias PF, la información mostrada real dependerá de la combinación del puerto de red (puerto raíz/puerto agregado de PF), así como del estado conectado o desconectado del cable hacia o desde el puerto físico de la NIC.

    En esta tabla se resumen las distintas notificaciones de PF de la NIC principal.

    El adaptador de NIC bus.dev.fun corresponde a Estado del cable Estado de PF
    original (principal) Cable de PF conectado Función principal, se habilitan varias funciones físicas
    original (principal) Cable de PF desconectado Función principal, se admiten varias funciones físicas

    En esta tabla se resumen las distintas notificaciones de PF de la NIC secundaria.

    El adaptador de NIC bus.dev.fun corresponde a Estado del cable Estado de PF
    puerto de PF nuevo (secundario) Kdnet se está ejecutando Función secundaria
    puerto de PF nuevo (secundario) cable desconectado o estado desconocido Función principal, se habilitan varias funciones físicas, pero no se usa la función secundaria.
  6. Si la salida de kdnet.exe indica que hay disponible un controlador NIC compatible, podemos continuar.

Configuración del equipo de destino para 2PF

Use la utilidad kdnet.exe para configurar los valores del depurador en el equipo de destino para 2PF, siguiendo estos pasos.

Importante

Antes de usar bcdedit para cambiar la información de arranque, es posible que deba suspender temporalmente las características de seguridad de Windows, como BitLocker y Arranque seguro, en el equipo de prueba. Puede volver a habilitar Bit Locker y el arranque seguro una vez que haya terminado de usar BCDEdit para actualizar la información de arranque. Administre correctamente el equipo de prueba cuando las características de seguridad estén deshabilitadas.

Este proceso agregará una nueva función física (PF) a la NIC, especificada por bus.device.function. La nueva PF solo la puede usar KDNET, ya que el controlador de bandeja de entrada de Windows está configurado para no ejecutarse en una PF secundaria agregada. Siga estos pasos para agregar una nueva PF que usará el dispositivo de depuración.

Confirme que la depuración está deshabilitada antes de agregar la nueva función física

  1. Use el comando BCDEdit para confirmar que el KD está deshabilitado en el destino antes de agregar una nueva PF en la NIC. Esto es necesario para asegurarse de que el controlador NIC del proveedor estándar está cargado para que se pueda usar para agregar la nueva PF.
C:\> bcdedit /enum 
...

debug           No

Como alternativa, use kdnet.exe sin parámetros para ver si la depuración está habilitada. La salida siguiente muestra KDNET en ejecución en un sistema con la depuración habilitada en una NIC. Esta es la configuración heredada de menor rendimiento.


c:\Debuggers>kdnet

Network debugging is supported on the following NICs:
busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, KDNET is running on this NIC.

Network debugging is supported on the following USB controllers:
busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
  1. Si el valor de depuración se establece en , use el comando set para deshabilitar la depuración.
C:\> bcdedit.exe /debug off
C:\> bcdedit.exe /set {default} bootdebug off
C:\> bcdedit.exe /set {bootmgr} bootdebug off
  1. Use el comando shutdown -r -t 0 desde el símbolo del sistema de un administrador para reiniciar.

Una vez reiniciado el equipo de destino y deshabilitada la depuración, podemos añadir la nueva función física.

Adición de la nueva función física

  1. Abra un símbolo del sistema con privilegios elevados y ejecute el comando para agregar una segunda PF. Todos los valores se proporcionan mediante valores decimales.
C:\KDNET> kdnet -addpf 141.0.0 198.51.100.1 50001

Succeeded adding a Pci PF on :141.0.1. Please power off or reboot the machine.

Enabling network debugging on Mellanox ConnectX-4 Lx Ethernet Adapter #2.
Manage-bde.exe not present.  Bitlocker presumed disabled.

To debug this machine, run the following command on your debugger host machine.
windbg -k net:port=50001,key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

Then reboot this machine by running shutdown -r -t 0 from this command prompt.

bus.dev.fun es el puerto de ubicación PCI del adaptador de NIC que admite la característica de PF múltiple, por lo que la nueva PF se agregará o conectará a este dispositivo de red.

La opción -addpf habilita automáticamente la depuración del kernel a través del transporte KDNET en el puerto de la PF agregada.

[host name/host ip address] es la dirección TCP/IP del equipo host. Use el comando ipconfig en el equipo host para determinar esta dirección.

[port number] es el número de puerto TCP/IP. Puede elegir cualquier número de puerto entre 49152 y 65535. El intervalo recomendado está comprendido entre 50000 y 50039. El puerto que elija se abrirá para el acceso exclusivo del depurador que se ejecuta en el equipo host. Elija una dirección de puerto única para cada par de destino/host con el que trabaje, dentro del intervalo recomendado de 50000-50039. En este ejemplo se muestra 50005.

Tenga en cuenta que -addpf también agregará el atributo NO_KDNIC a {default} loadoptions de la instalación del sistema operativo. Esto se debe a que KDNIC ya no es necesario para ejecutarse encima de KDNET.

loadoptions = NO_KDNIC se agrega a la etiqueta del sistema operativo {default} para asegurarse de que kdnic.sys no se agotará de la PF recién agregada (141.0.1)

Use el comando bcdedit para confirmar que NO_KDNIC se ha establecido.

C:\KDNET> bcdedit /enum {default}

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Windows Server
locale                  en-US
loadoptions             NO_KDNIC
inherit                 {bootloadersettings}
recoverysequence        {c23c4005d-12ae-11eb-9399-ac9840c152e7}
displaymessageoverride  Recovery
recoveryenabled         Yes
bootdebug               No
testsigning             Yes
isolatedcontext         Yes
flightsigning           Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \Windows
resumeobject            {c23c4005d-12ae-11eb-9399-ac9840c152e7}
nx                      OptOut
debug                   Yes
hypervisordebug         No

2. Run the bcdedit /enum command to display the generated key.

```console
C:\KDNET> bcdedit /dbgsettings
busparams               141.0.1
key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
debugtype               NET
hostip                  198.51.100.1
port                    50001
dhcp                    Yes
The operation completed successfully.
   
  1. Copie la clave devuelta en un archivo .txt del bloc de notas. En el ejemplo que se muestra, la clave generada tiene un valor de:

    2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

  2. Opcionalmente, use kdnet.exe para confirmar que están habilitadas varias funciones físicas.

C:\KDNET> kdnet.exe

Network debugging is supported on the following NICs:
busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, Plugged in, Primary function, multiple physical functions are enabled.
busparams=141.0.1, Mellanox ConnectX-4 Lx Ethernet Adapter, KDNET is running on this NIC, Secondary function.

Network debugging is supported on the following USB controllers:
busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)

Deshabilitación del firewall en el host

En el host, deshabilite el firewall para el puerto del depurador.

Conexión de winDbg al destino para la depuración de kernel

En el equipo host, abra WinDbg. En el menú Archivo, elija Depuración de kernel. En el cuadro de diálogo Depuración de kernel, abra la pestaña Net. Pegue el número de puerto y la clave que guardó antes en el archivo .txt del Bloc de notas. Seleccione Aceptar.

También puede iniciar una sesión de WinDbg abriendo una ventana del símbolo del sistema y escribiendo el siguiente comando, donde es el puerto que seleccionó anteriormente y es la clave que devolvió kdnet.exe anterior. Pegue la clave que guardó antes en el archivo .txt del Bloc de notas.

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

Reinicio del equipo de destino

Una vez conectado el depurador, reinicie el equipo de destino. Una manera de reiniciar el equipo es usar el comando shutdown -r -t 0 desde el símbolo del sistema de un administrador.

Una vez reiniciado el equipo de destino, el depurador debe conectarse automáticamente.

Una vez reiniciada la máquina, el firmware de la NIC asignará una nueva dirección MAC a la PF de KDNET recién agregada y dbgsettings::busparams apuntará a la PF recién agregada.

Búsqueda de la dirección MAC para el adaptador de 2PF

Dado que la PF recién agregada es un puerto configurado de bus PCI, habrá un nuevo valor de dirección MAC asignado a la PF recién agregada por el firmware de la NIC. Actualmente, la herramienta kdnet.exe no admite la visualización de la dirección MAC para el 2PF agregado.

Hay dos maneras de encontrar la nueva dirección MAC:

Uso de WinDbg/KD con una sesión de KD local

Ejecute el depurador de kernel local windbg.exe -kl en el destino.

Asegúrese de que tiene acceso al archivo de símbolos kdnet.pdb mediante la ejecución de .reload /f kdnet.dll

Ejecute el comando .kdtargetmac para obtener la dirección MAC.

kd> .kdtargetmac
Force unload of kdnet.dll
ModLoad: fffff800`18510000 fffff800`18557000   kdnet.dll
Loading symbols for fffff800`18510000        kdnet.dll ->   kdnet.dll

The target machine MAC address in open-device format is: DC9840C151E8

Ejecución de las herramientas de firmware proporcionadas por el proveedor

Una manera de localizar la dirección MAC es ejecutar las herramientas de firmware proporcionadas por el proveedor. Consulte el proveedor de NIC para obtener información sobre cómo descargar, instalar y usar las herramientas del proveedor.

... 
Base MAC:              98039baa757c           4

Busque el campo de dirección MAC. Calcule el valor de la dirección MAC de KDNET 2PF sumando uno secuencialmente al último dígito del dispositivo MAC raíz. Por lo tanto, para el dispositivo raíz con una dirección de 98039baa757c, el dispositivo KDNET 2PF tendría una dirección de 98039baa757d.

Restauración del estado de configuración anterior - Eliminación de la segunda PF de PCI

Puede quitar la PF agregada anteriormente de un dispositivo mediante la opción kdnet -removepf y el valor original de bus.device.function. La PF se desasociará de la NIC y el firmware de la NIC liberará el recurso asignado por la PF.

Para quitar la PF de KDNET del dispositivo, abra un símbolo del sistema con privilegios elevados y ejecute el siguiente comando.

kdnet -removepf [bus.dev.fun] [host name/host ip address] [port number]

Donde bus.dev.fun es el puerto de ubicación PCI del adaptador de NIC donde se adjuntó originalmente la PF. Se trata de la misma ubicación PCI que se transfirió originalmente a kdnet -addpf.

Usar la opción -removepf también vuelve a habilitar la depuración del kernel a través de KDNET en bus.dev.fun original.

C:\KDNET> kdnet -removepf 141.0.0 198.51.100.1 50001

Succeeded removing a Pci PF on :141.0.0. Please power off or reboot the machine.

Enabling network debugging on Mellanox ConnectX-4 Lx Ethernet Adapter #2.
Manage-bde.exe not present.  Bitlocker presumed disabled.

El comando kdnet.exe -removepf también quitará el atributo NO_KDNIC de {default} loadoption de la instalación del sistema operativo, ya que KDNET se habilitará en bus.dev.fun original, es decir, dbgsettings::busparams apuntará al puerto de red original. Esto hará que KDNIC se vuelva a usar, proporcionando una conexión de red de nuevo encima de KDNET.

Una vez quitada la PF, la máquina debe reiniciarse para que se apliquen los cambios de BCD.

shutdown -r -t 0

Solución de problemas de configuración del adaptador de host

Compruebe que el adaptador 2PF está presente en el administrador de dispositivos

Puede comprobar que la PF de KDNET se agregó correctamente comprobando que el nuevo adaptador NIC tiene un puerto bus.dev.fun nuevo en la lista de adaptadores del Administrador de dispositivos de Windows.

En este diagrama se muestran tres adaptadores diferentes, donde Adapter #2 está reservado para su uso por el depurador de kernel.

administrador de dispositivos que muestra el nodo de red con un nodo para el adaptador de red compatible con Windows KDNET 2PF.

Mensajes de error comunes - Agregar una nueva PF

C:\KDNET> kdnet -addpf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

La PF de PCI ya está configurada en este puerto: Error=(0x80004004) Fallo de la operación de PF en el dispositivo de depuración. El dispositivo de depuración no está configurado para KDNET.

  • No agregue o quite una PF en el puerto raíz donde ya se ha agregado como PF.

Mensajes de error comunes - Eliminación de una PF

C:\KDNET> kdnet -removepf 28.0.1 192.168.137.1 50005

Adapter is not active: Error=(0x80070002)

Device Name:\\.\Mlx5Util

Pci Bus:28.0.1

El adaptador no está activo: Error=(0x80070002) Fallo de la operación de PF en el dispositivo de depuración. El dispositivo de depuración no está configurado para KDNET

  • No use un puerto de PF agregada con el parámetro de línea de comandos "-removepf/-addpf", ya que cualquier operación en el puerto de PF agregada producirá un error (error: el adaptador no está activo en el puerto), ya que el controlador de bandeja de entrada de NIC del proveedor está configurado para no ejecutarse expresamente en una PF agregada.
  • Ambas opciones de línea de comandos (-addpf/-removepf) solo deben usarse en el dispositivo PCI raíz.
C:\KDNET> kdnet -removepf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

No hay ninguna PF de PCI para eliminar en este puerto: Error=(0x80004005) Fallo de la operación de PF en el dispositivo de depuración. El dispositivo de depuración no está configurado para KDNET.

  • Si agrega una nueva PF y, a continuación, decide quitarla sin reiniciarla, producirá un error, ya que el firmware de NIC del proveedor requiere reiniciar o restablecer el HW de la NIC antes de que pueda reconocer la PF recién agregada.

Mensajes de error comunes - BCDEdit

NO_KDNIC no está presente en la instalación de BCD OS {default}.

  • No se recomienda usar bcdedit.exe para modificar o cambiar el dispositivo de depuración (dbgsettings) después de agregar una nueva PF. Las opciones de línea de comandos kdnet -addpf/removepf configurarán el dispositivo de depuración y también agregarán o quitarán automáticamente el token NO_KDNIC a o desde {default}::loadoptions.

Consulte también

Configuración automática de la depuración del kernel de red KDNET

Configuración manual de la depuración del kernel de red KDNET

Configuración de la depuración en modo kernel de USB 3.0 xHCI-DBC (KDUSB)

Configuración de la depuración en modo kernel de EEM de KDNET USB (KDNET-EEM-USB)

Configuración de la depuración manual del kernel