Windows CE嵌入式開發入門--基於Xscale架構
傅曦,陳黎等 人民郵電出版社
第九章 Windows CE BSP及驅動程式結構分析
9.1 Windows CE驅動程式結構概述
WindowsCE的驅動程式可以從多種角度進行區分。
1、從載入以及介面方式來區分
可以分為本機裝置驅動(Build-In Driver)、可載入驅動(Loadable Drive)以及混合型驅動。
(1)本機裝置驅動
本機裝置驅動,即Native Device Drivers.這些驅動程式在系統啟動時,在GWES的進程空間內被載入,因此他們不是以獨立的DLL形式存在。這些驅動對應的設
備通常在系統啟動時就要求被載入,如果沒有串口,也沒用LCD的話,整個系統就不能和使用者資訊交流。另外,流驅動程式也能作為本機裝置驅動存在。
(2)可載入驅動
也被稱為流驅動。
這些驅動可以在系統啟動時或者啟動後的任何時候由裝置管理員動態載入。通常它們以DLL動態連結程式庫的形式存在,系統載入它們後,這些驅動程式也只是以使用者
態的角色運行。可載入驅動程式通過檔案操作API來從裝置管理員和應用程式獲得命令。
在WinCE中,典型的可載入驅動有以下各類:
A、PCMCIA driver (PCMCIA.dll)
B、Serial driver (SERIAL.dll)
C、ATAFLASH driver (ATA.dll)
D、Ethernet driver (NE2000.dll,SMSC100FD.dll)
(3)混合型驅動
這類驅動綜合了前兩種驅動的特性。它同時使用了stream介面和custom-purpose介面。混合型驅動主要是提供custom-purpose介面,但是由於需要和系統中只
允許使用stream介面的那些模組進行互動,因此也必須提供stream介面。例如,PC card socket驅動同時擁有兩套介面。
2、從驅動層次上分
可以分為獨立驅動和層次型驅動。
(1)獨立驅動程式
可以將驅動程式編寫成同時包含MDD和PDD層的獨立驅動。獨立驅動的代碼應當包括插斷服務常式和平台相關處理函數。使用獨立驅動的好處在於可以省去
MDD和PDD層驅動之間的資訊傳遞,這一點在即時處理中,非常重要。另外,如果裝置的操作和MDD層驅動的介面描述相吻合,可以使用獨立驅動程式提高處理性
能。
(2)層次型驅動
層次型驅動分為兩層,較上層的MDD和較下層的PDD。MDD實現的是和平台無關的功能,它描述了一個通用的驅動程式架構。而PDD是和硬體以及平台相關的代
碼組成。MDD調用PDD中特定的介面來擷取硬體相關資訊。當使用層次型驅動的時候,一般只需要基於相近的範例驅動程式,針對特定的硬體修改PDD程式,MDD建
立的架構可以繼續使用。缺點是,訊息傳遞多,處理速度相對較慢。
一般MDD層將完成以下任務:
A、連結PDD層,並且定義它要使用到的DDSI(Device Driver Service Provider Interface)函數集;
B、向裝置管理員提供Device Driver Interface(DDI)介面集;
C、處理複雜的事件,如中斷等。
每一種MDD驅動都處理不同種類的裝置。DDI是由MDD層驅動以及獨立型驅動提供給裝置管理員的一組介面集。DDSI是由PDD向MDD層提供的介面集。
在開發過程中,MDD層驅動是不需要被修改的。微軟公司不保證被修改的MDD效能在系統中正確運行。和MDD層不同的是,PDD層驅動必須被修改成和特定硬體相匹
配的代碼。程式員可以自己開發一個PDD程式,多數情況下,建議開發人員在Platform Builder提供的範例驅動程式上進行修改。
例如:Platform Bulider 提供了Wavedev驅動程式,它的代碼位於pubilc\common\oak\drivers\WAVEDEV下,這是一個容易理解的流介面層次型驅動程式。此
範例audio驅動程式僅提供了播放及錄音功能,只提供播放功能的結構架構,播放功能和音訊裝置的互動還需要PDD層來解決。
-----cds20130702