之前沒有做過驅動開發,一切從〇開始。陸陸續續看了些書,windows裝置驅動程式wdf開發等。但是總是雲裡霧裡的。所以想一點一點的積累下在驅動方面的知識。
首先我將記錄下如何搭建調試環境?前提是wmware已裝完畢,已有兩台guest os. (xp 和win7)。下面針對兩類系統的調試進行說明。
- 針對xp驅動調試的設定(參考:http://joeyliu.blog.51cto.com/3647812/937476)
驅動開發最好使用vmware虛擬機器,好處不多說了。首先針對vmware虛擬機器的設定(保證虛擬機器是關機狀態)
1. 設定VM與Windbg通訊的串口
開啟目標系統的Virtual
Machine Setting選項,在Hardware中添加新硬體:1)選擇Serial
Port;2)serial
Port Type 選擇“Output to named pipe”;3)Specify
Socket的選項1吧;4)最終的配置結果2所示。然後啟動VM的目標系統吧。
注意事項:一般情況下是串口2:Serial Port 2,原因是預設VM安裝虛擬印表機佔用Serial Port 1.
圖1
圖2
2. 設定Guest OS的啟動項
進入WinXP的虛擬機器作業系統,開啟系統硬碟(C:\),將檔案夾查看選項全開了,那在C盤根目錄下有一個叫boot.ini的啟動項檔案,先去掉唯讀屬性,以文字檔的方式開啟,拷貝原來的啟動項,作如下修改:
Multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com2
/baudrate=115200
注意事項:如果步驟1中的serial port選擇的是serial port 1是話,此處為com1.如果是serial port 2的話此處為com2.
3.配置WinDbg的捷徑
在winddk的安裝目錄(C:\WinDDK\7600.16385.0\Debuggers)找到windbg.exe執行程式。在案頭建立捷徑,並且修改屬性如下:
"C:\WinDDK\7600.16385.0\Debuggers\windbg.exe" -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
注意事項:host os 使用對應的windbg.exe,原因是windbg.exe有32和64位之分。
1. WM和windbg的通訊串口設定(同guest os為xp的設定一致)
2. 設定guest os 啟動項
首先,運行msconfig進入引導tab頁,點擊進階選項,將調試選上,並且注意調試連接埠要和通訊串口的設定保持一致,重啟guest os.
其次, 方法一:啟動guest os後,以管理員權限啟動dbgview.exe。
方法二:如果想調試Kdprint的話可以修改註冊表
[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Debug Print Filter] DEFAULT=dword:0000000f
3. 配置windbg的捷徑(同guest os為xp的設定一致)
1. 載入符號檔案
在windbg上鍵入:.reload
鍵入:ld charsample
鍵入:lm l
2. 設定斷點
點擊菜單“File”-> ”OpenSource File…”, 選擇驅動程式目錄下的源檔案queue.cpp並開啟。將游標移動到某指令位置,使用F9設定斷點,則該處代碼顯示為紅色,就表示斷點已經設定了。
3. 使用F11可進行單步調試