Windows CE和 Windows2000/XP設(shè)備驅(qū)動開發(fā)的區(qū)別
引 言
Windows CE是一個32位、多任務(wù)、多線程的嵌入式操作系統(tǒng),是微軟專門為信息設(shè)備、移動應(yīng)用、消費類電子產(chǎn)品、嵌入式應(yīng)用等非PC領(lǐng)域設(shè)計的操作系統(tǒng)產(chǎn)品,在外觀和使用的感覺上十分接近桌面Windows系統(tǒng)。它使用平面內(nèi)存模式尋址,可以同時運行多個程序并支持一個程序中的多個線程,并且非常精煉,只有很小的內(nèi)存要求。與基于PC的操作系統(tǒng)不同,Windows CE不需要標(biāo)準硬件,反而支持各種各樣的CPU(如X86、PowerPC、ARM、MIPS等),通過OEM適配層(OEM adaptation layer)可以把Windows CE適配到任何硬件平臺。Windows CE是微軟Windows操作系統(tǒng)家族的一個成員,支持用于Windows 2000/XP和Windows 98等桌面Windows操作系統(tǒng)的Win32 API的一個子集。由于它不是桌面Windows操作系統(tǒng)的一部分或縮減版本,使得開發(fā)Windows CE的驅(qū)動程序與開發(fā)桌面Windows的驅(qū)動程序有所不同。本文將著重討論這些區(qū)別,以使廣大熟悉桌面Windows驅(qū)動程序開發(fā)的程序員能快速掌握嵌入式操作系統(tǒng)WindowsCE驅(qū)動程序的開發(fā)方法。
1 驅(qū)動結(jié)構(gòu)模型比較
在桌面Windows系統(tǒng),以支持Windows2000/XP的WDM驅(qū)動模型為例。WDM體系結(jié)構(gòu)實行分層處理,即設(shè)備驅(qū)動被分成了若干層――最高層驅(qū)動程序、中間層驅(qū)動程序、最低層驅(qū)動程序,如圖1所示。
在Windows CE驅(qū)動中,按驅(qū)動的結(jié)構(gòu)可以分為兩種類型――分層式設(shè)備驅(qū)動程序和整體式驅(qū)動程序,如圖2所示。分層式設(shè)備驅(qū)動程序由上層和下層兩部分代碼組成。上層的程序叫做模型設(shè)備驅(qū)動程序(MDD),下層的程序則叫做平臺相關(guān)的驅(qū)動程序(PDD)。整體式驅(qū)動程序的源代碼由中斷服務(wù)線程代碼和針對平臺的代碼組成。
同桌面Windows設(shè)備驅(qū)動結(jié)構(gòu)模型相比,Windows CE設(shè)備驅(qū)動相對簡單一些。正如圖1和圖2所示,兩種操作系統(tǒng)的設(shè)備驅(qū)動雖然存在許多相似的地方,都采用了模塊、分層的設(shè)計方法,但是還存在許多不同的地方。在Windows CE操作系統(tǒng)中,分層的驅(qū)動程序并不適用于所用的驅(qū)動,尤其是將驅(qū)動程序分為兩層將會導(dǎo)致在驅(qū)動程序操作時附加的功能調(diào)用,這無疑會降低驅(qū)動程序的效率。對于時間或性能關(guān)鍵的實時操作,整體式驅(qū)動程序?qū)m合。
在桌面Windows系統(tǒng)中,驅(qū)動各層通信之間使用一種稱為I/O請求包(IRP)的數(shù)據(jù)結(jié)構(gòu)進行通信。影響到設(shè)備的每個操作都使用I/O請求包,采用層次結(jié)構(gòu)可以使I/O請求過程更加明了。I/O管理器發(fā)送IRP來請求驅(qū)動程序的處理,通常IRP由分層的驅(qū)動程序棧來處理,高層的驅(qū)動程序把請求劃分成更簡單的請求并傳遞給下層驅(qū)動程序。IRP首先被送到設(shè)備堆棧的最上層驅(qū)動程序,然后逐漸過濾到下層的驅(qū)動程序。每一層驅(qū)動程序都可以決定如何處理IRP。而Windows CE驅(qū)動各層之間的通信沒有采用IRP通信機制,而是通過接口函數(shù)調(diào)用實現(xiàn)的。設(shè)備驅(qū)動程序接口(Device Driver Interface,DDI)是在MDD層中實現(xiàn)的函數(shù)集,系統(tǒng)中的GWES模塊通過這個接口調(diào)用設(shè)備驅(qū)動程序;設(shè)備驅(qū)動程序服務(wù)器接口(Device Driver Service Provider Interface,DDSI)是在PDD層中實現(xiàn)的函數(shù)集并由MDD調(diào)用。
2 設(shè)備驅(qū)動組成部分比較
簡單地說,驅(qū)動程序是一些例程的集合,它們被動地存在,等待主機系統(tǒng)軟件來調(diào)用或激活它們。在Win-dows系統(tǒng)中驅(qū)動,具體的驅(qū)動程序有所不同,其包含的例程也不同,但其主要例程是相同的。圖3描述一個Windows驅(qū)動的基本流程。
以下從幾個方面闡述WindowsCE和桌面Windows設(shè)備驅(qū)動組成的不同。
2.1 驅(qū)動程序的入口點
在桌面Windows和Windows CE兩個系統(tǒng)中的驅(qū)動程序都含有初始化模塊,該模塊主要功能是完成驅(qū)動程序的初始化及卸載。在桌面Windows系統(tǒng)的初始化模塊中,包括每一個設(shè)備驅(qū)動程序都有的一個初始化入口點――DriverEntry例程,每次設(shè)備驅(qū)動程序啟動時該例程被系統(tǒng)自動調(diào)用。其最重要的功能是設(shè)置驅(qū)動程序?qū)?yīng)于I/O請求的主功能代碼(MajorFunction)的回調(diào)例程。DriverEntry例程如下:
評論