WDF驅動中KMDF與UMDF區別

2021-06-23 07:23:29 字數 937 閱讀 3677

眾所周知, 早期的windows 95/98的裝置驅動是vxd(virtual device driver),其中x表示某一類裝置。從windows 2000開始,開發驅動程式必以wdm(windows driver model)為基礎的,但是,如果使用ddk來開發wdm,其開發難度之大,根本不能奢望像使用者模式應用程式開發那樣容易,因此,一般使用者都是使用windriver、driverstudio之類的第三方工具。為改善這種局面,從vista開始,微軟推出了新的驅動程式開發環境wdf(windows driver foundation )。wdf和wdm的關係有點類似於mfc和windows sdk的關係,有程式設計經驗的人一看就知道為何wdf開發比wdm容易了。wdf有kmdf(核心模式的驅動程式)和umdf(使用者模式的驅動程式)兩種模式:

1、核心模式驅動程式 kmdf(kernel-mode driver framework): 

這類驅動程式作為核心模式作業系統元件的一部分執行,它們管理i/o、即插即用、記憶體、程序和執行緒、安全等。核心模式驅動程式通常為分層結構。 關於kmdf更多的內容,可參閱 msdn中「getting started with kernel-mode driver framework 」。

3、無論核心模式的驅動程式或者使用者模式的驅動程式,都使用同一環境進行構建,這一環境稱為wdk;都採用同一套物件模型構建,採用同乙個基礎承載,這個基礎就是wdf。由於wdf驅動模型提供了物件導向和事件驅動的驅動程式開發框架,大大降低了開發難度。從現在開始,掌握windows裝置驅動程式的開發人員,由過去的「專業」人士,將變為「普通」大眾。因此,像windriver、driverstudio之類的第三方工具也隨之退出歷史舞台。

4、kmdf是windows系統底層驅動,檔名為:*.sys,vista為2萬多外設提供了kmdf,其中也包括usb2.0,因此對於具有usb2.0協議的fx2,只需編寫與fx2相關的umdf即可;umdf是使用者層驅動,檔名為:*.dll。

Linux驅動中的outb 與volatile

在linux的驅動程式中,都會使用大量的outb outw inb inw等等巨集來訪問硬體或暫存器。這些巨集的定義都在相應處理器體系下的include asm目錄下的io.h中定義。追究下去,這些巨集最終就是乙個volatile變數的的賦值 define arch putb v,a volatil...

Windows的裝置驅動框架中的上層與下層模組

windows的裝置驅動框架中的上層與下層模組 在windows的裝置驅動框架中,下層模組向上層模組提供乙個資料結構指標。但是,上層模組並不直接從這個資料結構獲取具體的函式指標,更不直接使用這些函式指標呼叫下層模組中的函式 而是通過一些由核心提供的函式下達 i o請求包 即irp,間接地呼叫下層模組...

Windows的裝置驅動框架中的上層與下層模組

windows的裝置驅動框架中的上層與下層模組 在windows的裝置驅動框架中,下層模組向上層模組提供乙個資料結構指標。但是,上層模組並不直接從這個資料結構獲取具體的函式指標,更不直接使用這 些函式指標呼叫下層模組中的函式 而是通過一些由核心提供的函式下達 i o請求包 即irp,間接地呼叫下層模...