Condividi tramite


Configurazione del debug in modalità kernel 2PF con KDNET

Gli strumenti di debug per Windows supportano il debug del kernel tramite un cavo di rete usando più funzioni fisiche (PFS) nelle schede di interfaccia di rete supportate partizionando lo spazio di configurazione PCI.

Con il debug 2PF, ogni pf può essere connesso a una singola porta di rete, in modo da consentire la connessione della funzionalità di debug del kernel a un pf mentre lo stack di rete standard comunica con l'altro pf. Per questo motivo, KDNIC non deve instradare il traffico di rete di Windows tramite KDNET e KDNET sarà responsabile solo del routing del traffico del debugger del kernel host. Ciò comporta un notevole aumento delle prestazioni.

In questo argomento viene descritto come configurare il debug 2PF usando l'utilità kdnet.exe.

I fornitori di schede di rete sono invitati a abilitare il supporto per questa funzionalità. Per altre informazioni, vedere Debugger 2PF KDNET Miniport Network Driver Support.For more information, see Debugger 2PF KDNET Miniport Network Driver Support.

Due driver verranno eseguiti sullo spazio di configurazione PCI partizionato

  • Il driver posta in arrivo di Windows verrà esaurito dalla porta di rete primaria in bus.dev.percorso PCI fun0.0 .

  • The KDNET-Ext. il modulo verrà esaurito dal pf aggiunto in bus.dev.fun0.1, Questa tecnica garantisce che il driver della scheda di interfaccia di rete posta in arrivo di Windows non venga influenzato dalla condivisione della scheda di interfaccia di rete con KDNET.

Il computer che esegue il debugger viene chiamato computer host e il computer sottoposto a debug viene chiamato computer di destinazione.

Requisiti del dispositivo 2PF in modalità kernel

È necessario quanto segue:

  • Nel computer di destinazione, una scheda di rete 2PF supportata.

  • Nel computer host, una scheda di rete.

  • Connessione di rete tra la destinazione e l'host.

  • Windows 10 Build 21313 e versioni successive.

Schede di rete 2PF supportate

I fornitori come NVIDIA Mellanox e Cisco forniscono schede di interfaccia di rete che supportano il debug di rete 2PF. Rivolgersi al fornitore della scheda di rete per vedere quali modelli della scheda di rete sono supportati. Si noti che alcuni fornitori supportano 2PF in un sottoinsieme di schede di rete che condividono lo stesso ID PnP.

Usare kdnet.exe per confermare il supporto del dispositivo e visualizzare il valore busparams

Usare l'utilità kdnet.exe per visualizzare le informazioni sui parametri per i controller che supportano il debug del trasporto KDNET 2PF.

  1. Verificare che gli strumenti di debug di Windows siano installati nel sistema host. Per informazioni sul download e l'installazione degli strumenti del debugger, vedere Strumenti di debug per Windows.

  2. Individuare i file kdnet.exe e VerifiedNICList.xml. Per impostazione predefinita, si trovano qui.

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

  3. Nel computer host copiare i due file in una condivisione di rete o in un'unità personale, in modo che siano disponibili nel computer di destinazione.

  4. Nel computer di destinazione creare una C:\KDNET directory e copiare i file kdnet.exe e VerifiedNICList.xml in tale directory.

  5. Nel computer di destinazione aprire una finestra del prompt dei comandi come Amministrazione istrator. Immettere questo comando per verificare che il computer di destinazione disponga di una scheda di rete supportata e di visualizzare il valore 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)
    

    Poiché l'output illustrato in precedenza non include "KDNET è in esecuzione in questa scheda di interfaccia di rete", indica che il debug KDNET tradizionale non è abilitato in nessuna delle schede.

    Se la scheda di interfaccia di rete non supporta la funzionalità PF multipla, la notifica di stato PF di "sono supportate più funzioni fisiche" verrà omessa (vuota) dalle informazioni visualizzate.

    Se la scheda di interfaccia di rete supporta più pf, le informazioni visualizzate effettive dipendono dalla combinazione della porta di rete (porta radice/porta aggiunta PF), nonché dallo stato collegato/disconnesso del cavo verso/dalla porta fisica della scheda di interfaccia di rete.

    Questa tabella riepiloga le diverse notifiche PF per la scheda di interfaccia di rete primaria.

    La scheda di interfaccia di rete bus.dev.fun corrisponde a Stato cavo Stato PF
    originale (primario) Cavo PF collegato Funzione primaria, sono abilitate più funzioni fisiche
    originale (primario) Cavo PF disconnesso Funzione primaria, sono supportate più funzioni fisiche

    Questa tabella riepiloga le diverse notifiche PF per la scheda di interfaccia di rete secondaria.

    La scheda di interfaccia di rete bus.dev.fun corrisponde a Stato cavo Stato PF
    porta PF new (secondaria) Kdnet è in esecuzione Funzione secondaria
    porta PF new (secondaria) stato cavo disconnesso o sconosciuto Funzione primaria, sono abilitate più funzioni fisiche, ma la funzione secondaria non viene usata
  6. Se l'output di kdnet.exe indica che è disponibile un controller di interfaccia di rete supportato, è possibile procedere.

Configurazione del computer di destinazione per 2PF

Usare l'utilità kdnet.exe per configurare le impostazioni del debugger nel PC di destinazione per 2PF, seguendo questa procedura.

Importante

Prima di usare bcdedit per modificare le informazioni di avvio, potrebbe essere necessario sospendere temporaneamente le funzionalità di sicurezza di Windows, ad esempio BitLocker e Avvio protetto nel PC di test. È possibile riabilitare Bit Locker e Avvio protetto dopo aver completato l'uso di BCDEdit per aggiornare le informazioni di avvio. Gestire in modo appropriato il PC di test quando le funzionalità di sicurezza sono disabilitate.

Questo processo aggiungerà una nuova funzione fisica (PF) alla scheda di interfaccia di rete, specificata da bus.device.function. Il nuovo pf può essere usato solo da KDNET perché il driver posta in arrivo di Windows è configurato per non essere eseguito su un pf secondario aggiunto. Seguire questa procedura per aggiungere un nuovo pf che verrà usato dal dispositivo di debug.

Verificare che il debug sia disabilitato prima di aggiungere la nuova funzione fisica

  1. Usare il comando BCDEdit per verificare che il KD sia disabilitato nella destinazione prima di aggiungere un nuovo pf nella scheda di interfaccia di rete. Questa operazione è necessaria per assicurarsi che il driver della scheda di interfaccia di rete del fornitore standard venga caricato in modo che possa essere usato per aggiungere il nuovo pf.
C:\> bcdedit /enum 
...

debug           No

In alternativa, usare kdnet.exe senza parametri per verificare se il debug è abilitato. L'output seguente mostra KDNET in esecuzione in un sistema con il debug abilitato in una scheda di interfaccia di rete. Questa è la configurazione legacy a prestazioni inferiori.


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. Se il valore di debug è impostato su , usare il comando set per disabilitare il debug.
C:\> bcdedit.exe /debug off
C:\> bcdedit.exe /set {default} bootdebug off
C:\> bcdedit.exe /set {bootmgr} bootdebug off
  1. Usare il shutdown -r -t 0 comando dal prompt dei comandi di un amministratore per riavviare.

Dopo il riavvio del PC di destinazione e il debug è disabilitato, è possibile aggiungere la nuova funzione fisica.

Aggiungere la nuova funzione fisica

  1. Aprire un prompt dei comandi con privilegi elevati ed eseguire il comando seguente per aggiungere un secondo pf. Tutti i valori vengono forniti usando valori decimali.
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 è la porta di posizione PCI della scheda di interfaccia di rete che supporta la funzionalità PF multipla, quindi il nuovo PF verrà aggiunto/collegato a questo dispositivo di rete.

-addpf l'opzione abilita automaticamente il debug del kernel tramite il trasporto KDNET sulla porta PF aggiunta.

[host name/host ip address] è l'indirizzo TCP/IP del computer host. Usare il ipconfig comando nel computer host per determinare questo indirizzo.

[port number] è il numero di porta TCP/IP. È possibile scegliere qualsiasi numero di porta compreso tra 49152 e 65535. L'intervallo consigliato è compreso tra 50000 e 50039. La porta scelta verrà aperta per l'accesso esclusivo dal debugger in esecuzione nel computer host. Selezionare un indirizzo di porta univoco per ogni coppia di destinazione/host con cui si lavora, nell'intervallo consigliato da 50000 a 50039. 50005 è illustrato nell'esempio.

Si noti che -addpf aggiungerà anche l'attributo all'installazione NO_KDNIC del sistema operativo {default} loadoptions. Questo perché KDNIC non è più necessario per l'esecuzione su KDNET.

Loadoptions = NO_KDNIC viene aggiunto al tag del sistema operativo {default} per assicurarsi che kdnic.sys non esaurisca il file pf appena aggiunto (141.0.1)

Usare il comando bcdedit per verificare che NO_KDNIC sia stato impostato.

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. Copiare il tasto restituito in un blocco note .txt file. Nell'esempio illustrato, la chiave generata ha un valore di:

    2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

  2. Facoltativamente, usare kdnet.exe per verificare che siano abilitate più funzioni fisiche.

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)

Disabilitare il firewall nell'host

Nell'host disabilitare il firewall per la porta del debugger.

Connessione winDbg alla destinazione per il debug del kernel

Nel computer host aprire WinDbg. Scegliere Debug kernel dal menu File. Nella finestra di dialogo Debug kernel aprire la scheda Net . Incollare il numero di porta e la chiave salvati nel Blocco note .txt file in precedenza. Seleziona OK.

È anche possibile avviare una sessione WinDbg aprendo una finestra del prompt dei comandi e immettendo il comando seguente, dove è la porta selezionata in precedenza ed è la chiave restituita da kdnet.exe precedente. Incollare la chiave salvata nel Blocco note .txt file in precedenza.

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

Riavviare il computer di destinazione

Una volta connesso il debugger, riavviare il computer di destinazione. Un modo per riavviare il PC consiste nell'usare il shutdown -r -t 0 comando dal prompt dei comandi di un amministratore.

Dopo il riavvio del PC di destinazione, il debugger dovrebbe connettersi automaticamente.

Dopo il riavvio del computer, il firmware della scheda di interfaccia di rete assegnerà un nuovo indirizzo MAC al pf KDNET appena aggiunto e dbgsettings::busparams punterà al pf appena aggiunto.

Ricerca dell'indirizzo MAC per l'adattatore 2PF

Poiché il pf appena aggiunto è una porta configurata per il bus PCI, al firmware della scheda di interfaccia di rete verrà assegnato un nuovo valore di indirizzo MAC. Lo strumento kdnet.exe attualmente non supporta la visualizzazione dell'indirizzo MAC per il 2PF aggiunto.

Esistono due modi per trovare il nuovo indirizzo MAC:

Usare WinDbg/KD con una sessione KD locale

Eseguire il debugger del kernel locale windbg.exe -kl nella destinazione.

Assicurarsi di avere accesso al file di simboli kdnet.pdb eseguendo .reload /f kdnet.dll

Eseguire il comando .kdtargetmac per ottenere l'indirizzo 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

Eseguire gli strumenti del firmware forniti dal fornitore

Un modo per individuare l'indirizzo MAC consiste nell'eseguire gli strumenti firmware forniti dal fornitore. Per informazioni sul download, l'installazione e l'uso degli strumenti del fornitore, vedere il fornitore della scheda di interfaccia di rete.

... 
Base MAC:              98039baa757c           4

Trovare il campo indirizzo MAC. Calcolare il valore dell'indirizzo MAC KDNET 2PF aggiungendo in sequenza uno all'ultima cifra del dispositivo MAC radice. Pertanto, per il dispositivo radice con un indirizzo di 98039baa757c, il dispositivo KDNET 2PF avrebbe un indirizzo di 98039baa757d.

Ripristino dello stato di configurazione precedente - Rimozione del secondo PF PCI

È possibile rimuovere il pf aggiunto in precedenza da un dispositivo usando l'opzione kdnet -removepf e il valore originale bus.device.function . Il pf verrà scollegato dalla scheda di interfaccia di rete e la risorsa assegnata da PF verrà rilasciata dal firmware della scheda di interfaccia di rete.

Per rimuovere il file PF KDNET dal dispositivo, aprire un prompt dei comandi con privilegi elevati ed eseguire il comando seguente.

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

Dove bus.dev.fun è la porta di posizione PCI della scheda di interfaccia di rete in cui è stato originariamente collegato il file PF. Si tratta della stessa posizione PCI originariamente passata a kdnet -addpf.

L'uso dell'opzione -removepf consente anche di riattivare il debug del kernel tramite KDNET nel bus.dev.fun originale.

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.

Il comando kdnet.exe -removepf rimuoverà anche l'attributo NO_KDNIC dall'installazione del sistema operativo {default} loadoptions, poiché KDNET verrà abilitato nel bus.dev.fun originale, ovvero dbgsettings::busparams punterà alla porta di rete originale. In questo modo KDNIC verrà nuovamente usato, fornendo nuovamente una connessione di rete su KDNET.

Dopo aver rimosso il file PF, è necessario riavviare il computer per applicare le modifiche bcd.

shutdown -r -t 0

Risoluzione dei problemi relativi alla configurazione dell'adapter host

Verificare che la scheda 2PF sia presente in Gestione dispositivi

È possibile verificare che il pf KDNET sia stato aggiunto correttamente controllando che la nuova scheda di interfaccia di rete abbia una nuova porta bus.dev.fun nell'elenco delle schede di Gestione dispositivi Windows.

Questo diagramma mostra tre diversi adattatori, con Adapter #2 riservato per l'uso da parte del debugger del kernel.

device manager showing the network node with a node for Windows KDNET 2PF supported network adapter.

Messaggi di errore comuni: aggiunta di un nuovo pf

C:\KDNET> kdnet -addpf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

Pci PF è già configurato su questa porta: Errore=(0x80004004) Operazione PF non riuscita nel dispositivo di debug. Il dispositivo di debug non è configurato per KDNET.

  • Non aggiungere/rimuovere un pf sulla porta radice in cui è già stato aggiunto come PF.

Messaggi di errore comuni: rimozione di un 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

Adapter non attivo: Errore=(0x80070002) Operazione PF non riuscita nel dispositivo di debug. Il dispositivo di debug non è configurato per KDNET

  • Non usare una porta PF aggiunta con il parametro della riga di comando "-removepf/-addpf", perché qualsiasi operazione sulla porta PF aggiunta genererà un errore (errore: Adapter non è attivo sulla porta), poiché il driver della posta in arrivo della scheda di interfaccia di rete fornitore è configurato per non essere eseguito in modo esplicito su un pf aggiunto.
  • Entrambe le opzioni della riga di comando (-addpf/-removepf) devono essere usate solo nel dispositivo PCI radice.
C:\KDNET> kdnet -removepf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

Non è presente alcun pf PCI da rimuovere sulla porta: Errore=(0x80004005) Operazione PF non riuscita nel dispositivo di debug. Il dispositivo di debug non è configurato per KDNET

  • Se si aggiunge un nuovo PF e quindi si decide di rimuoverlo con il riavvio, si verifica un errore, poiché il firmware della scheda di interfaccia di rete fornitore richiede il riavvio/reimpostazione dell'HW della scheda di interfaccia di rete prima di poter riconoscere il pf appena aggiunto.

Messaggi di errore comuni - BCDEdit

NO_KDNIC non è presente nell'installazione del sistema operativo BCD {default}.

  • Non è consigliabile usare bcdedit.exe per modificare o modificare il dispositivo di debug (dbgsettings) dopo l'aggiunta di un nuovo pf. Le opzioni della riga di comando kdnet -addpf/removepf configureranno il dispositivo di debug e aggiungeranno/rimuoveranno automaticamente il NO_KDNIC token da e verso {default}::loadoptions.

Vedi anche

Configurazione automatica del debug del kernel di rete KDNET

Configurazione manuale del debug del kernel di rete KDNET

Configurazione manuale del debug in modalità kernel su un cavo USB 3.0

Configurazione manuale del debug in modalità kernel