Debug Windows Kernel 可以是Local (同一台機器上debug) 或 Remote (兩台 Windows的機器上debug),不過還是 Remote 的方式有比較大的功能和彈性,Remote Debug需要透過以下類型的連結線進行連結。
- Network Cable:Windows 8 以及 Windows Server 2012限定。
- 1394:現在的機器以比較少見到1394 Port,尤其是NB幾乎見不到了,要Windows XP以上才有支援。
- USB 3.0:Windows 8限定。
- USB 2.0:Windows Vista以上才有支援。
- NULL-Modem cable:就是 Serial Port,一般電腦的COM port或稱RS232。
要使用USB線將兩台電腦連結進行Debug要特別注意,USB線有分USB 2.0與USB 3.0專用的連結線,關於USB 2.0的連結線更是特別,不是隨便拿一條USB線就可以,要用專屬的USB 2.0 Debug Device將2條USB 2.0連結起來才能使用,不過這一個裝置價值不斐,小小一顆要賣新台幣4800元整,而且不是馬上以現貨可以買,經過與廠商詢問一般都是先預訂,月底會從美國進口才能拿到。
由於這是屬於比較特殊的東西,而且網路上尋找都只有國外的某家公司才有,所以也不經令人懷疑是.....(這部份留給你們自己去想像)。
USB 3.0的連結線目前只有Windows 8才有的支援,USB3.0的連結線就不像USB 2.0那樣這麼貴了,網路上目前訪價約新台幣300元整左右,而且只要1條線就可以了(差很多吧)。
以下就來介紹使用USB 2.0與Windbg來建置Debug的環境流程。
[Host設定]
系統環境:Windows 7
- 下載USB 2.0 Debug Cable要用的Driver(usb2dbg.sys)
- 下載與設定Windbg參數
- 開啟Windbg
- 點選「File」→「Kernel Debug…」或鍵盤快速鍵Ctrl + K,設定Kernel Debug。
- 配置 Microsoft的symbol server path,這是個很重的步驟,如果沒有Symbol file,在Debug時,我們只能面對一堆看不懂得的二進位碼,當然也可以致微軟官網下載相對應的PDB檔,下載 Windows Symbol Files。 點選「File」→「Symbol File Path...」或鍵盤快速鍵Ctrl + S,設定Symbol File Path。
以上的設定方式也可以使用Command Line的方式直接開啟WinDbg。
"C:\Program Files\Windows Kits\8.0\Debuggers\x86\windbg.exe" -k usb:targetname=debug相關語法可參考微軟官網 WinDbg Command-Line Options。
輸入以下的資訊
SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
[Target為Winpe的相關設定]
系統環境:Winpe 3.0
- BCD設定 引用前面介紹過的BCDedit文章 製作Winpe x86與x64二合一的開機選單 (1)、製作Winpe x86與x64二合一的開機選單 (2)、製作Winpe x86與x64二合一的開機選單 (3),來做我們所需的Debug BCD。
- 將Debug功能開啟。
- 設定USB 連結String。
- 設定USB Controller號碼。
bcdedit /debug on
bcdedit /dbgsettings usb targetname:XXXXX
bcdedit /set {dbgsettings} busparams xx.xx.xx
補充說明:
在Windows 7與Windows Vista上的BCD設定xx.xx.xx有不一樣的定義,Windows 7要使用十進制設定,Windows Vista則用十六進制設定。
Windows 7:
bcdedit /set {dbgsettings} busparams 0.29.7Windows Vista:
bcdedit /set {dbgsettings} busparams 0.1D.7
至於要怎嚜知道目前連結的裝置號碼呢?只需透過Windows的裝置管理員查看即可。
未安裝USB 2.0 Debug Cable Driver顯示在裝置管理員的內容為Ajays USB 2.0 Debug Cable
查看Ajays USB 2.0 Debug Cable裝置內關於"位置路徑"的說明。
PCIROOT(0)#PCI(1D00)#USBROOT(0)#USB(1)#USB(2)
PCIROOT(0):表示Bus的編號,即Bus 00。
PCI(1D00):表示Device、Fumction的編號,即Ddevice 1D、Fumction 00。
USBROOT(0):表示USB ROOT Hub編號。
USB(1):表示USB的PORT編號。
USB(2):表示USB的PORT編號。
從USB View可看出Ajays USB 2.0 Debug Cable所存在的位置。
REM 路徑可行修改 set usbbcd=e:\boot\bcd bcdedit /store %usbbcd% /set {bootmgr} bootdebug on bcdedit /store %usbbcd% /set {default} inherit {dbgsettings} bcdedit /store %usbbcd% /set {fce13fa0-dc05-11e2-ad8f-005056c00008} inherit {dbgsettings} bcdedit /store %usbbcd% /set {feadc8ff-dc05-11e2-ad8f-005056c00008} inherit {dbgsettings} REM Debug功能開啟 bcdedit /store %usbbcd% /set {default} debug on bcdedit /store %usbbcd% /set {fce13fa0-dc05-11e2-ad8f-005056c00008} debug on bcdedit /store %usbbcd% /set {feadc8ff-dc05-11e2-ad8f-005056c00008} debug on REM USB 連結String設定,此設定為USB連結必要項
bcdedit /store %usbbcd% /dbgsettings usb targetname:debug REM 針對USB在PCI bus上的設定,此項設定為可選用,即如果沒此設定也可連結 bcdedit /store %usbbcd% /set {dbgsettings} busparams 0.29.0 REM 列出目前BCD的顯示 bcdedit /store %usbbcd% /enum all如果有再BCD上要刪除以添加的項目可使用以下的語法
REM 刪除加入BCD項目的數值 bcdedit /store %usbbcd% /deletevalue {dbgsettings} loadoptions[Target為Windows7的相關設定]
系統環境:Windows 7
系統設定
快速鍵Win + R執行 msconfig指令,開啟系統設定視窗。
選擇「開機」分頁的「進階選項」。
- 勾選:偵錯
- 偵錯連接埠選:USB
- USB目標名稱:debug
按確定、套用至重開機,即可使用USB Debug。
以上的設定等同於使用BCDedit的設定,有興趣的可參考上面介紹的[Target為Winpe的相關設定]中的BCD設定。
[執行]
完成上面Host端與Target端的設定後,開始測試我們上面的設定是否一切正常。
- 將兩台電腦用USB2.0 Debug Cable連結。
- 執行WinDbg Ctrl + K。
- Target開機進Winpe。
WinDbg成功執行畫面。
確定成功執行後,鍵盤按Ctrl + Braek或Ctrl + C,即可在WinDbg上輸入指令,此時Target機器的鍵盤與滑鼠將無法操作。
如果要回覆Target機器狀態,再在WinDbg輸入 "g" 按Enter。
資料來源:
Microsoft Windows USB Core Team Blog --- Setting Up Kernel Debugging with USB 2.0
沒有留言:
張貼留言