WDM學習與Windbg核心除錯系列(二)

本文重點如下;批次build toaster範例、安裝toaster  sample、設定Target及Windbg、初步雙機除錯。

(一)批次Build toaster範例:

1.下圖為toaster範例程式資料夾,全部的程式數目非常多,如果以上一篇文章提到的方式 build code會非常沒有效率。故寫driver_build.bat批次檔,協助處理批次build  code的工作。

















2.driver_build.bat批次檔程式碼如下圖,只需將紅框的參數依需求修改存檔,執行時雙擊該檔即可將toaster  sample內的程式全數build好,非常方便。如果不想一次build這麼多程式,只需將該檔拷貝至想build的目錄下執行即可(target directory不用設定)。




















3.或者修改 dir檔也可控制driver_build.bat的工作目錄。例如:將kmdf拿掉,則雙擊driver_build.bat將不會對kmdf資料夾下做build code的動作。



















(二)安裝toaster sample:
1.當批次build  code完成後,需將程式安裝在Target電腦上,以利後序學習。先在隨身碟上建立資料夾,並將下圖檔案全部拷貝至該資料夾。(詳細內容可參考wdm資料夾toaster.htm的Building the sample及Installation兩小節中說明)

將範例資料夾下相關的檔案拷貝出,特別是toaster.sys不要選incomplete系列的程式,不然執行上會有錯誤發生!


















底下是tool資料夾內的程式,Winobj 及DeviceTree兩支分析程式可上網搜尋下載,十分好用。














2.相關檔案準備完成後,接著再執行drivers的安裝,首先在「開始」處鍵入hdwwiz後按enter。


















3.接著出現「新增硬體」視窗後按「下一步」。


















4.選手動安裝項目後按「下一步」。


















5.選「顯示所有裝置」後按「下一步」。



















6.選「從磁片安裝」後按「下一步」。



















7.移至之前準備好的資料夾下,選「toastco.inf」安裝。


















8.出現此視窗後按「下一步」。



















9.接著選「仍然安裝...」。














10.按「完成」即可。



















11.接著將之前準備好「en-us」資料夾內Device Metadata,拷貝至相關路徑下(路徑參考下圖)。















12.安裝成功後在「裝置管理員」裏會出現Toaster這個虛擬的裝置,利用「tool」資料夾下的「notify.exe」程式可對此虛擬裝置做操作。























(三)設定Target及Windbg:
為了要雙機除錯,需要對Target及Host上的Windbg做一些準備與設定。本範例是藉由COM  Port來達成雙機連線除錯的功能,其他的連線方式還有USB、1394、Net有興趣的人可以自行研究看看。

如果Host的配備不錯,雙機連線的經驗稍微變化一下亦可運用在單機 + VM(VirtualBox或VMWare)上,相關的操作有機會再整理出來。

1.首先要在Target及Host的「裝置管理員」中檢視,有沒有「通訊連接埠」的硬體裝置。接著至電料行或3C賣場買RS-232(母頭-母頭)(Null Moden)線,有9-Pin及15-Pin之分,買的時候要特別留意不要買錯,一般除錯多是用9-Pin的線。而所謂的Null Moden只是2-3Pin跳接,如果電料行沒賣,可以買正常RS-232線回來自行加工,接線法參考此連結。完成後將兩台電腦連接起來,待後序設定妥善即可開始除錯。



























2.接下來對Target做設定,這部份可透過CLI及GUI的方式達成,這兩種都會演示一部份的操作。首先在「開始」中鍵入「msconfig」,接著如下圖點選「進階選項」。
















3.出現如下視窗後,除「偵錯連接埠」依各人PC上的配置設定外,其餘均照下圖所示設定。






















4.接著在CLI視窗中鍵入「bcdedit」,會出現如下畫面,有需要深入操作的可依說明設定。(需要系統管理員權限才能啟動此功能)



























5.本例只需依下圖設定「/debug on」即可,至此Target上的設定己全部完成。












6.接下來設定Windbg;首先設定Symbol路徑及網路伺服器位置。詳細操作流程及符號檔的說明,可參考MSDN這篇「使用 Microsoft 符號伺服器,以取得偵錯符號檔」。


















7.接著執行Windbg及選「File」->;「Kernel Debug...」選項。
















8.依PC實際配置狀況(Port)填入下列參數後,按「確定」。














9.Host等待Target 連線中。此處操作重點在Host Windbg要先於Target啟動執行,如果Target己先於Host Windbg執行,請重新開機以建立連線。
















10.連線後Windbg會先下載伺服器的符號檔。如果是第一次下載時間會久一點,需耐心等待。下載完成後會出現如下畫面...















11.接著按下break按鍵(Ctrl+Break)後,即進入Target 除錯模式。這時的Target無法操作,準備接受Windbg下方指令欄的指示動作。















12.在下方指令欄中鍵入g(go),可發現Target又恢復正常動作。















13.要停止除錯可按Stop  Debugging (Shift+F5),要恢復除錯即重複(項8)動作即可。













(四)初步雙機除錯:
前篇文章提到「debugger.chm」檔案,內有Windbg的指令下法及說明,請參閱「Debuggers」->「Debugger Reference」->「Debugger Commands」章節下的詳細說明。其中「Meta-Commands」與「Extension Commands」常用到,可一邊參閱說明操作,一邊看執行結果,進一步了解Windbg的除錯方式。

1.如欲重新連線Server下載Symbol File可下「.reload」。圖中ERROR部份代表取得Symbol檔案過程中有出錯。
















以上;拉拉雜雜地說明了除錯前的先期準備工作,下篇文章將正式進入除錯階段的操作說明。

沒有留言:

張貼留言