使用 KDNET 設定 2PF 內核模式偵錯
Windows 偵錯工具透過網路纜線支援核心偵錯,方法是藉由分割PCI組態空間,在支援的 NIC 上使用多個實體函式 (PFs)。
透過 2PF 偵錯,每個 PF 都可以連線到單一網路埠,因此它可讓核心偵錯功能連線到一個 PF,而標準網路堆疊會與另一個 PF 通訊。 因此,KDNIC 不需要透過 KDNET 路由 Windows 網路流量,KDNET 只會負責路由主機核心調試程式流量。 這會導致大幅提升效能。
本主題描述如何使用 kdnet.exe 公用程式設定 2PF 偵錯。
鼓勵網路卡廠商啟用此功能的支援。 如需詳細資訊,請參閱 調試程式 2PF KDNET 迷你埠網路驅動程序支援。
兩個驅動程式將會在分割的PCI組態空間上執行
Windows 收件匣驅動程式會在 bus.dev 用完主要網路埠。fun0.0 PCI 位置。
KDNET-Ext。模組會在 bus.dev 用完新增的 PF。fun0.1,這項技術可確保 Windows 收件匣 NIC 驅動程式不會受到與 KDNET 共用 NIC 的影響。
執行調試程式的計算機稱為 主計算機,而偵錯的計算機稱為 目標計算機。
內核模式 2PF 裝置需求
需要下列專案:
在目標計算機上,支援的 2PF 網路卡。
在主電腦上,網路卡。
目標與主機之間的網路連線。
Windows 10 組建 21313 和更新版本。
支援的 2PF 網路卡
NVIDIA Mellanox 和 Cisco 等廠商提供支援 2PF 網路偵錯的 NIC。 請洽詢網路卡廠商,以查看支援哪些網路卡模型。 請注意,某些廠商在共用相同 PnP 識別碼的子組網路卡上支援 2PF。
使用kdnet.exe確認裝置支援並檢視 busparams 值
使用 kdnet.exe 公用程式來顯示支援 KDNET 2PF 傳輸偵錯之控制器的參數資訊。
確認 Windows 偵錯工具已安裝在主機系統上。 如需下載及安裝調試程式工具的資訊,請參閱 Windows 的偵錯工具。
找出kdnet.exe和VerifiedNICList.xml檔案。 根據預設,它們位於這裡。
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
在主計算機上,將這兩個檔案複製到網路共用或拇指磁碟驅動器,讓它們可在目標計算機上使用。
在目標計算機上,建立
C:\KDNET
目錄,並將kdnet.exe和VerifiedNICList.xml檔案複製到該目錄。在目標電腦上,以系統管理員身分開啟命令提示字元視窗。 輸入此命令以確認目標計算機具有支援的網路適配器,並檢視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)
因為上面顯示的輸出不包含 「KDNET 正在此 NIC 上執行」,這表示傳統 KDNET 偵錯未在任何配接器上啟用。
如果 NIC 不支援多個 PF 功能,則會從顯示的資訊中省略「支援多個實體功能」的 PF 狀態通知。
如果 NIC 支援多個 PF,則實際顯示的資訊將取決於網路埠的組合(根埠/PF 新增埠),以及連線/中斷連線的纜線狀態與 NIC 實體埠。
下表摘要說明主要 NIC 的不同 PF 通知。
NIC 配接器 bus.dev.fun 對應至 纜線狀態 PF 狀態 原始 (主要) 連接 PF 纜線 主要函式,已啟用多個實體函式 原始 (主要) PF 纜線已中斷連線 支援主要函式、多個實體函式 下表摘要說明次要 NIC 的不同 PF 通知。
NIC 配接器 bus.dev.fun 對應至 纜線狀態 PF 狀態 新增 (次要) PF 埠 Kdnet 正在執行 次要函式 新增 (次要) PF 埠 纜線中斷連線或未知狀態 主要函式,已啟用多個實體函式,但不會使用次要函式 如果來自 kdnet.exe 的輸出指出支援的 NIC 控制器可用,我們可以繼續。
設定 2PF 的目標電腦
依照下列步驟,使用 kdnet.exe 公用程式,在 2PF 的目標電腦上設定調試程式設定。
重要
使用 bcdedit 變更開機資訊之前,您可能需要暫時暫停測試計算機上的 Windows 安全性功能,例如 BitLocker 和安全開機。 使用 BCDEdit 更新開機資訊後,您可以重新啟用 BitLock 和安全開機。 適當地管理測試計算機,當安全性功能停用時。
此程式會將新的實體函式 (PF) 新增至 所 bus.device.function
指定的 NIC。 新的 PF 只能由 KDNET 使用,因為 Windows 收件匣驅動程式設定為不會在新增的次要 PF 上執行。 請遵循下列步驟來新增偵錯裝置將使用的新 PF。
新增實體函式之前,請先確認偵錯已停用
- 使用 BCDEdit 命令來確認已在目標上停用 KD,再於 NIC 上新增 PF。 這需要確保已載入標準廠商 NIC 驅動程式,以便用來新增 PF。
C:\> bcdedit /enum
...
debug No
或者,使用沒有參數的kdnet.exe來查看偵錯是否已啟用。 下列輸出顯示 KDNET 在一個 NIC 上啟用偵錯的系統上執行。 這是效能較低的舊版設定。
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)
- 如果偵錯值設定為 [是],請使用 set 命令來停用偵錯。
C:\> bcdedit.exe /debug off
C:\> bcdedit.exe /set {default} bootdebug off
C:\> bcdedit.exe /set {bootmgr} bootdebug off
shutdown -r -t 0
使用系統管理員命令提示字元中的 命令重新啟動。
目標計算機重新啟動並停用偵錯之後,我們可以新增新的實體函式。
新增實體函式
- 開啟提升許可權的命令提示字元,然後執行下列命令以新增第二個 PF。 所有值都是使用十進位值來提供。
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
是支援多個 PF 功能的 NIC 適配卡 PCI 位置埠,因此會將新的 PF 新增/連結至此網路裝置。
-addpf
選項可在新增的 PF 埠上,透過 KDNET 傳輸自動進行核心偵錯。
[host name/host ip address]
是主電腦的 TCP/IP 位址。 ipconfig
使用主電腦上的 命令來判斷此位址。
[port number]
是 TCP/IP 埠號碼。 您可以選擇 49152 到 65535 的任何埠號碼。 建議的範圍介於 50000 到 50039 之間。 您所選擇的埠將會由在主電腦上執行的調試程式開啟供獨佔存取。 針對您使用的每個目標/主機組,在建議的 50000-50039 範圍內,挑選唯一的埠位址。 範例中會顯示 50005。
請注意,-addpf 也會將 屬性新增 NO_KDNIC
至 OS 安裝 {default} loadoptions。 這是因為 KDNIC 不再需要在 KDNET 上執行。
loadoptions = NO_KDNIC 會新增至 {default} OS 卷標,以確保kdnic.sys不會用完新新增的 pf (141.0.1)
使用 bcdedit 命令來確認已設定NO_KDNIC。
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.
將傳回的金鑰複製到記事本.txt檔案。 在顯示的範例中,產生的索引鍵值為:
2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
選擇性地使用kdnet.exe來確認已啟用多個實體函式。
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)
停用主機上的防火牆
在主機上,停用調試程式埠的防火牆。
將 WinDbg 連線到目標以進行核心偵錯
在主計算機上,開啟 WinDbg。 在 [檔案] 功能表上,選擇 [核心偵錯]。 在 [核心偵錯] 對話框中,開啟 [ Net ] 索引卷標。貼上您稍早儲存在記事本.txt檔案中的埠號碼和密鑰。 選取 [確定]。
您也可以開啟 [命令提示字元] 視窗並輸入下列命令來啟動 WinDbg 工作階段,其中 是您上面選取的埠,而 是上述kdnet.exe傳回的索引鍵。 貼上您稍早儲存在記事本.txt檔案中的金鑰。
windbg -k -d net:port=<YourDebugPort>,key=<YourKey>
重新啟動目標計算機
調試程式連線之後,請重新啟動目標計算機。 重新啟動計算機的方法之一,是從系統管理員的命令提示字元使用 shutdown -r -t 0
命令。
目標電腦重新啟動之後,調試程式應該會自動連線。
機器重新啟動之後,NIC 韌體會將新的 MAC 位址指派給新新增的 KDNET PF,dbgsettings::busparams 會指向新新增的 PF。
尋找 2PF 配接器的 MAC 位址
由於新新增的 PF 是已設定 PCI 總線的埠,因此 NIC 韌體會將新的 MAC 位址值指派給新新增的 PF。 kdnet.exe工具目前不支持顯示新增 2PF 的 MAC 位址。
有兩種方式可尋找新的 MAC 位址:
搭配本機 KD 工作階段使用 WinDbg/KD
在目標上執行本機核心調試程式windbg.exe -kl。
執行 .reload /f kdnet.dll,確定您可以存取 kdnet.pdb 符號檔
執行 .kdtargetmac 命令以取得 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
執行廠商提供的韌體工具
尋找 MAC 位址的其中一種方法是執行廠商提供的韌體工具。 如需下載、安裝及使用廠商工具的相關信息,請參閱 NIC 廠商。
...
Base MAC: 98039baa757c 4
尋找 [MAC 位址] 欄位。 藉由將 KDNET 2PF MAC 位址值循序新增至根 MAC 裝置的最後一個數位,以計算 KDNET 2PF MAC 位址值。 因此,對於位址為 98039baa757c
的根裝置,KDNET 2PF 裝置的位址 98039baa757d
會是 。
還原先前的設定狀態 - 移除第二個PCI PF
您可以使用 選項和原始 bus.device.function 值,從裝置kdnet -removepf
移除先前新增的 PF。 PF 將會與 NIC 中斷連結,PF 指派的資源將由 NIC 韌體釋放。
若要從裝置移除 KDNET PF,請開啟提升許可權的命令提示字元,然後執行下列命令。
kdnet -removepf [bus.dev.fun] [host name/host ip address] [port number]
其中 bus.dev.fun
是原本附加 PF 之 NIC 適配卡的 PCI 位置埠。 這是原本傳遞至 kdnet -addpf 的相同 PCI 位置。
使用 -removepf 選項也會在原始 bus.dev.fun 上透過 KDNET 重新啟用核心偵錯。
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.
kdnet.exe -removepf 命令也會從 OS 安裝 {default} loadoptions 中移除 NO_KDNIC 屬性,因為 KDNET 將在原始 bus.dev.fun 上啟用,也就是 dbgsettings::busparams 會指向原始網路埠。 這會導致再次使用 KDNIC,並在 KDNET 上再次提供網路連線。
拿掉 PF 之後,必須重新啟動電腦,才能套用 BCD 變更。
shutdown -r -t 0
針對主機配接器設定進行疑難解答
確認裝置管理員中有 2PF 配接器
您可以檢查新的 NIC 適配卡在 Windows 裝置管理員 配接器清單中有新的 bus.dev.fun 埠,以確認 KDNET PF 已成功新增。
此圖顯示三個不同的配接器,配接器 #2 保留供核心調試程式使用。
常見的錯誤訊息 - 新增 PF
C:\KDNET> kdnet -addpf 28.0.0 192.168.137.1 50005
Device Name:\\.\Mlx5Util
Pci Bus:28.0.0
PCI PF 已在此埠上設定: 錯誤=(0x80004004) 偵錯裝置上的失敗 PF 作業。偵錯裝置未針對 KDNET 進行設定。
- 請勿在根埠上新增/移除 PF,其已新增為 PF。
常見的錯誤訊息 - 移除 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
配接器未使用中:偵錯裝置上的 Error=(0x80070002) 失敗的 PF 作業。未針對 KDNET 設定偵錯裝置
- 請勿搭配 「-removepf/-addpf」 命令行參數使用新增的 PF 連接埠,因為新增 PF 埠上的任何作業都會導致失敗(錯誤:適配卡在埠上未使用),因為廠商 NIC 收件匣驅動程式已設定為明確 不會 在新增的 PF 上執行。
- 這兩個命令行選項 (-addpf/-removepf) 都必須只在根 PCI 裝置上使用。
C:\KDNET> kdnet -removepf 28.0.0 192.168.137.1 50005
Device Name:\\.\Mlx5Util
Pci Bus:28.0.0
此埠上沒有 PCI PF 可移除: 偵錯裝置上的 Error=(0x80004005) 失敗的 PF 作業。未針對 KDNET 設定偵錯裝置
- 如果您新增 PF,然後決定在重新啟動時將其移除,將會導致失敗,因為廠商 NIC 韌體需要重新啟動/重設 NIC HW,才能辨識新新增的 PF。
常見錯誤訊息 - BCDEdit
NO_KDNIC不存在於 BCD OS {default} 安裝中。
- 不建議在新增 PF 之後,使用bcdedit.exe修改/變更偵錯裝置 (dbgsettings)。 kdnet -addpf/removepf 命令行選項會設定偵錯裝置,也會在 中自動
NO_KDNIC
新增/移除令牌{default}::loadoptions
。
另請參閱
設定 USB 3.0 xHCI-DBC 內核模式偵錯 (KDUSB)