<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > Windows CE和 Windows2000/XP設備驅動(dòng)開(kāi)發(fā)的區別

Windows CE和 Windows2000/XP設備驅動(dòng)開(kāi)發(fā)的區別

作者: 時(shí)間:2009-12-28 來(lái)源:網(wǎng)絡(luò ) 收藏


引 言
CE是一個(gè)32位、多任務(wù)、多線(xiàn)程的嵌入式操作系統,是微軟專(zhuān)門(mén)為信息、移動(dòng)應用、消費類(lèi)電子產(chǎn)品、嵌入式應用等非PC領(lǐng)域設計的操作系統產(chǎn)品,在外觀(guān)和使用的感覺(jué)上十分接近桌面系統。它使用平面內存模式尋址,可以同時(shí)運行多個(gè)程序并支持一個(gè)程序中的多個(gè)線(xiàn)程,并且非常精煉,只有很小的內存要求。與基于PC的操作系統不同, CE不需要標準硬件,反而支持各種各樣的CPU(如X86、PowerPC、ARM、MIPS等),通過(guò)OEM適配層(OEM adaptation layer)可以把Windows CE適配到任何硬件平臺。Windows CE是微軟Windows操作系統家族的一個(gè)成員,支持用于Windows /XP和Windows 98等桌面Windows操作系統的Win32 API的一個(gè)子集。由于它不是桌面Windows操作系統的一部分或縮減版本,使得開(kāi)發(fā)Windows CE的驅動(dòng)程序與開(kāi)發(fā)桌面Windows的驅動(dòng)程序有所不同。本文將著(zhù)重討論這些區別,以使廣大熟悉桌面Windows驅動(dòng)程序開(kāi)發(fā)的程序員能快速掌握嵌入式操作系統WindowsCE驅動(dòng)程序的開(kāi)發(fā)方法。

本文引用地址:http://dyxdggzs.com/article/202582.htm

1 驅動(dòng)結構模型比較
在桌面Windows系統,以支持Windows/XP的WDM驅動(dòng)模型為例。WDM體系結構實(shí)行分層處理,即驅動(dòng)被分成了若干層――最高層驅動(dòng)程序、中間層驅動(dòng)程序、最低層驅動(dòng)程序,如圖1所示。

在Windows CE驅動(dòng)中,按驅動(dòng)的結構可以分為兩種類(lèi)型――分層式驅動(dòng)程序和整體式驅動(dòng)程序,如圖2所示。分層式設備驅動(dòng)程序由上層和下層兩部分代碼組成。上層的程序叫做模型設備驅動(dòng)程序(MDD),下層的程序則叫做平臺相關(guān)的驅動(dòng)程序(PDD)。整體式驅動(dòng)程序的源代碼由中斷服務(wù)線(xiàn)程代碼和針對平臺的代碼組成。
同桌面Windows設備驅動(dòng)結構模型相比,Windows CE設備驅動(dòng)相對簡(jiǎn)單一些。正如圖1和圖2所示,兩種操作系統的設備驅動(dòng)雖然存在許多相似的地方,都采用了模塊、分層的設計方法,但是還存在許多不同的地方。在Windows CE操作系統中,分層的驅動(dòng)程序并不適用于所用的驅動(dòng),尤其是將驅動(dòng)程序分為兩層將會(huì )導致在驅動(dòng)程序操作時(shí)附加的功能調用,這無(wú)疑會(huì )降低驅動(dòng)程序的效率。對于時(shí)間或性能關(guān)鍵的實(shí)時(shí)操作,整體式驅動(dòng)程序將會(huì )更適合。

在桌面Windows系統中,驅動(dòng)各層通信之間使用一種稱(chēng)為I/O請求包(IRP)的數據結構進(jìn)行通信。影響到設備的每個(gè)操作都使用I/O請求包,采用層次結構可以使I/O請求過(guò)程更加明了。I/O管理器發(fā)送IRP來(lái)請求驅動(dòng)程序的處理,通常IRP由分層的驅動(dòng)程序棧來(lái)處理,高層的驅動(dòng)程序把請求劃分成更簡(jiǎn)單的請求并傳遞給下層驅動(dòng)程序。IRP首先被送到設備堆棧的最上層驅動(dòng)程序,然后逐漸過(guò)濾到下層的驅動(dòng)程序。每一層驅動(dòng)程序都可以決定如何處理IRP。而Windows CE驅動(dòng)各層之間的通信沒(méi)有采用IRP通信機制,而是通過(guò)接口函數調用實(shí)現的。設備驅動(dòng)程序接口(Device Driver Interface,DDI)是在MDD層中實(shí)現的函數集,系統中的GWES模塊通過(guò)這個(gè)接口調用設備驅動(dòng)程序;設備驅動(dòng)程序服務(wù)器接口(Device Driver Service Provider Interface,DDSI)是在PDD層中實(shí)現的函數集并由MDD調用。

2 設備驅動(dòng)組成部分比較
簡(jiǎn)單地說(shuō),驅動(dòng)程序是一些例程的集合,它們被動(dòng)地存在,等待主機系統軟件來(lái)調用或激活它們。在Win-dows系統中驅動(dòng),具體的驅動(dòng)程序有所不同,其包含的例程也不同,但其主要例程是相同的。圖3描述一個(gè)Windows驅動(dòng)的基本流程。

以下從幾個(gè)方面闡述WindowsCE和桌面Windows設備驅動(dòng)組成的不同。
2.1 驅動(dòng)程序的入口點(diǎn)
在桌面Windows和Windows CE兩個(gè)系統中的驅動(dòng)程序都含有初始化模塊,該模塊主要功能是完成驅動(dòng)程序的初始化及卸載。在桌面Windows系統的初始化模塊中,包括每一個(gè)設備驅動(dòng)程序都有的一個(gè)初始化入口點(diǎn)――DriverEntry例程,每次設備驅動(dòng)程序啟動(dòng)時(shí)該例程被系統自動(dòng)調用。其最重要的功能是設置驅動(dòng)程序對應于I/O請求的主功能代碼(MajorFunction)的回調例程。DriverEntry例程如下:


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>