WinCE設備驅動程序分類

從驅動加載方式來區分
      在深入探討Windows CE所支持的外圍設備驅動程序之前,先了解在WinCE平臺上使用的兩種設備:內建設備和可安裝設備。因此,從驅動加載方式來看WinCE可分爲本機設備驅動(Built-In Driver)、可加載驅動(Loadable Driver)以及混合型驅動。

  ①本機設備驅動
      本機設備驅動即Native Device Drivers。WinCE設計成可直接使用內建設備,這些設備由本機驅動過程控制,而本機驅動程序又與WinCE的核心組件緊密相連。這些驅動對應的設備通常在系統啓動時,在GWES的進程空間內被加載,因此它們不是以獨立的DLL形式存在,也因此要求每一個本機驅動程序都必須與稱爲設備驅動程序接口(DDI)的特定接口一致。

      本機設備是指整合進平臺的設備,其中包括顯示、觸摸面板、音頻、串行埠、LED、電池和PC卡插座等。如果沒有這些本機設備整個系統就不能和用戶信息交流,例如觸摸面板和顯示等。本機驅動程序一般設計爲動態鏈接庫,但有兩個例外:電池和LED驅動程序由於小而設計爲靜態庫(當建立CE圖像時與GWES模塊鏈接)。這些設備相應的驅動程序是在WinCE平臺開發過程中由OEM開發的,它們儲存在ROM或閃存內。通常只有OEM纔會對本機設備驅動程序進行修改,其它自由設備生產商只提供附加的硬件設備,對本機設備驅動程序不會有過多涉及。

  ②可加載設備驅動
      可加載設備是指可與平臺連接和分離的第三方接口設備,可由用戶隨時安裝和卸載。這種外圍設備的驅動也被稱爲流驅動,這些驅動可以在系統啓動時或者和啓動後的任何時候由設備管理器動態加載。通常這類驅動是以DLL動態鏈接庫的形式存在,系統加載後這些驅動程序也只是以用戶態的角色運行。可加載驅動程序是通過文件操作API來從設備管理器和應用程序獲得命令。在WinCE典型的可加載驅動有:PCMCIA driver(PCMCIA.dll)、Serial driver(SERIAL.dll)、ATAFLASH driver(ATA.dll)、Ethernet driver(NE2000.dll,SMSC100FD.dll)。

      與本機驅動程序不同的是,所有可加載流驅動程序都共享一個公用接口。該接口由每個驅動程序內的10個功能或記錄點組成,這些功能與應用程序所用的文件API中的功能匹配。因此,控制可加載設備的流接口驅動程序一般由應用程序存取,流接口驅動程序由一個特殊文件來將設備功能展現給應用程序的,該文件可被打開、讀取、寫入和關閉。例如,用戶將一個GPS設備與平臺相連後,就可啓動有GPS功能的應用程序來存取並使用該設備。WinCE是使用已有的API來讓應用程序存取這些驅動程序,而不是建立新的API。

 

從驅動程序層次上分類
      一般可以分爲獨立驅動和層次型驅動兩類。獨立驅動程序是指將驅動程序編寫成同時包含Model Device Driver(MDD)和Platform Dependent Driver(PDD)層的獨立驅動。使用獨立驅動的好處在於可以省去MDD和PDD層驅動之間的信息傳遞,這一點在實時處理中非常重要。獨立驅動的代碼包括中斷服務例程和平臺相關處理函數。另外,如果設備的操作和MDD驅動層的接口描述相吻合,用獨立驅動程序可以提高處理性能。

      層次型驅動是指分爲兩層,較上層的MDD和比較下層的PDD。MDD實現的是和平臺無關的功能,它描述了一個通用的驅動程序框架;而PDD是和硬件以及平臺相關的代碼組成。MDD調用PDD中特定的接口來獲取硬件相關的信息。當使用層次型驅動的時候,一般只需要基於相近的樣列驅動程序,針對特定的硬件只修改PDD程序,MDD建立的框架可繼續使用。但由於層次間接口的層層調用以及消息的傳遞,使得處理速度相對於獨立驅動程序要慢。因此,在嵌入式實時要求苛刻的環境下,層次型驅動顯得不是很適合。

      簡單的說,獨立驅動是把PDD與MDD寫在一起,沒有做嚴格的區分,通常這種驅動比較簡單,比如ATADISK。至於本機驅動和加載式流驅動是從驅動與系統其它模塊(調用者)的接口形式上做的分類。所以,一個加載式驅動程序可以是獨立的流式驅動,例如ATADISK;也可以是分層的流式驅動,例如OHCI。也就是說,獨立和分層是驅動實現方式上的分類,而本機和加載流式則是驅動模型上的分類。所謂本機驅動就是操作系統有保留專門的接口,而加載流式驅動是指編寫DLL文件導出各種流式接口函數的接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章