国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Windows CE下設(shè)備驅(qū)動(dòng)的研究與實(shí)踐

2010-06-22 03:41高守生
現(xiàn)代電子技術(shù) 2009年22期

高守生

摘 要:介紹Windows CE及其特點(diǎn),深入研究Windows CE本機(jī)設(shè)備驅(qū)動(dòng)程序和流接口驅(qū)動(dòng)程序模型及工作方法。在多主I2C總線模式下,根據(jù)S3C2440處理器的集成功能和接口模式,以S3C2440處理器的寄存器物理地址和虛擬地址來捆綁和配置I2C總線控制器設(shè)計(jì)為例,著重闡述了嵌入式Windows CE流接口驅(qū)動(dòng)程序的開發(fā)過程,為此類設(shè)備驅(qū)動(dòng)的快速開發(fā)提供了很好的思路。

關(guān)鍵詞:Windows CE;設(shè)備驅(qū)動(dòng);I2C;S3C2440

中圖分類號:TP334

0 引 言

伴隨著后PC時(shí)代的到來,人們越來越多地接觸到一個(gè)新的概念即嵌入式技術(shù)。嵌入式技術(shù)已被廣泛地應(yīng)用于科學(xué)研究、工程設(shè)計(jì)、軍事技術(shù),以及文藝商業(yè)等方方面面,成為后PC時(shí)代IT領(lǐng)域發(fā)展的主力軍。這也極大地刺激了嵌入式系統(tǒng)的發(fā)展和產(chǎn)業(yè)化的進(jìn)程。嵌入式操作系統(tǒng)作為嵌入式系統(tǒng)的核心,是連接嵌入式設(shè)備和應(yīng)用的重要部件。它一方面要支持各種功能及規(guī)格的硬件設(shè)備,另一方面要為各種應(yīng)用程序提供┮恢陋的功能調(diào)用接口,同時(shí)還需要在有限的系統(tǒng)資源上盡可能快地完成應(yīng)用的計(jì)算需求。目前,主流的嵌入式操作系統(tǒng)有嵌入式Linux,Palm OS,VxWorks,Windows CE等。

1 Windows CE簡介

Windows CE是一個(gè)開放的、可裁剪的、32位實(shí)時(shí)嵌入式窗口的操作系統(tǒng)。與其他桌面版窗口操作系統(tǒng)相比,它具有可靠性好,實(shí)時(shí)性高,內(nèi)核體積小及可伸縮性,通信能力強(qiáng)等特點(diǎn)。所以被廣泛用于各種嵌入式智能設(shè)備的開發(fā)中,是當(dāng)今應(yīng)用最多,增長最快的嵌入式操作系統(tǒng)。

Windows CE是從整體上為有限資源平臺設(shè)計(jì)的多線程、完整優(yōu)先權(quán)、多任務(wù)的操作系統(tǒng)[1,2] 。它采用高度的模塊化設(shè)計(jì),這些模塊之間可能是獨(dú)立的,也可能有一些依賴關(guān)系。在Windows CE中最主要的系統(tǒng)模塊有五個(gè),它們是:

(1) 內(nèi)核:Windows CE的內(nèi)核可以非常小,最小的內(nèi)核只有500 KB。這是因?yàn)橄到y(tǒng)的大部分功能都可以在各自的功能模塊中完成。它是整個(gè)Windows CE操作系統(tǒng)的核心,主要完成六類功能,即處理器調(diào)度、內(nèi)存管理、異常處理、系統(tǒng)內(nèi)的通信機(jī)制,為其他部分提供核心調(diào)用例程,為系統(tǒng)范圍內(nèi)的調(diào)試提供支持。

(2) 設(shè)備管理模塊:提供系統(tǒng)范圍內(nèi)基本的設(shè)備列表管理、即插即用管理、電源管理、I/O資源管理等,并實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)程序得以工作的基本機(jī)制。設(shè)備配置信息存儲在Windows CE的注冊表中。

(3) 數(shù)據(jù)存儲模塊:提供基本的數(shù)據(jù)存儲能力,包括對象存儲和文件系統(tǒng)。目前,對象存儲的大小限制為256 MB的RAM ,對象存儲里的單個(gè)文件限制為最大32 MB;對象存儲在Windows CE中的作用類似于PC機(jī)中的硬盤,它為應(yīng)用程序及相關(guān)數(shù)據(jù)提供了持久穩(wěn)固的存儲。在Windows CE中,提供了三種文件系統(tǒng),分別為基于ROM文件系統(tǒng),基于RAM文件系統(tǒng),以及用于支持外圍存儲設(shè)備的FAT文件系統(tǒng)。另外,嵌入式開發(fā)者也可以創(chuàng)建和注冊屬性文件系統(tǒng)

(4) 圖形用戶界面模塊(GWES):它提供以下幾個(gè)主要功能:基本的繪圖引擎、窗口管理、界面的事件機(jī)制等。在Windows CE中GWES是操作系統(tǒng)、應(yīng)用程序以及用戶之間的接口。它支持組成Windows CE圖形用戶界面的窗口、對話框、控件、菜單和資源,使用戶能夠控制應(yīng)用程序。同時(shí),GWES還負(fù)責(zé)部分驅(qū)動(dòng)程序的加載工作,主要包括顯示、鍵盤、鼠標(biāo)及觸摸屏等的驅(qū)動(dòng)。

(5) 通信模塊:在整個(gè)Windows CE中,網(wǎng)絡(luò)通信模塊是最為獨(dú)立的一部分,它運(yùn)行時(shí)體現(xiàn)為一系列的動(dòng)態(tài)鏈接庫。其設(shè)計(jì)目標(biāo)主要體現(xiàn)在四點(diǎn):

① 高效能。提供最好的網(wǎng)絡(luò)應(yīng)用平臺。

② 包容力。支持廣泛的網(wǎng)絡(luò)類型和選項(xiàng)。

③ 易用性。通過系統(tǒng)提供的API,用戶可以容易地開發(fā)出各種網(wǎng)絡(luò)應(yīng)用。

④ 可拆卸。這是整個(gè)網(wǎng)絡(luò)系統(tǒng)構(gòu)架的特征,系統(tǒng)可以拆成很多獨(dú)立的部分,應(yīng)用系統(tǒng)可以根據(jù)需要選擇其中一部分,這樣可以降低系統(tǒng)開銷,使系統(tǒng)更加精簡。

除了這五個(gè)主要的系統(tǒng)模塊外,Windows CE還有一些其他的模塊,如OAL模塊、驅(qū)動(dòng)程序模塊等。在實(shí)際的開發(fā)應(yīng)用中,嵌入式開發(fā)者可以根據(jù)設(shè)備的性質(zhì),只選擇那些必要的模塊或模塊中的組件,包含進(jìn)操作系統(tǒng)鏡像中。

2 Windows CE驅(qū)動(dòng)程序模型

在操作系統(tǒng)中設(shè)備驅(qū)動(dòng)程序通常扮演著無名英雄的角色。正是由于驅(qū)動(dòng)程序的存在,大多數(shù)操作系統(tǒng)之上的應(yīng)用程序都與硬件無關(guān)。應(yīng)用程序的開發(fā)者和最終用戶通常都不必關(guān)心底層的硬件如何工作。Windows CE之所以能夠支持各種各樣的硬件設(shè)備,也是因?yàn)榇嬖趯?yīng)的設(shè)備驅(qū)動(dòng)程序。這些設(shè)備驅(qū)動(dòng)程序提供了操作系統(tǒng)與硬件交互的方式,是連接硬件和操作系統(tǒng)之間的橋梁。

當(dāng)前Windows CE有四種設(shè)備模型,其中本機(jī)設(shè)備驅(qū)動(dòng)程序和流接口驅(qū)動(dòng)程序模型是專用于Windows CE驅(qū)動(dòng)程序的開發(fā)方法。另外,兩種外部模型也可應(yīng)用于其他操作系統(tǒng),它們分別是通用串行總線(USB)和網(wǎng)絡(luò)驅(qū)動(dòng)器接口標(biāo)準(zhǔn)(NDIS)的驅(qū)動(dòng)程序。

2.1 本機(jī)設(shè)備驅(qū)動(dòng)程序

在開始開發(fā)本機(jī)設(shè)備驅(qū)動(dòng)程序前,必須先了解哪些設(shè)備的驅(qū)動(dòng)程序是采用本機(jī)設(shè)備驅(qū)動(dòng)模型實(shí)現(xiàn)的。正如它的名字,本機(jī)設(shè)備驅(qū)動(dòng)程序適用于集成到基于Windows CE平臺的設(shè)備,如鍵盤、顯示器、PC卡插槽等設(shè)備。本機(jī)設(shè)備驅(qū)動(dòng)程序通常使用Windows CE提供的特定接口,而且都有明確和專一的目的。微軟本身提供了很多本機(jī)設(shè)備驅(qū)動(dòng)程序的樣本程序,這樣絕大多數(shù)的開發(fā)人員不需要編寫本機(jī)設(shè)備驅(qū)動(dòng)程序。除非是OEM開發(fā)商想為新平臺定制Windows CE,那么他們就需要編寫自己的本機(jī)設(shè)備驅(qū)動(dòng)程序,當(dāng)然可以將微軟的本機(jī)設(shè)備驅(qū)動(dòng)程序的例子直接移植到新平臺上。

本機(jī)設(shè)備驅(qū)動(dòng)程序分為兩種類型:單片驅(qū)動(dòng)程序和分層的驅(qū)動(dòng)程序[5]。單片驅(qū)動(dòng)程序的代碼直接與硬件交互,因此它包含與特定的某款硬件相關(guān)聯(lián)的代碼。通常,單片驅(qū)動(dòng)程序會暴露DDI接口給操作系統(tǒng),DDI函數(shù)是操作系統(tǒng)與驅(qū)動(dòng)程序交互的接口協(xié)議。而分層驅(qū)動(dòng)程序由兩個(gè)設(shè)置好的層組成:上層是模型設(shè)備驅(qū)動(dòng)程序(MDD),下層是依賴平臺的驅(qū)動(dòng)程序(PDD)。MDD層與硬件平臺無關(guān),它通過驅(qū)動(dòng)程序接口DDI與應(yīng)用程序通信。

開發(fā)驅(qū)動(dòng)程序時(shí),一般不必修改MDD層。只需關(guān)心與具體硬件平臺有關(guān)的下層,依賴平臺的驅(qū)動(dòng)程序?qū)覲DD。PDD層通過設(shè)備驅(qū)動(dòng)服務(wù)接口DDSI直接管理硬件。通常,MDD層的代碼與PDD層的代碼會被編譯成獨(dú)立的靜態(tài)LIB庫,然后進(jìn)行鏈接,形成可執(zhí)行的驅(qū)動(dòng)程序。因此,MDD和PDD的劃分只是在源代碼邏輯層面,在驅(qū)動(dòng)程序的二進(jìn)制可執(zhí)行代碼中不會存在MDD與PDD的分層。

2.2 流接口驅(qū)動(dòng)程序

流接口驅(qū)動(dòng)程序是為了連接到Windows CE平臺的外圍設(shè)備而設(shè)計(jì)的,如打印機(jī)、尋呼機(jī)、調(diào)制解調(diào)器等。它是動(dòng)態(tài)鏈接庫,由設(shè)備管理器動(dòng)態(tài)加載、管理和卸載[8]。與具有單獨(dú)目的接口的本機(jī)設(shè)備驅(qū)動(dòng)程序相比,流接口驅(qū)動(dòng)通過使用相同的接口,導(dǎo)出一組相同的函數(shù)即流接口函數(shù)。流接口函數(shù)也稱作流接口驅(qū)動(dòng)的入口點(diǎn),用來完成標(biāo)準(zhǔn)的文件I/O函數(shù)和電源管理函數(shù),這些函數(shù)是提供給Windows CE的操作系統(tǒng)內(nèi)核使用的。流接口驅(qū)動(dòng)的入口點(diǎn)主要包括 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ū)動(dòng)程序注冊表里定義的設(shè)備文件名的前綴。在Windows CE中設(shè)備文件名通常由3個(gè)大寫字母,1個(gè)數(shù)字和1個(gè)冒號組成。

流接口驅(qū)動(dòng)對硬件設(shè)備的訪問涉及五個(gè)部分[6]:應(yīng)用程序、FileSys.exe、設(shè)備管理器、流式接口驅(qū)動(dòng)程序本身以及硬件。其中,應(yīng)用程序和流式接口驅(qū)動(dòng)程序是由用戶編寫的;FileSys.exe與設(shè)備管理器是由Windows CE操作系統(tǒng)提供的組件,用戶無法修改。

在應(yīng)用程序使用文件API對設(shè)備進(jìn)行訪問時(shí),文件API被操作系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進(jìn)程中;然后FileSys.exe發(fā)現(xiàn)是對設(shè)備操作,就會把執(zhí)行交給設(shè)備管理器處理;接著設(shè)備管理器根據(jù)具體的請求,調(diào)用不同流式接口驅(qū)動(dòng)程序中提供的接口;最后驅(qū)動(dòng)程序負(fù)責(zé)與硬件交互。

3 Windows CE驅(qū)動(dòng)開發(fā)實(shí)例

這里以基于S3C2440A的I2C驅(qū)動(dòng)程序?yàn)槔?共同探討Windows CE下驅(qū)動(dòng)程序的開發(fā)。

I2C(Inter Integrated Circuit)總線是1980年P(guān)hi[CD*2]lips公司推出的。通過I2C兩根引線:一根串行地址線(SDA)和一根串行時(shí)鐘線(SCL),可使微控制器與外部設(shè)備之間進(jìn)行串行通信或使主設(shè)備和從設(shè)備之間實(shí)現(xiàn)雙向數(shù)據(jù)傳送。I2C總線遵從同步串行傳輸協(xié)議,即各位串行發(fā)送,由時(shí)鐘(clock)線指示讀數(shù)據(jù)(data)線的時(shí)刻。每個(gè)數(shù)據(jù)包前有一個(gè)地址,以指示由哪個(gè)器件來接收該數(shù)據(jù)。

S3C2440A是三星公司推出的16/32位精簡指令集微處理器,它是為應(yīng)用于小型掌上設(shè)備和高性價(jià)比、低功耗、高性能的嵌入式系統(tǒng)而提供的微控制解決方案。S3C2440使用了ARM920T內(nèi)核,芯片上提供的集成功能包括:分開的16 KB指令/數(shù)據(jù)緩存、SDRAM控制器、LCD控制器、4通道DMA、3通道UART、I2C總線、IIS總線、SD主機(jī)接口、PWM定時(shí)器、看門狗、片上PLL時(shí)鐘發(fā)生器、8通道10位A/D控制器和觸摸屏接口、攝像頭接口以及帶日歷函數(shù)的實(shí)時(shí)時(shí)鐘。S3C2440A最高頻率可達(dá)533 MHz,且功耗只有毫瓦級[9]。

在多主I2C總線模式下,S3C2440A微處理器從設(shè)備接收串行數(shù)據(jù)或發(fā)送串行數(shù)據(jù)到從設(shè)備。主S3C2440A可以初始化或終止I2C總線上的數(shù)據(jù)傳輸。在S3C2440A中,I2C總線使用標(biāo)準(zhǔn)的總線仲裁過程。S3C2440A的I2C總線接口有4種模式[9]:主接收模式、主發(fā)送模式、從接收模式和從發(fā)送模式。為了控制多主I2C總線,必須對下面這幾個(gè)寄存器進(jìn)行讀/寫:I2C控制寄存器I2CCON,I2C控制/狀態(tài)寄存器I2CSTATI2C、數(shù)據(jù)寄存器I2CDS,I2C地址寄存器I2CADD。

[BT3]3.1 編寫流驅(qū)動(dòng)程序

首先,需要在oalintr.h中添加I2C的中斷號;然后在cfw.c中初始化I2C中斷;接下來,編寫I2C的驅(qū)動(dòng)程序。這里采用Windows CE下的流接口驅(qū)動(dòng)模型。在I2C[CD#*2]Init中需要把IOPORT registers,I2C Bus registers,CLK/PWR registers等寄存器的物理地址和虛擬地址綁定起來。同時(shí)配置I2C 總線控制器,使能I2C的Clock/Power controller。其中一些語句為:

然后,可實(shí)現(xiàn)I2C[CD#*2]Open,I2C[CD#*2]Read,I2C[CD#*2]Write,I2C[CD#*2]Close函數(shù)等,通過對各個(gè)寄存器進(jìn)行操作,從而得到I2C總線讀取和發(fā)送的數(shù)據(jù)。

完成編譯之后,得到的DLL還不能作為流接口,還需要編寫一個(gè)def文件,將它的接口函數(shù)導(dǎo)出。

[BT3]3.2 編寫驅(qū)動(dòng)程序注冊表

一個(gè)具體的流接口驅(qū)動(dòng)程序與注冊表部分是不能分開的。在此,使用記事本編寫注冊表的內(nèi)容如下:

[BT3]3.3 編寫CEC文件

有了驅(qū)動(dòng)程序和注冊表文件,驅(qū)動(dòng)程序還不能正常運(yùn)行。因?yàn)樗€沒有被加入到CEC內(nèi)核中。將一個(gè)文件添加到定制內(nèi)核中的方法通常有兩種:一種是修改BIB文件;另一種是編寫一個(gè)CEC文件,并添加到PB中。將編寫好的CEC文件導(dǎo)入到PB中后,重新進(jìn)行Build,就可以生成包含該流接口的驅(qū)動(dòng)程序。

4 結(jié) 語

在嵌入式技術(shù)飛速發(fā)展的今天,Windows CE必將有廣泛的應(yīng)用前景,這里編寫高效的設(shè)備驅(qū)動(dòng)程序也將帶動(dòng)外圍設(shè)備的開發(fā)。