設定 USB 3.0 xHCI 內核模式偵錯 (KDUSB xHCI-DBC USB 3.0)
適用於 Windows 的偵錯工具支援透過 USB 3.0 纜線進行內核模式偵錯。 本文說明如何手動設定 USB 3.0 偵錯。
執行調試程式的計算機稱為 主計算機,而偵錯的計算機稱為 目標計算機。
透過 USB 3.0 纜線進行偵錯需要下列硬體:
- 在主電腦上,xHCI (USB 3.0) 主機控制器
- 在目標電腦上,支援偵錯的 xHCI (USB 3.0) 主機控制器
- 目標電腦 USB 主機控制器必須支援 Intel xHCI 偵錯功能介面 (DBC)。 如需詳細資訊,請參閱 Intel 網站上的 xHCI 規格。
纜線需求
- 橙色Microsoft USB 偵錯纜線,這是 A-A 交叉纜線,具有兩個男性型 A 外掛程式和沒有 Vbus 連線。 此纜線可從 DataPro - USB 3.0 超速 A/A 偵錯纜線等廠商取得。
為了簡化疑難解答,請直接連接目標與主計算機之間的纜線,避免任何中樞或停駐站。
二進位傳輸檔案
kdstub.dll可用來支援 KDUSB xHCI-DBC USB 3.0 調試程序傳輸。
設定目標電腦
在目標計算機上,啟動 UsbView 工具。 UsbView 工具包含在適用於 Windows 的偵錯工具中。 針對 x64 系統,UsbView 位於 C:\Program Files (x86)\Windows Kits\10\Tools\kitversion\x64\usbview.exe。
在 UsbView 中,找出所有 xHCI 主機控制器。
在UsbView中,展開 xHCI 主機控制器的節點。 尋找主機控制器上的埠支援偵錯的指示。
[Port1] Is Port User Connectable: yes Is Port Debug Capable: yes Companion Port Number: 3 Companion Hub Symbolic Link Name: USB#ROOT_HUB30#5&32bab638&0&0#{...} Protocols Supported: USB 1.1: no USB 2.0: no USB 3.0: yes
記下您要用於偵錯之 xHCI 控制器的總線、裝置和函式編號。 UsbView 會顯示這些數位。 在下列範例中,總線號碼為 48、裝置號碼為 0,且函式號碼為 0。
USB xHCI Compliant Host Controller ... DriverKey: {36fc9e60-c465-11cf-8056-444553540000}\0020 ... Bus.Device.Function (in decimal): 48.0.0
識別支援偵錯的 xHCI 控制器之後,下一個步驟是找出與 xHCI 控制器上埠相關聯的實體 USB 連接器。 若要尋找實體連接器,請將任何USB 3.0裝置插入目標電腦上的任何USB連接器。 重新整理 UsbView 以查看您的裝置所在的位置。 如果 UsbView 顯示已連線到所選 xHCI 主機控制器的裝置,則您找到可用於 USB 3.0 偵錯的實體 USB 連接器。
重要
使用 bcdedit
變更開機資訊之前,您可能需要暫時暫停測試計算機上的 Windows 安全性功能,例如 BitLocker 和安全開機。
在測試完成時重新啟用這些安全性功能,並在停用安全性功能時適當地管理測試計算機。
在目標電腦上,以系統管理員身分開啟命令提示字元視窗,然後輸入下列命令:
bcdedit /debug on bcdedit /dbgsettings usb targetname:<TargetName>
TargetName 是您為目標電腦建立的名稱。 請注意, TargetName 不一定是目標電腦的官方名稱;只要符合下列限制,就可以是您建立的任何字串:
- 字串不得包含 TargetName 中任何大小寫組合的 「debug」。。 例如,如果您在 targetname 中的任何位置使用 「DeBuG」 或 「DEBUG」,偵錯將無法正常運作。
- 字串中唯一的字元是連字元(-)、底線(_)、數位 0 到 9,以及字母 A 到 Z(大寫或小寫)。
- 字串的最大長度為 24 個字元。
在 裝置管理員 中,找出您想要用於偵錯的 USB 控制器。 在 [一般] 索引標籤的 [位置] 底下,會顯示總線、裝置和函式號碼。 輸入此指令:
bcdedit /set "{dbgsettings}" busparams <b.d.f>
B、 d 和 f 是 USB 主機控制器的總線、裝置和函式號碼。 總線、裝置和函式編號必須是十進位格式。
範例:
bcdedit /set "{dbgsettings}" busparams 48.0.0
重新啟動目標計算機。
停用電源管理
在某些情況下,電源轉換可能會干擾透過USB 3.0進行偵錯。 若要避免這些問題,請停用 xHCI 主機控制器及其根中樞的選擇性暫停,以供偵錯使用。
在 裝置管理員 中,流覽至 xHCI 主機控制器的節點。 以滑鼠右鍵按兩下節點,然後選擇 [ 屬性]。 如果有 [電源管理] 索引標籤,請開啟索引標籤,然後清除 [允許電腦關閉此裝置以儲存電源] 複選框。
在 裝置管理員 中,流覽至 xHCI 主機控制器根中樞的節點。 以滑鼠右鍵按兩下節點,然後選擇 [ 屬性]。 如果有 [電源管理] 索引標籤,請開啟索引標籤,然後清除 [允許電腦關閉此裝置以儲存電源] 複選框。
當您完成使用 xHCI 主機控制器進行偵錯時,請重新啟用 xHCI 主機控制器的選擇性暫停。
第一次啟動偵錯會話
- 將USB 3.0偵錯纜線連接到您已選擇在主機和目標電腦上偵錯的USB 3.0埠。
- 判斷在主計算機上執行的 Windows 位(32 位或 64 位)。
- 在主計算機上,開啟與主計算機上所執行之 Windows 位相符的 WinDbg 版本(以系統管理員身分執行)。 例如,如果主計算機執行的是64位版本的Windows,請以系統管理員身分開啟64位版本的WinDbg。
- 在 [檔案] 功能表上,選擇 [核心偵錯]。 在 [核心偵錯] 對話框中,開啟 [USB ] 索引標籤。輸入您在設定目標計算機時建立的目標名稱。 按一下 [確定]。
此時,USB 偵錯驅動程式會安裝在主計算機上,這就是為什麼請務必將 WinDbg 的位與 Windows 的位相符。 安裝 USB 偵錯驅動程式之後,您可以使用 32 位或 64 位版本的 WinDbg 進行後續偵錯會話。
啟動偵錯工作階段
使用 WinDbg
在主計算機上,開啟 WinDbg。 在 [檔案] 功能表上,選擇 [核心偵錯]。 在 [核心偵錯] 對話框中,開啟 [USB ] 索引標籤。輸入您在設定目標計算機時建立的目標名稱。 選取 [確定]。
您也可以在 [命令提示字元] 視窗中輸入下列命令,以啟動與 WinDbg 的工作階段,其中 TargetName 是您設定目標電腦時建立的目標名稱:
windbg /k usb:targetname=<TargetName>
使用 KD
在主計算機上,開啟 [命令提示字元] 視窗並輸入下列命令,其中 TargetName 是您設定目標計算機時建立的目標名稱:
kd /k usb:targetname=<TargetName>
重新啟動目標計算機
調試程式連線之後,請重新啟動目標計算機。 重新啟動計算機的方法之一,是從系統管理員的命令提示字元使用 shutdown -r -t 0
命令。
目標電腦重新啟動之後,調試程式應該會自動連線。
疑難排解
無法辨識 USB 裝置
如果您在插入偵錯纜線時,在主機上出現 Windows 通知,且無法辨識文字 USB 裝置,可能會發生已知的 USB 3.1 到 3.1 相容性問題。 當偵錯纜線連接到主機上的 USB 3.1 控制器和目標上的 Intel (Ice Lake 或 Tiger Lake) 3.1 USB 控制器時,此問題會影響偵錯組態。
如需詳細資訊和處理器模型清單,請參閱 Ice Lake(微控制器)和老虎湖(微控制器)。 若要尋找目標計算機的處理器模型,請開啟 [設定] 應用程式,然後移至 [系統] 和 [關於]。 處理器列在 [裝置規格] 底下。
若要確認此問題,請開啟 裝置管理員,並在通用序列總線控制器下尋找 USB 偵錯連線裝置。 如果找不到此裝置,請檢查 [其他裝置] 底下的 [未知裝置]。 以滑鼠右鍵按兩下裝置以開啟其屬性頁面。 裝置狀態文本框的文字 Windows 已停止此裝置,因為它回報問題 (Code 43) 和 USB 裝置傳回無效的 USB BOS 描述元。
若要解決此問題,請從系統管理員命令提示字元執行下列命令,以變更登錄:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\349500E00000 /v SkipBOSDescriptorQuery /t REG_DWORD /d 1 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\045E06560000 /v SkipBOSDescriptorQuery /t REG_DWORD /d 1 /f
然後,移除並重新插入偵錯纜線。
聯機會在調試程式主控台視窗上重試訊息,且無法闖入目標 - 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
裝置重新啟動之後,錯誤應該會消失,而且命令應該如預期般運作。