背景知識
1 驅動相關
驅動在硬體上
,作業系統提供給應用程式介面以下.
windows2000/xp
上的裝置驅動程式不直接操作硬體,而是呼叫
hal功能作為與硬體的介面。
windows2000/xp
上有如下幾種型別的裝置驅動程式:
1。硬體裝置驅動程式操作硬體,它將輸出寫入物理裝置或網路,並從物理裝置或網路獲得輸入;
2。檔案系統驅動程式接受面向檔案的
i/o請求,並把它們轉化為對特殊裝置的
i/o請求。
3。過濾驅動程式擷取
i/o並在傳遞
i/o到下一層之前執行某些特定處理。
從wdm
的角度看,有三種驅動程式:
1。匯流排驅動程式用於各種匯流排控制器、介面卡、橋或可以連線子裝置的裝置,這是必須的驅動程式
2。功能驅動程式用於驅動那些主要的裝置,提供裝置的操作介面。一般來說,這也是必須的,除非採用一種原始的方法來使用這個裝置(功能都被匯流排驅動和匯流排過濾器實現了,如
scsi passthru)。3
。過濾器驅動程式用於為乙個裝置或乙個已經存在的驅動程式增加功能,或者改變來自其他驅動程式的
i/o請求和響應行為。過濾驅動程式是可選的,並且可以有任意的數目,它存在於功能驅動程式的上層或者下層、匯流排驅動程式的下層。 2
乙個簡單的驅動程式 在
vs中編寫
,驅動入口點是
driverentry,
類似於c/c++
中的main,_tmain.
乙個完整的驅動程式還應該包含有驅動解除安裝例程
.unload rountine. 示例
: //乙個簡單的驅動程式例項
#include "ntddk.h"
ntstatus driverentry ( in pdriver_object thedriverobject,
in punicode_string theregistrypath )
如何為其新增解除安裝例程: //
乙個簡單的驅動程式例項
#include "ntddk.h"
// 這裡是我們的解除安裝函式
void myunload( in pdriver_object driverobject )
ntstatus driverentry(in pdriver_object thedriverobject,
in punicode_string theregistrypath)
這樣一來,我們用重啟系統就能方便地裝載和解除安裝驅動程式了。 3
驅動整合開發除錯環境 開發
構建驅動整合開發環境
,這個內容太多了
.見下節核心驅動載入除錯
(2) 除錯
光在編譯的時候看列印語句
,是無法看到的
.因為驅動程式列印的位置在核心
.只有使用
windbg
等除錯工具
,才能夠看見列印資訊。
有兩種除錯方案:
(1)使用
debugview
與ddk
在同一系統中直接進行除錯
.debugview
是一款本地除錯軟體,它能捕獲驅動程式的除錯輸出資訊。
debugview
不僅能夠捕獲使用者模式的應用程式產生的除錯輸出,而且還能捕獲
windows
核心本身或
/和核心模式裝置驅動程式所產生的除錯輸出資訊。 使用
instdrv
安裝啟動編譯好的驅動程式
.然後使用
debugview
檢視列印資訊.
(2)在兩個系統中使用
windbg
與ddk
。將ddk
安裝在虛擬機器中,使用
windbg
在主系統中
,檢視虛擬機器執行驅動程式列印出的列印資訊
.(推薦使用)
由於驅動很容易把系統跑掛
,使用虛擬機器開發
,可以及時的恢復系統
.windbg
能夠捕獲使用者態應用程式列印資訊,由於虛擬機器對於主系統來說
,是在上層的.用
windbg
能夠看到在虛擬機器中的驅動程式產生的除錯輸出資訊.
在主系統中使用以下語句
,連線虛擬機器和主系統中的
windbg.
"c:/program files/debugging tools for windows/windbg.exe" -b -k com:pipe,port=//./pipe/com_1,baud=115200,reconnect -y
d:/windows/symbols;srv*d:/mysymbols*h
核心驅動載入除錯 2
在上一節說明了如何編寫簡單的核心驅動程式後,本節說明,建立核心驅動程式的整合開發環境.簡單說來,一共9個步驟.1.安裝winddk以及安裝ddkwizard.相關版本 ddkwizard setup v1.2.0a,ddkbuild bat.zip,ddkbuild cmd.zip 2.拷貝下面的檔...
Windbg除錯核心驅動方法1
一般說來,調速驅動程式分為兩種 1.存在pdb檔案的除錯 這裡的pdb檔案其實就是除錯符號檔案,假如我們除錯的這樣的檔案,我們可以再windbg中使用 bp 驅動名 driverentry,這個時候當載入驅動的時候,程式就會斷在入口了。2.沒有pdb檔案的除錯 在除錯別人的驅動程式時,也就是自己只有...
devmem除錯核心驅動
在linux開發中著實用到的除錯工具並不是很多。devmem的方式是提供給驅動開發人員,在應用層能夠偵測記憶體位址中的資料變化,以此來檢測驅動中對記憶體或者相關配置的正確性驗證。devmem2使用方法 devmem2 type data address 實體地址 type 要訪問的資料型別 b yt...