2014年10月6日 星期一

[Driver] Real-time log dump via UART by WinDbg

背景

Windows OS的driver或是BIOS除錯方法很多、也非常繁瑣,這裡介紹一種可以即時取得Debug訊息的方法。過程中會使用到兩種微軟提供的工具:WinDbg以及TraceView。


開啟DUT的UART Debug功能

測試機(或稱DUT)上面必須先開啟debug功能才能與另一台執行WinDbg的電腦做連線。
DUT上執行步驟:

1. 如果DUT本身尚未開啟debug功能,應該可以在device manager下看到COM裝置,請注意COM後面接的數字,之後會用到

2. 在DUT上開啟Command Prompt (Admin)

3. 參考http://msdn.microsoft.com/en-us/library/windows/hardware/ff556867(v=vs.85).aspx
    輸入指令:

bcdedit /debug on
bcdedit /dbgsettings serial debugport:n baudrate:rate

    需注意這裡debugport的數字需與device manager下所看到的COM埠號碼相同


設定另一端電腦上的WinDbg

現在一般的NB是沒有UART埠的,通常得透過USB轉UART線來連接DUT上的UART埠。因為USB轉UART線是UART公頭,萬一DUT上的UART同樣是公頭的話得另外接上一個母母跳線轉接頭。
電腦上執行步驟:

1. 確定USB轉UART線有正常工作,在device manager下找到COM裝置


2. 在打算執行WinDbg的電腦上開啟WinDbg(可在application搜尋框內輸入Windbg),需注意的是電腦如果安裝的是64位元OS,則需要執行x64版本的WinDbg

3. 執行WinDbg的[File][Kernel Debug...]

4. COM設定中輸入之前在device manager下看到的埠值,接著按OK


使用Traceview擷取即時Log

Traceview有個功能就是將log透過debug port(可以是COM或是USB)傳到電腦的WinDbg上顯示。過程中需準備driver對應的pdb檔。
DUT上執行步驟:

1. 以Admin的身份開啟Traceview.exe,執行[File][Create New Log Session]

2. 點選按鈕[Add Provider]


3. 點選PDB (Debug Information) File,接著瀏覽找出driver對應的pdb檔,然後按OK

4. 回到Create New Log Session對話框後選擇Next

5. 點選Set Flags and Level按鈕來改變debug level


6. 對著level圖是點兩下可開啟level設定。改成Verbose後,不僅是error message,連一般log都能顯示出來。完成後按OK

7. 接著進入Advanced Log Session Options


8. 切換tab至Log Session Parameter Options下,裡面有個WinDbg的設定,預設值是FALSE,將它改成TRUE,然後按下OK


9. 最後只要按下Finish按鈕後就會將即時log顯示在另一台電腦上

沒有留言:

張貼留言