高守生
摘 要:介紹Windows CE及其特點,深入研究Windows CE本機設備驅(qū)動程序和流接口驅(qū)動程序模型及工作方法。在多主I2C總線模式下,根據(jù)S3C2440處理器的集成功能和接口模式,以S3C2440處理器的寄存器物理地址和虛擬地址來捆綁和配置I2C總線控制器設計為例,著重闡述了嵌入式Windows CE流接口驅(qū)動程序的開發(fā)過程,為此類設備驅(qū)動的快速開發(fā)提供了很好的思路。
關鍵詞:Windows CE;設備驅(qū)動;I2C;S3C2440
中圖分類號:TP334
0 引 言
伴隨著后PC時代的到來,人們越來越多地接觸到一個新的概念即嵌入式技術。嵌入式技術已被廣泛地應用于科學研究、工程設計、軍事技術,以及文藝商業(yè)等方方面面,成為后PC時代IT領域發(fā)展的主力軍。這也極大地刺激了嵌入式系統(tǒng)的發(fā)展和產(chǎn)業(yè)化的進程。嵌入式操作系統(tǒng)作為嵌入式系統(tǒng)的核心,是連接嵌入式設備和應用的重要部件。它一方面要支持各種功能及規(guī)格的硬件設備,另一方面要為各種應用程序提供┮恢陋的功能調(diào)用接口,同時還需要在有限的系統(tǒng)資源上盡可能快地完成應用的計算需求。目前,主流的嵌入式操作系統(tǒng)有嵌入式Linux,Palm OS,VxWorks,Windows CE等。
1 Windows CE簡介
Windows CE是一個開放的、可裁剪的、32位實時嵌入式窗口的操作系統(tǒng)。與其他桌面版窗口操作系統(tǒng)相比,它具有可靠性好,實時性高,內(nèi)核體積小及可伸縮性,通信能力強等特點。所以被廣泛用于各種嵌入式智能設備的開發(fā)中,是當今應用最多,增長最快的嵌入式操作系統(tǒng)。
Windows CE是從整體上為有限資源平臺設計的多線程、完整優(yōu)先權、多任務的操作系統(tǒng)[1,2] 。它采用高度的模塊化設計,這些模塊之間可能是獨立的,也可能有一些依賴關系。在Windows CE中最主要的系統(tǒng)模塊有五個,它們是:
(1) 內(nèi)核:Windows CE的內(nèi)核可以非常小,最小的內(nèi)核只有500 KB。這是因為系統(tǒng)的大部分功能都可以在各自的功能模塊中完成。它是整個Windows CE操作系統(tǒng)的核心,主要完成六類功能,即處理器調(diào)度、內(nèi)存管理、異常處理、系統(tǒng)內(nèi)的通信機制,為其他部分提供核心調(diào)用例程,為系統(tǒng)范圍內(nèi)的調(diào)試提供支持。
(2) 設備管理模塊:提供系統(tǒng)范圍內(nèi)基本的設備列表管理、即插即用管理、電源管理、I/O資源管理等,并實現(xiàn)設備驅(qū)動程序得以工作的基本機制。設備配置信息存儲在Windows CE的注冊表中。
(3) 數(shù)據(jù)存儲模塊:提供基本的數(shù)據(jù)存儲能力,包括對象存儲和文件系統(tǒng)。目前,對象存儲的大小限制為256 MB的RAM ,對象存儲里的單個文件限制為最大32 MB;對象存儲在Windows CE中的作用類似于PC機中的硬盤,它為應用程序及相關數(shù)據(jù)提供了持久穩(wěn)固的存儲。在Windows CE中,提供了三種文件系統(tǒng),分別為基于ROM文件系統(tǒng),基于RAM文件系統(tǒng),以及用于支持外圍存儲設備的FAT文件系統(tǒng)。另外,嵌入式開發(fā)者也可以創(chuàng)建和注冊屬性文件系統(tǒng)
(4) 圖形用戶界面模塊(GWES):它提供以下幾個主要功能:基本的繪圖引擎、窗口管理、界面的事件機制等。在Windows CE中GWES是操作系統(tǒng)、應用程序以及用戶之間的接口。它支持組成Windows CE圖形用戶界面的窗口、對話框、控件、菜單和資源,使用戶能夠控制應用程序。同時,GWES還負責部分驅(qū)動程序的加載工作,主要包括顯示、鍵盤、鼠標及觸摸屏等的驅(qū)動。
(5) 通信模塊:在整個Windows CE中,網(wǎng)絡通信模塊是最為獨立的一部分,它運行時體現(xiàn)為一系列的動態(tài)鏈接庫。其設計目標主要體現(xiàn)在四點:
① 高效能。提供最好的網(wǎng)絡應用平臺。
② 包容力。支持廣泛的網(wǎng)絡類型和選項。
③ 易用性。通過系統(tǒng)提供的API,用戶可以容易地開發(fā)出各種網(wǎng)絡應用。
④ 可拆卸。這是整個網(wǎng)絡系統(tǒng)構架的特征,系統(tǒng)可以拆成很多獨立的部分,應用系統(tǒng)可以根據(jù)需要選擇其中一部分,這樣可以降低系統(tǒng)開銷,使系統(tǒng)更加精簡。
除了這五個主要的系統(tǒng)模塊外,Windows CE還有一些其他的模塊,如OAL模塊、驅(qū)動程序模塊等。在實際的開發(fā)應用中,嵌入式開發(fā)者可以根據(jù)設備的性質(zhì),只選擇那些必要的模塊或模塊中的組件,包含進操作系統(tǒng)鏡像中。
2 Windows CE驅(qū)動程序模型
在操作系統(tǒng)中設備驅(qū)動程序通常扮演著無名英雄的角色。正是由于驅(qū)動程序的存在,大多數(shù)操作系統(tǒng)之上的應用程序都與硬件無關。應用程序的開發(fā)者和最終用戶通常都不必關心底層的硬件如何工作。Windows CE之所以能夠支持各種各樣的硬件設備,也是因為存在對應的設備驅(qū)動程序。這些設備驅(qū)動程序提供了操作系統(tǒng)與硬件交互的方式,是連接硬件和操作系統(tǒng)之間的橋梁。
當前Windows CE有四種設備模型,其中本機設備驅(qū)動程序和流接口驅(qū)動程序模型是專用于Windows CE驅(qū)動程序的開發(fā)方法。另外,兩種外部模型也可應用于其他操作系統(tǒng),它們分別是通用串行總線(USB)和網(wǎng)絡驅(qū)動器接口標準(NDIS)的驅(qū)動程序。
2.1 本機設備驅(qū)動程序
在開始開發(fā)本機設備驅(qū)動程序前,必須先了解哪些設備的驅(qū)動程序是采用本機設備驅(qū)動模型實現(xiàn)的。正如它的名字,本機設備驅(qū)動程序適用于集成到基于Windows CE平臺的設備,如鍵盤、顯示器、PC卡插槽等設備。本機設備驅(qū)動程序通常使用Windows CE提供的特定接口,而且都有明確和專一的目的。微軟本身提供了很多本機設備驅(qū)動程序的樣本程序,這樣絕大多數(shù)的開發(fā)人員不需要編寫本機設備驅(qū)動程序。除非是OEM開發(fā)商想為新平臺定制Windows CE,那么他們就需要編寫自己的本機設備驅(qū)動程序,當然可以將微軟的本機設備驅(qū)動程序的例子直接移植到新平臺上。
本機設備驅(qū)動程序分為兩種類型:單片驅(qū)動程序和分層的驅(qū)動程序[5]。單片驅(qū)動程序的代碼直接與硬件交互,因此它包含與特定的某款硬件相關聯(lián)的代碼。通常,單片驅(qū)動程序會暴露DDI接口給操作系統(tǒng),DDI函數(shù)是操作系統(tǒng)與驅(qū)動程序交互的接口協(xié)議。而分層驅(qū)動程序由兩個設置好的層組成:上層是模型設備驅(qū)動程序(MDD),下層是依賴平臺的驅(qū)動程序(PDD)。MDD層與硬件平臺無關,它通過驅(qū)動程序接口DDI與應用程序通信。
開發(fā)驅(qū)動程序時,一般不必修改MDD層。只需關心與具體硬件平臺有關的下層,依賴平臺的驅(qū)動程序?qū)覲DD。PDD層通過設備驅(qū)動服務接口DDSI直接管理硬件。通常,MDD層的代碼與PDD層的代碼會被編譯成獨立的靜態(tài)LIB庫,然后進行鏈接,形成可執(zhí)行的驅(qū)動程序。因此,MDD和PDD的劃分只是在源代碼邏輯層面,在驅(qū)動程序的二進制可執(zhí)行代碼中不會存在MDD與PDD的分層。
2.2 流接口驅(qū)動程序
流接口驅(qū)動程序是為了連接到Windows CE平臺的外圍設備而設計的,如打印機、尋呼機、調(diào)制解調(diào)器等。它是動態(tài)鏈接庫,由設備管理器動態(tài)加載、管理和卸載[8]。與具有單獨目的接口的本機設備驅(qū)動程序相比,流接口驅(qū)動通過使用相同的接口,導出一組相同的函數(shù)即流接口函數(shù)。流接口函數(shù)也稱作流接口驅(qū)動的入口點,用來完成標準的文件I/O函數(shù)和電源管理函數(shù),這些函數(shù)是提供給Windows CE的操作系統(tǒng)內(nèi)核使用的。流接口驅(qū)動的入口點主要包括 XXX[CD#*2]Init,XXX[CD#*2]Deinit,XXX[CD#*2]Open,XXX[CD#*2]Close,XXX[CD#*2]Read,XXX[CD#*2]Write,XXX[CD#*2]Seek,XXX[CD#*2]PowerUp,XXX[CD#*2]PowerDown和XXX[CD#*2]IOControl。其中,XXX是在驅(qū)動程序注冊表里定義的設備文件名的前綴。在Windows CE中設備文件名通常由3個大寫字母,1個數(shù)字和1個冒號組成。
流接口驅(qū)動對硬件設備的訪問涉及五個部分[6]:應用程序、FileSys.exe、設備管理器、流式接口驅(qū)動程序本身以及硬件。其中,應用程序和流式接口驅(qū)動程序是由用戶編寫的;FileSys.exe與設備管理器是由Windows CE操作系統(tǒng)提供的組件,用戶無法修改。
在應用程序使用文件API對設備進行訪問時,文件API被操作系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進程中;然后FileSys.exe發(fā)現(xiàn)是對設備操作,就會把執(zhí)行交給設備管理器處理;接著設備管理器根據(jù)具體的請求,調(diào)用不同流式接口驅(qū)動程序中提供的接口;最后驅(qū)動程序負責與硬件交互。
3 Windows CE驅(qū)動開發(fā)實例
這里以基于S3C2440A的I2C驅(qū)動程序為例,共同探討Windows CE下驅(qū)動程序的開發(fā)。
I2C(Inter Integrated Circuit)總線是1980年Phi[CD*2]lips公司推出的。通過I2C兩根引線:一根串行地址線(SDA)和一根串行時鐘線(SCL),可使微控制器與外部設備之間進行串行通信或使主設備和從設備之間實現(xiàn)雙向數(shù)據(jù)傳送。I2C總線遵從同步串行傳輸協(xié)議,即各位串行發(fā)送,由時鐘(clock)線指示讀數(shù)據(jù)(data)線的時刻。每個數(shù)據(jù)包前有一個地址,以指示由哪個器件來接收該數(shù)據(jù)。
S3C2440A是三星公司推出的16/32位精簡指令集微處理器,它是為應用于小型掌上設備和高性價比、低功耗、高性能的嵌入式系統(tǒng)而提供的微控制解決方案。S3C2440使用了ARM920T內(nèi)核,芯片上提供的集成功能包括:分開的16 KB指令/數(shù)據(jù)緩存、SDRAM控制器、LCD控制器、4通道DMA、3通道UART、I2C總線、IIS總線、SD主機接口、PWM定時器、看門狗、片上PLL時鐘發(fā)生器、8通道10位A/D控制器和觸摸屏接口、攝像頭接口以及帶日歷函數(shù)的實時時鐘。S3C2440A最高頻率可達533 MHz,且功耗只有毫瓦級[9]。
在多主I2C總線模式下,S3C2440A微處理器從設備接收串行數(shù)據(jù)或發(fā)送串行數(shù)據(jù)到從設備。主S3C2440A可以初始化或終止I2C總線上的數(shù)據(jù)傳輸。在S3C2440A中,I2C總線使用標準的總線仲裁過程。S3C2440A的I2C總線接口有4種模式[9]:主接收模式、主發(fā)送模式、從接收模式和從發(fā)送模式。為了控制多主I2C總線,必須對下面這幾個寄存器進行讀/寫:I2C控制寄存器I2CCON,I2C控制/狀態(tài)寄存器I2CSTATI2C、數(shù)據(jù)寄存器I2CDS,I2C地址寄存器I2CADD。
[BT3]3.1 編寫流驅(qū)動程序
首先,需要在oalintr.h中添加I2C的中斷號;然后在cfw.c中初始化I2C中斷;接下來,編寫I2C的驅(qū)動程序。這里采用Windows CE下的流接口驅(qū)動模型。在I2C[CD#*2]Init中需要把IOPORT registers,I2C Bus registers,CLK/PWR registers等寄存器的物理地址和虛擬地址綁定起來。同時配置I2C 總線控制器,使能I2C的Clock/Power controller。其中一些語句為:
然后,可實現(xiàn)I2C[CD#*2]Open,I2C[CD#*2]Read,I2C[CD#*2]Write,I2C[CD#*2]Close函數(shù)等,通過對各個寄存器進行操作,從而得到I2C總線讀取和發(fā)送的數(shù)據(jù)。
完成編譯之后,得到的DLL還不能作為流接口,還需要編寫一個def文件,將它的接口函數(shù)導出。
[BT3]3.2 編寫驅(qū)動程序注冊表
一個具體的流接口驅(qū)動程序與注冊表部分是不能分開的。在此,使用記事本編寫注冊表的內(nèi)容如下:
[BT3]3.3 編寫CEC文件
有了驅(qū)動程序和注冊表文件,驅(qū)動程序還不能正常運行。因為它還沒有被加入到CEC內(nèi)核中。將一個文件添加到定制內(nèi)核中的方法通常有兩種:一種是修改BIB文件;另一種是編寫一個CEC文件,并添加到PB中。將編寫好的CEC文件導入到PB中后,重新進行Build,就可以生成包含該流接口的驅(qū)動程序。
4 結 語
在嵌入式技術飛速發(fā)展的今天,Windows CE必將有廣泛的應用前景,這里編寫高效的設備驅(qū)動程序也將帶動外圍設備的開發(fā)。