第11章Windows CE嵌入式操作系統(tǒng)_第1頁
第11章Windows CE嵌入式操作系統(tǒng)_第2頁
第11章Windows CE嵌入式操作系統(tǒng)_第3頁
第11章Windows CE嵌入式操作系統(tǒng)_第4頁
第11章Windows CE嵌入式操作系統(tǒng)_第5頁
已閱讀5頁,還剩200頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第6章WindowsCE嵌入式操作系統(tǒng)6.1操作系統(tǒng)概述6.2WindowsCE嵌入式操作系統(tǒng)概述6.3WindowsCE的管理6.4WindowsCE操作系統(tǒng)設(shè)計(jì)6.5WindowsCEBSP開發(fā)6.6應(yīng)用實(shí)例6.7本章小結(jié)

操作系統(tǒng)(OS,OperationSystem)是計(jì)算機(jī)系統(tǒng)中重要的環(huán)節(jié),無論在桌面計(jì)算機(jī)系統(tǒng)、網(wǎng)絡(luò)環(huán)境還是在嵌入式系統(tǒng)中,操作系統(tǒng)都充當(dāng)著重要的角色。本節(jié)將介紹操作系統(tǒng)的發(fā)展和特點(diǎn),以及嵌入式操作系統(tǒng)的功能和特點(diǎn)。6.1操作系統(tǒng)概述6.1.1操作系統(tǒng)的發(fā)展

操作系統(tǒng)是一組程序的集合,它控制和管理計(jì)算機(jī)的硬件和軟件資源,合理地調(diào)度各類作業(yè),以方便用戶的使用。像其他軟件一樣,操作系統(tǒng)有著自己的發(fā)展歷史和特點(diǎn)。

操作系統(tǒng)的形成到現(xiàn)在已經(jīng)有50多年的歷史,它的發(fā)展和計(jì)算機(jī)硬件的發(fā)展密切相關(guān)。在20世紀(jì)50年代中期出現(xiàn)了第一個(gè)簡單的批處理操作系統(tǒng),到20世紀(jì)60年代中期產(chǎn)生了多道程序批處理系統(tǒng),不久又出現(xiàn)了基于多道程序的分時(shí)系統(tǒng)。20世紀(jì)70年代出現(xiàn)了微機(jī)和局域網(wǎng),同時(shí)也產(chǎn)生了微機(jī)操作系統(tǒng)和網(wǎng)絡(luò)操作系統(tǒng),之后又出現(xiàn)了分布式操作系統(tǒng)。隨著嵌入式技術(shù)的發(fā)展,出現(xiàn)了越來越多的具有精簡內(nèi)核的嵌入式操作系統(tǒng)。6.1.2操作系統(tǒng)的分類和結(jié)構(gòu)

操作系統(tǒng)經(jīng)過不斷的發(fā)展和更新,大致可以分為如下三種。

1.單節(jié)點(diǎn)系統(tǒng)

目前一般的操作系統(tǒng)都屬于單節(jié)點(diǎn)系統(tǒng),也就是說系統(tǒng)是由一套計(jì)算機(jī)形成的。例如在大型計(jì)算機(jī)中有“批處理系統(tǒng)”、“多道程序系統(tǒng)”和“分時(shí)系統(tǒng)”,在個(gè)人計(jì)算機(jī)系統(tǒng)中有多處理器計(jì)算機(jī)系統(tǒng)。

2.多節(jié)點(diǎn)系統(tǒng)

與單節(jié)點(diǎn)系統(tǒng)不同,多節(jié)點(diǎn)可以將許多計(jì)算機(jī)集合在一起而提高系統(tǒng)的計(jì)算能力,或是共享系統(tǒng)中的資源。多節(jié)點(diǎn)系統(tǒng)主要指分布式系統(tǒng)。分布式系統(tǒng)可以分為“客戶/服務(wù)器系統(tǒng)”、“對等系統(tǒng)”以及“集群式系統(tǒng)”。3.特殊目的系統(tǒng)

特殊目的系統(tǒng)專門負(fù)責(zé)處理特定的工作,如實(shí)時(shí)系統(tǒng)有時(shí)間的限制,掌上型系統(tǒng)體積小卻功能強(qiáng)大等。特殊目的系統(tǒng)主要包括:實(shí)時(shí)系統(tǒng)、掌上型系統(tǒng)、嵌入型系統(tǒng)。6.1.3嵌入式操作系統(tǒng)

由于運(yùn)行環(huán)境的限制,嵌入式系統(tǒng)中的操作系統(tǒng)一般與其他的操作系統(tǒng)不太相同,我們通常把它看成是精簡的操作系統(tǒng),即能夠最大限度節(jié)省資源的操作系統(tǒng)。

從應(yīng)用的范圍來說,嵌入式操作系統(tǒng)可以劃分為通用型和專用型,比較通用的嵌入式操作系統(tǒng)有WindowsEmbeddedCE、EmbeddedLinux、VxWorks等;而專用的嵌入式操作系統(tǒng)主要包括用于智能型掌上計(jì)算機(jī)設(shè)備的PalmOS,以及用于移動電話的Symbian、WindowsMobile、Android系統(tǒng)等。嵌入式操作系統(tǒng)是對傳統(tǒng)操作系統(tǒng)的繼承和發(fā)展,具有操作系統(tǒng)的功能,包括指令執(zhí)行、任務(wù)調(diào)度、存儲器管理、設(shè)備管理和中斷管理等。但是,由于嵌入式系統(tǒng)中的硬件資源有限,以及程序運(yùn)行的限制,使得嵌入式操作系統(tǒng)不能像傳統(tǒng)的操作系統(tǒng)一樣具有很強(qiáng)的功能性。一般來說,嵌入式操作系統(tǒng)有如下的特點(diǎn):

(1)安全性限制。傳統(tǒng)的操作系統(tǒng)有很多不可避免的問題,如死機(jī)、藍(lán)屏等現(xiàn)象。在嵌入式領(lǐng)域中,這種情況是不允許發(fā)生的,因?yàn)樵O(shè)備比較小,功能比較單一,如果出現(xiàn)諸如死機(jī)、藍(lán)屏的情況,將會產(chǎn)生致命性的后果。因此,在設(shè)計(jì)嵌入式操作系統(tǒng)時(shí),應(yīng)避免這種情況的發(fā)生。WindowsEmbeddedCE采用的驅(qū)動模式是應(yīng)用程序加載模式,很大程度上提高了安全性,同時(shí)還具有一定的檢錯(cuò)機(jī)制。(2)資源限制。在嵌入式系統(tǒng)中,資源有限是一個(gè)現(xiàn)實(shí)的問題。嵌入式處理器的處理水平都在幾百兆左右,而加載的內(nèi)存一般也只有256MB或者更小。對于存儲單元來說,都采用了非易失性Flash芯片,存儲空間相對比較小,因此內(nèi)核的大小也受到了很大的限制。WindowsEmbeddedCE的內(nèi)核一般可以達(dá)到32MB,在諸多嵌入式操作系統(tǒng)中是比較大的。(3)可移植性。在嵌入式系統(tǒng)中,硬件平臺種類繁多,不像在普通PC中一樣,只有AMD和Intel兩種處理器平臺,因此嵌入式操作系統(tǒng)對應(yīng)的移植性能要求很高,這就導(dǎo)致了在嵌入式系統(tǒng)開發(fā)中把HAL(硬件抽象層)、BSP(板級支持包)和內(nèi)核分開進(jìn)行開發(fā),縮短了開發(fā)周期。6.1.4嵌入式實(shí)時(shí)操作系統(tǒng)

表6.1實(shí)時(shí)操作系統(tǒng)的結(jié)構(gòu)單元在嵌入式操作系統(tǒng)中,根據(jù)實(shí)時(shí)性可以分為實(shí)時(shí)操作系統(tǒng)和一般嵌入式操作系統(tǒng)。在各類嵌入式操作系統(tǒng)中,VxWorks被認(rèn)為是實(shí)時(shí)性最好的操作系統(tǒng),它一般用于軍工產(chǎn)品。從2000年發(fā)布的WindowsEmbeddedCE3.0開始,WindowsEmbeddedCE就是一個(gè)實(shí)時(shí)操作系統(tǒng)。隨著新版本的不斷推出,WindowsEmbeddedCE的實(shí)時(shí)性也不斷提高。毋庸置疑,WindowsEmbeddedCE6.0也是一個(gè)實(shí)時(shí)操作系統(tǒng)。6.1.5典型的嵌入式操作系統(tǒng)

從20世紀(jì)80年代起,國際上就有一些IT組織、公司開始進(jìn)行商用嵌入式操作系統(tǒng)和專用操作系統(tǒng)的研發(fā)。發(fā)展到今天,世界上已經(jīng)有大量成熟的嵌入式操作系統(tǒng)。具有代表性的產(chǎn)品主要有VxWorks、QNX、PalmOS、WindowsCE等,占據(jù)了機(jī)頂盒、PDA等絕大部分市場。

1.?Linux

隨著Linux在服務(wù)器領(lǐng)域和桌面系統(tǒng)獲得的成功,Linux也以其開源性、穩(wěn)定性和免費(fèi)的特點(diǎn)在嵌入式系統(tǒng)中獲得了越來越廣泛的應(yīng)用。為了加速Linux操作系統(tǒng)在產(chǎn)業(yè)界的應(yīng)用,許多國際知名的大公司聯(lián)合成立了開放源碼開發(fā)實(shí)驗(yàn)室OSDL(OpenSourceDevelopmentLab)來專門支持相關(guān)的項(xiàng)目。這主要包括了來自PC業(yè)界的硬件、軟件提供商,還有來自通信產(chǎn)業(yè)的電信設(shè)備制作商。

隨著Linux的迅速發(fā)展,嵌入式Linux現(xiàn)在已經(jīng)有很多版本,其中主要包括RT-Linux和μClinux兩種。

RT-Linux系統(tǒng)的關(guān)鍵技術(shù)是通過軟件來模擬硬件的中斷控制器。當(dāng)Linux系統(tǒng)要封鎖CPU的中斷時(shí),RT-Linux系統(tǒng)中的實(shí)時(shí)子系統(tǒng)會截取到這個(gè)請求,將它記錄下來,但實(shí)際上并不真正地封鎖硬件中斷,這樣就避免了由于封鎖中斷所造成的系統(tǒng)在一段時(shí)間沒有響應(yīng)的情況,從而提高了系統(tǒng)的實(shí)時(shí)性。當(dāng)有硬件中斷到來時(shí),RT-Linux系統(tǒng)截取該中斷,并判斷是否有實(shí)時(shí)子系統(tǒng)的中斷例程來處理,還是傳遞給普通的Linux內(nèi)核進(jìn)行處理。另外,普通Linux系統(tǒng)的最小定時(shí)精度由系統(tǒng)中的實(shí)時(shí)時(shí)鐘頻率決定,一般Linux系統(tǒng)將該時(shí)鐘設(shè)置為每秒100個(gè)時(shí)鐘中斷,所以Linux系統(tǒng)中的定時(shí)精度一般為10ms,即時(shí)鐘周期為10ms。而RT-Linux系統(tǒng)通過將系統(tǒng)的實(shí)時(shí)時(shí)鐘設(shè)置為單次除法狀態(tài),可以提供十幾個(gè)μs級的調(diào)度粒度。RT-Linux系統(tǒng)對于那些在重負(fù)荷下工作的專有系統(tǒng)來說是個(gè)不錯(cuò)的選擇,但它僅僅提供對于CPU資源的調(diào)度,并且實(shí)時(shí)系統(tǒng)和普通Linux系統(tǒng)的關(guān)系并不是十分密切,這樣的話,開發(fā)人員就不能充分利用Linux系統(tǒng)中已經(jīng)實(shí)現(xiàn)的功能,如協(xié)議棧等。所以,RT-Linux系統(tǒng)適合于工業(yè)控制等實(shí)時(shí)任務(wù)功能簡單,并且硬實(shí)時(shí)要求的環(huán)境中,但如果要應(yīng)用于多媒體處理任務(wù)環(huán)境中還需要做大量的工作。另一種常用的嵌入式Linux是μCLinux,它是針對沒有MMU的處理器而設(shè)計(jì)的,它不是使用處理器的虛擬內(nèi)存管理技術(shù),對內(nèi)存的訪問是直接的,所以程序中訪問的地址都是實(shí)際的物理地址。它專為嵌入式系統(tǒng)做了許多小型化的工作。

2.?VxWorks

VxWorks操作系統(tǒng)是美國WindRiver公司于1983年設(shè)計(jì)開發(fā)的一種實(shí)時(shí)操作系統(tǒng)。VxWorks擁有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求高的領(lǐng)域中,如衛(wèi)星通信、軍事演習(xí)、導(dǎo)彈制導(dǎo)、飛機(jī)導(dǎo)航等。在美國的F-16戰(zhàn)斗機(jī)、FA-18戰(zhàn)斗機(jī)、B-2隱形轟炸機(jī)和愛國者導(dǎo)彈上,甚至連1997年4月在火星表面登陸的火星探測儀上也使用了VxWorks。它是目前嵌入式系統(tǒng)領(lǐng)域中使用最廣泛、市場占有率最高的系統(tǒng)。它支持多種處理器,如ARM、x86、i960、SunSparc、MotorolaMC6800、MIPSRX000、PowerPC、StrongARM等。大多數(shù)的VxWorksAPI是專有的。

多家著名公司(如CISCO、Systems、3Com、HP、Lucent等)都是VxWorks的主要商業(yè)客戶,由此可見VxWorks的使用范圍之廣和影響之大。在交互式應(yīng)用程序領(lǐng)域,UNIX和Windows無疑是兩種非常成功的操作系統(tǒng),但是,它們并不適合實(shí)時(shí)應(yīng)用。一般的實(shí)時(shí)操作系統(tǒng)比較專業(yè)化,缺乏良好的應(yīng)用開發(fā)界面,尤其是圖形用戶界面。綜合這兩類操作系統(tǒng)的優(yōu)點(diǎn)并且發(fā)揮自己的最大優(yōu)勢的實(shí)時(shí)操作系統(tǒng)就是VxWorks。WindRiver公司的理念不是要?jiǎng)?chuàng)建一個(gè)能完成一切的操作系統(tǒng),而是利用這兩種操作系統(tǒng)的優(yōu)點(diǎn),使宿主機(jī)方面的操作和應(yīng)用變得更方便,使VxWorks的實(shí)時(shí)和嵌入式性能變得更好。

另外,VxWorks允許按照不同的應(yīng)用需求進(jìn)行定制。在開發(fā)過程中,可以利用一些特性加快開發(fā)進(jìn)度,在開發(fā)結(jié)束后,可以將這些特性刪除,以得到緊湊、高效的操作系統(tǒng)。

VxWorks的特點(diǎn)如下:

(1)高性能實(shí)時(shí)微內(nèi)核。VxWorks的微內(nèi)核Wind是一個(gè)具有較高性能且標(biāo)準(zhǔn)的嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核。它支持搶占式、基于優(yōu)先級的任務(wù)調(diào)度,支持任務(wù)間的同步和通信,還支持中斷處理、看門狗定時(shí)器和內(nèi)存管理。其任務(wù)切換時(shí)間短、中斷延時(shí)小、網(wǎng)絡(luò)流量大等特點(diǎn)使VxWorks的性能得到很大的提高。與其他嵌入式操作系統(tǒng)相比,VxWorks系統(tǒng)具有很大優(yōu)勢。(2)與POSIX兼容。POSIX(PortableOperatingSystemInterface)是工作在ISO/IEEE標(biāo)準(zhǔn)下的一系列有關(guān)操作系統(tǒng)的軟件標(biāo)準(zhǔn)。制定這個(gè)標(biāo)準(zhǔn)的目的是為了在源代碼層次上支持應(yīng)用程序的可移植性。這個(gè)標(biāo)準(zhǔn)產(chǎn)生了一系列適用于應(yīng)用系統(tǒng)服務(wù)的標(biāo)準(zhǔn)集合1003.1b。VxWorks與UNIX有很深的淵源,它的很多代碼實(shí)際上是從BSD演變過來的,可以說VxWorks是UNIX的一個(gè)變種,甚至可以說它是“類UNIX”的操作系統(tǒng)。VxWorks與POSIX標(biāo)準(zhǔn)完全兼容,凡是在POSIX基礎(chǔ)上做出了擴(kuò)充或改進(jìn)的,就向用戶分別提供兩套函數(shù),使用戶在其他符合POSIX標(biāo)準(zhǔn)的系統(tǒng)上運(yùn)行的軟件移植到VxWorks上,基本上只需重新編譯即可運(yùn)行。(3)具有自由配置能力。VxWorks提供良好的可配置能力,可配置的組件超過80個(gè)。用戶可以根據(jù)系統(tǒng)的功能需求通過交叉開發(fā)環(huán)境方便地進(jìn)行配置。

(4)友好的開發(fā)調(diào)試環(huán)境。VxWorks提供的開發(fā)調(diào)試環(huán)境便于進(jìn)行操作和配置,開發(fā)系統(tǒng)Tornado更是得到廣大嵌入式系統(tǒng)開發(fā)人員的支持。

3.?μC/OS和μC/OS-Ⅱ

μC/OS-Ⅱ(MicroControllerOperatingSystem)是由美國人JeanJ.Labrose開發(fā)的實(shí)時(shí)操作系統(tǒng)內(nèi)核。這個(gè)內(nèi)核的產(chǎn)生與Linux有點(diǎn)相似,由于從事相關(guān)嵌入式產(chǎn)品開發(fā)及Labrose興趣使然,他花了一年時(shí)間開發(fā)了這個(gè)最初名為μC/OS的實(shí)時(shí)操作系統(tǒng),并且將介紹文章在1992年的《EmbeddedSystemProgramming》雜志上發(fā)表,源代碼也公布在該雜志上。該雜志的熱銷以及源代碼的公開推動了μC/OS-Ⅱ本身的發(fā)展。μC/OS-Ⅱ目前已經(jīng)被移植到Intel、ARM、Motorola等公司的81種不同的處理器上。μC/OS-Ⅱ其實(shí)只是一個(gè)實(shí)時(shí)操作系統(tǒng)的內(nèi)核,全部核心代碼只有8.3KB。它只包含了進(jìn)度調(diào)度、時(shí)鐘管理、內(nèi)存管理和進(jìn)程間的通信與同步等基本功能,而沒有包括I/O管理、文件系統(tǒng)、網(wǎng)絡(luò)等額外模塊。

作為一個(gè)實(shí)時(shí)操作系統(tǒng),μC/OS-Ⅱ的進(jìn)程調(diào)度是搶占式、多任務(wù)系統(tǒng)設(shè)計(jì)的,即它總是執(zhí)行處于就緒序列中優(yōu)先級最高的任務(wù)。μC/OS-Ⅱ?qū)⑦M(jìn)程的狀態(tài)分為5個(gè):就緒、運(yùn)行、等待、休眠和ISR。每個(gè)進(jìn)程由OSTaskCreatee()或OSTaskExit()創(chuàng)建好后,進(jìn)入就緒狀態(tài)。當(dāng)多個(gè)狀態(tài)處于就緒狀態(tài)時(shí),由OSStart()函數(shù)選擇優(yōu)先級最高的進(jìn)程來運(yùn)行。這樣,這個(gè)進(jìn)程就處于運(yùn)行狀態(tài)。μC/OS-Ⅱ最多可運(yùn)行64個(gè)進(jìn)程,并且規(guī)定所有進(jìn)程的優(yōu)先級必須不同。進(jìn)程的優(yōu)先級同時(shí)也唯一地標(biāo)識了該進(jìn)程。即使兩個(gè)任務(wù)的重要性是相同的,它們也必須有優(yōu)先級上的差異。4.?WindowsCE

Microsoft公司的WindowsCE是為各種嵌入式系統(tǒng)和產(chǎn)品設(shè)計(jì)的一種壓縮的、高效的、可升級的操作系統(tǒng)。其多線性、多任務(wù)、全優(yōu)先的操作系統(tǒng)環(huán)境是專門針對資源有限的應(yīng)用而設(shè)計(jì)的。這種模塊化設(shè)計(jì)使嵌入式系統(tǒng)開發(fā)者和應(yīng)用開發(fā)者能夠定做各種產(chǎn)品,例如家用電器、專門的工業(yè)控制器和嵌入式通信設(shè)備。WindowsCE支持各種硬件外圍設(shè)備及網(wǎng)絡(luò)系統(tǒng),包括鍵盤、鼠標(biāo)、觸摸板、串行端口、以太網(wǎng)連接器、調(diào)制解調(diào)器、通用串行總線(USB)設(shè)備、音頻設(shè)備、并行端口、打印設(shè)備及存儲設(shè)備等。Microsoft提供了完整的基于WindowsCE的產(chǎn)品系列,范圍從用來開發(fā)基于WindowsCE的應(yīng)用程序和設(shè)備驅(qū)動程序的工具,到用來創(chuàng)建操作系統(tǒng)各種自定義版本的工具。此外,Microsoft還與幾家第三方供應(yīng)商合作,

創(chuàng)建由WindowsCE驅(qū)動的設(shè)備。

這些設(shè)備(手提PC、PDA和AutoPC)可與臺式計(jì)算機(jī)、網(wǎng)絡(luò)等相互通信。5.?PalmOS

3Com公司的PalmOS在掌上電腦和PDA市場上占有很大的市場份額。它有開放的操作系統(tǒng)應(yīng)用程序接口,開發(fā)商可以根據(jù)需要自行開發(fā)所需要的應(yīng)用程序。目前共有3500多個(gè)應(yīng)用程序可以運(yùn)行在PalmPilot上。其中大部分應(yīng)用程序?yàn)槠渌麖S商和個(gè)人所開發(fā),使PalmPilot的功能不斷增多。這些軟件包括各種游戲、電子寵物、地理信息系統(tǒng)等。

6.?Symbian

Symbian是一個(gè)實(shí)時(shí)性、多任務(wù)的純32位操作系統(tǒng),具有功耗低、內(nèi)存占用少等特點(diǎn),非常適合手機(jī)等移動設(shè)備使用。經(jīng)過不斷完善,Symbian可以支持GPRS、藍(lán)牙、SyncML以及3G技術(shù)。最重要的是它是一個(gè)標(biāo)準(zhǔn)化的開放式平臺,任何人都可以為支持Symbian的設(shè)備開發(fā)軟件。與微軟產(chǎn)品不同的是,Symbian將移動設(shè)備的通用技術(shù),也就是操作系統(tǒng)的內(nèi)核,與圖形用戶界面技術(shù)分開,從而更好地適應(yīng)不同方式輸入的平臺,也可以使廠商為自己的產(chǎn)品制作更加友好的操作界面,符合個(gè)性化的潮流,這也是用戶能見到不同樣子的Symbian系統(tǒng)的主要原因?,F(xiàn)在為這個(gè)平臺開發(fā)的Java程序已經(jīng)開始在互聯(lián)網(wǎng)上盛行。用戶可以通過安裝這些軟件,擴(kuò)展手機(jī)功能。7.?Android

Android一詞的本義指“機(jī)器人”,Android是Google于2007年11月5日宣布的基于Linux平臺的開源手機(jī)操作系統(tǒng)的名稱。該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,Android號稱是首個(gè)為移動終端打造的真正開放和完整的移動軟件。2008年9月22日,美國運(yùn)營商T-MobileUSA在紐約正式發(fā)布第一款Google手機(jī)——T-MobileG1。該款手機(jī)為臺灣宏達(dá)電代工制造,是世界上第一部使用Android操作系統(tǒng)的手機(jī),它支持WCDMA/HSPA網(wǎng)絡(luò),理論下載速率可達(dá)7.2Mb/s并支持WiFi。Android系統(tǒng)是基于Linux核心的軟體平臺和作業(yè)系統(tǒng),其架構(gòu)早期由Google規(guī)劃,之后再由各大手機(jī)制造商組成的開放手機(jī)聯(lián)盟(OpenHandsetAlliance)開發(fā)(最知名的如我國臺灣地區(qū)的HTC)。這個(gè)目前正熱門的手機(jī)系統(tǒng)跟以往各大手機(jī)廠閉門自修所開發(fā)出的Linux系統(tǒng)(如Motorola的E系列)最大的不同在于它開放源代碼,讓一般人也可以輕易地利用SDK(SoftwareDevelopmentKit)開發(fā)各式各樣的軟件,另外還結(jié)合了Google所提供的各項(xiàng)服務(wù)功能,使得Android手機(jī)操作系統(tǒng)在短短的兩年內(nèi)迅速竄紅,成為當(dāng)前智能手機(jī)市場的主流操作系統(tǒng)。從目前市場占有率來看,國內(nèi)在嵌入式領(lǐng)域主要使用的操作系統(tǒng)有WindowsCE、VxWorks、

Linux及PalmOS。

由于本書主要介紹WindowsCE,因此,下面列出了WindowsCE和其他嵌入式操作系統(tǒng)的一些主要區(qū)別,如表6.2所示。

表6.2WindowsCE和其他嵌入式操作系統(tǒng)的主要區(qū)別

在嵌入式操作系統(tǒng)中,WindowsCE是一個(gè)應(yīng)用性很廣、普及性很強(qiáng)的操作系統(tǒng)。自WindowsCE誕生到如今的WindowsCE6.0,無論是在技術(shù)上還是在性能上,微軟的嵌入式操作系統(tǒng)開發(fā)人員下足了功夫,本節(jié)將針對WindowsCE操作系統(tǒng)的基本特點(diǎn)及體系結(jié)構(gòu)做概括介紹。6.2WindowsCE嵌入式操作系統(tǒng)概述6.2.1WindowsCE的特點(diǎn)

WindowsCE是軟件巨人微軟公司在嵌入式操作系統(tǒng)市場上的一個(gè)重要產(chǎn)品,它的第一版于1996年發(fā)布,但是,最初它并不是很成功,直到WindowsCE3.0,它才真正被人們接受,并逐步取得了成功。2002年微軟發(fā)布了WindowsCE4.1版,這是一個(gè)非常成功的版本。迄今為止,WindowsCE的版本先后經(jīng)過了WindowsCE3.0/4.1/4.2/5.0/6.0。

WindowsCE是一個(gè)32位、多線程、多任務(wù)的操作系統(tǒng),這是它的主要特色。與桌面Windows相比,WindowsCE有自己的特點(diǎn)。以WindowsCE6.0為例,二者的不同可以參考表6.3。

表6.3WindowsCE6.0和桌面Windows的主要區(qū)別WindowsCE的體系結(jié)構(gòu)采用獨(dú)立于通常的程序設(shè)計(jì)語言并且和Windows兼容的API的方式,這樣就可以保障WindowsCE的組件化和ROM化。WindowsCE是模塊型的操作系統(tǒng),這就意味著可選擇、組合和配置WindowsCE的模塊和組件來創(chuàng)建用戶的操作系統(tǒng)。

與Windows95/NT/2000的API相比,WindowsCE中的API是一個(gè)縮減的Win32API,是桌面Windows系統(tǒng)API的一個(gè)子集,這使得許多基于微軟桌面Windows開發(fā)的應(yīng)用程序可以經(jīng)少許改動就用于WindowsCE中。但是在某些情況下,由于WindowsCE的應(yīng)用程序接口(API)與標(biāo)準(zhǔn)的WindowsAPI之間存在差異,原來在桌面Windows中包含的API函數(shù)在WindowsCE中是不支持的,因此開發(fā)者需要自己利用其他辦法去實(shí)現(xiàn)這些功能。此外,WindowsCE支持的內(nèi)存容量和顯示屏的面積也很有限,這使得開發(fā)人員不得不考慮與硬件相關(guān)的因素。

WindowsCE是從整體上為有限資源的平臺設(shè)計(jì)的多線程、完整優(yōu)先權(quán)、多任務(wù)的操作系統(tǒng)。它的模塊化設(shè)計(jì)允許它對于從掌上電腦到專用的工業(yè)控制器的各種設(shè)備進(jìn)行定制。操作系統(tǒng)的最小基本內(nèi)核可以小到200K的ROM。在WindowsCE產(chǎn)品的開發(fā)中,有兩個(gè)重要的方面,一個(gè)是操作系統(tǒng)的內(nèi)核定制,一個(gè)是WindowsCE的應(yīng)用程序開發(fā)。微軟在這兩個(gè)方面都提供了非常友好的開發(fā)工具,這就是內(nèi)核定制工具PlatformBuilder。以WindowsCE6.0為例,微軟將PlatformBuilderforWindowsCE6.0的集成開發(fā)環(huán)境整合到VisualStudio2005中,一方面可以利用它剪裁和定制出一個(gè)符合用戶需要的WindowsCE6.0的操作系統(tǒng),另一方面它提供了所有進(jìn)行設(shè)計(jì)、創(chuàng)建、編譯、測試和調(diào)試的工具。它運(yùn)行于桌面Windows下,開發(fā)人員可以通過交互式的環(huán)境來設(shè)計(jì)、定制內(nèi)核,選擇系統(tǒng)特性,然后進(jìn)行編譯和調(diào)試,開發(fā)人員還可以利用PB來進(jìn)行驅(qū)動程序開發(fā)和應(yīng)用程序開發(fā)等。此外,利用VisualStudio2005中的VisualC++和VisualC#開發(fā)工具,可以對嵌入式系統(tǒng)進(jìn)行應(yīng)用程序設(shè)計(jì)。6.2.2WindowsCE的應(yīng)用

WindowsCE在嵌入式領(lǐng)域的應(yīng)用相當(dāng)廣泛,大概可以分為如下的幾個(gè)方面。

1.?PDA領(lǐng)域

當(dāng)初微軟提出了WindowsCE第一版就是要與PalmOS去爭奪PDA市場,于是在WindowsCE的基礎(chǔ)上推出了PocketPC系列。如今隨著PocketPC版本的不斷延伸,同時(shí)集成了很多接口,使得WindowsCE的市場份額逐年加大。2.移動通信領(lǐng)域

另外一個(gè)WindowsEmbeddedCE的延伸產(chǎn)品命名為WindowsMobile,這是針對移動通信終端推出的版本。隨著智能型手機(jī)的不斷發(fā)展,很多廠商已經(jīng)開始使用WindowsMobile系列操作系統(tǒng),它的易操作性和大眾性是一個(gè)很強(qiáng)的優(yōu)勢。

3.工業(yè)控制領(lǐng)域

在工業(yè)控制領(lǐng)域,越來越多的智能型檢測設(shè)備、終端設(shè)備以及汽車工業(yè)控制等都需要嵌入式操作系統(tǒng)的應(yīng)用,像觸摸屏、CAN總線以及完善的外部接口支持等,這也使得WindowsCE在工業(yè)控制領(lǐng)域擁有很大的市場份額。6.2.3WindowsCE的體系結(jié)構(gòu)和功能

WindowsCE操作系統(tǒng)的設(shè)計(jì)借鑒了Windows2000/XP操作系統(tǒng)的設(shè)計(jì),從體系結(jié)構(gòu)上,它既有分層結(jié)構(gòu)的特點(diǎn),又具有微內(nèi)核結(jié)構(gòu)的特點(diǎn)。下面分別討論WindowsCE的分層模型和體系結(jié)構(gòu)組件模型。

操作系統(tǒng)分層模型的主要特點(diǎn)是將操作系統(tǒng)的功能模塊按功能的調(diào)用次序分成若干層,各層之間只能單向依賴或者單向調(diào)用,這樣使得功能模塊之間的調(diào)用關(guān)系更加清晰。

WindowsCE操作系統(tǒng)的分層模型如圖6.1所示。

圖6.1WindowsCE分層模型具體講,操作系統(tǒng)的功能在中間兩層,即在操作系統(tǒng)層和應(yīng)用支持庫實(shí)現(xiàn)。應(yīng)用支持庫的上部和操作系統(tǒng)層的上部以及下部,都具有接口性質(zhì),它們構(gòu)成了WindowsEmbeddedCE的應(yīng)用界面和系統(tǒng)界面。在OAL(OEM適配層)層中實(shí)現(xiàn)的是系統(tǒng)界面,同時(shí)它也集中了所有的硬件特性,使系統(tǒng)便于遷移。最底層是具體的硬件,最頂層是應(yīng)用集成層。

從各層提供者的角度來講,硬件層和OEM適配層由硬件廠商提供;操作系統(tǒng)層、應(yīng)用支持庫、應(yīng)用開發(fā)層由微軟提供;應(yīng)用集成層由軟件開發(fā)商提供。WindowsCE操作系統(tǒng)的組件模型如圖6.2所示,圖中的三條黑線將系統(tǒng)分為硬件層、OEM層、操作系統(tǒng)層和應(yīng)用層。

圖6.2WindowsCE體系結(jié)構(gòu)圖組件模型分為4層,最底層是硬件層,指CPU、板卡等硬件設(shè)備組成的硬件系統(tǒng);最頂層是應(yīng)用層,包括Internet瀏覽器等;中間兩層是操作系統(tǒng)和OEM層,這兩層構(gòu)成了實(shí)際的操作系統(tǒng),下面分別討論。

1.?OEM層

OEM層包含以下模塊:

(1)

OAL模塊。這個(gè)模塊主要包括和硬件相關(guān)的功能,例如處理器的專用支持代碼、總線控制器的驅(qū)動等。

(2)引導(dǎo)程序。引導(dǎo)程序是嵌入式系統(tǒng)中將操作系統(tǒng)核心調(diào)入內(nèi)存的引導(dǎo)程序。

(3)配置文件。根據(jù)不同硬件系統(tǒng)的特點(diǎn),進(jìn)行相關(guān)文件的配置。

(4)驅(qū)動。驅(qū)動程序是嵌入式操作系統(tǒng)中至關(guān)重要的部分,它使操作系統(tǒng)能驅(qū)動不同的硬件,從而實(shí)現(xiàn)了操作系統(tǒng)與具體硬件的分離。

而在實(shí)際的系統(tǒng)中,OEM層實(shí)際上包括CSP、BSP和驅(qū)動程序。2.操作系統(tǒng)層

操作系統(tǒng)層包含以下模塊:

(1)

CoreDLL。CoreDLL是WindowsCE操作系統(tǒng)最為重要的組成部分之一。它處在操作系統(tǒng)和應(yīng)用層之間,隔離了操作系統(tǒng)與應(yīng)用層。在系統(tǒng)中,CoreDLL層主要擔(dān)任對外部調(diào)用的系統(tǒng)功能進(jìn)行代理的任務(wù),它實(shí)現(xiàn)了系統(tǒng)API管理和按名調(diào)用。

(2)核心。WindowsCE操作系統(tǒng)的核心在系統(tǒng)運(yùn)行時(shí)體現(xiàn)為NK.exe,一個(gè)占用空間很小的核心文件。核心主要完成操作系統(tǒng)的主要功能,如處理器調(diào)度、內(nèi)存管理、異常處理、系統(tǒng)內(nèi)的通信機(jī)制,以及為其他部分提供的核心調(diào)用例程。

(3)設(shè)備管理模塊。設(shè)備管理模塊是WindowsCE操作系統(tǒng)對設(shè)備進(jìn)行管理的核心模塊。

(4)圖形窗口和事件系統(tǒng)模塊。WindowsCE將桌面操作系統(tǒng)的Win32API的用戶界面(USER32)和圖形設(shè)備接口(GDI32)合并成了一個(gè)模塊,即圖形窗口和事件系統(tǒng)模塊,又稱為GWE子系統(tǒng)。(5)通信和網(wǎng)絡(luò)服務(wù)模塊。該模塊的主要功能是完成WindowsCE操作系統(tǒng)與外界網(wǎng)絡(luò)的通信功能,并為操作系統(tǒng)上層提供網(wǎng)絡(luò)服務(wù)。

(6)對象存儲模塊。對象存儲是指WindowsCE的存儲內(nèi)存空間,它包括三種類型的數(shù)據(jù):WindowsCE文件系統(tǒng)(數(shù)據(jù)文件和程序)、系統(tǒng)注冊表和WindowsCE數(shù)據(jù)庫。

(7)應(yīng)用和服務(wù)開發(fā)模塊。該模塊包括一般所說的Win32系統(tǒng)服務(wù)模塊,相當(dāng)?shù)囊徊糠謨?nèi)容被包含在了NK.exe中,在應(yīng)用和服務(wù)開發(fā)時(shí),系統(tǒng)利用這一模塊完成開發(fā)者的系統(tǒng)調(diào)用。

WindowsCE的設(shè)計(jì)目標(biāo)是:模塊化及可延展性、實(shí)時(shí)性能好,通信能力強(qiáng)大并支持多種CPU。從系統(tǒng)內(nèi)核來看,它的管理功能很強(qiáng)大。本節(jié)將從進(jìn)程、線程以及內(nèi)存管理、文件管理、電源管理等方面來敘述WindowsCE的工作原理。6.3WindowsCE的管理6.3.1進(jìn)程、線程

一個(gè)進(jìn)程是一個(gè)正運(yùn)行的應(yīng)用程序的實(shí)例。它由兩個(gè)部分組成:一部分是操作系統(tǒng)用來管理這個(gè)進(jìn)程的內(nèi)核對象;另一部分是這個(gè)進(jìn)程擁有的地址空間,這個(gè)地址空間包含應(yīng)用程序的代碼段、靜態(tài)數(shù)據(jù)段、堆棧、非XIP(ExecuteInPlace)DLL。從執(zhí)行角度來看,一個(gè)進(jìn)程由一個(gè)或多個(gè)線程組成。一個(gè)線程是一個(gè)執(zhí)行單元,它控制CPU執(zhí)行進(jìn)程中某一段代碼段。一個(gè)線程可以訪問這個(gè)進(jìn)程中所有的地址空間和資源。一個(gè)進(jìn)程至少包括一個(gè)線程來執(zhí)行代碼,這個(gè)線程又叫做主線程。在WindowsEmbeddedCE6.0中,如果想創(chuàng)建進(jìn)程,可以使用下面這個(gè)API函數(shù):

BOOLCreateProcess(

LPCTSTRlpApplicationName //應(yīng)用程序的名稱

LPCTSTRlpCommandLine, //用于傳遞啟動參數(shù)

LPSECURITY_ATTRIBUTESlpProcessAttributes,

LPSECURITY_ATTRIBUTESlpThreadAttributes,,

BOOLbInheritHandles,

DWORDdwCreationFlags, //進(jìn)程的狀態(tài)標(biāo)志

LPVOIDlpEnvironment,

LPCTSTRlpCurrentDirectory,

LPSTARTUPINFOlpStasrtupInfo,

LPPROCESS_INFORMATIONlpProcessInformation //傳遞一個(gè)變量地址

);因?yàn)閃indowsCE不支持安全性、當(dāng)前目錄、繼承性,所以這個(gè)函數(shù)的很多參數(shù)都必須設(shè)為0或FALSE。具體第3、4、7、8、9個(gè)參數(shù)設(shè)為0,第5個(gè)參數(shù)設(shè)為FALSE。第1參數(shù)為應(yīng)用程序名稱,這個(gè)參數(shù)不能為NULL。如果只傳遞應(yīng)用程序名稱而沒有指定路徑,那么系統(tǒng)將先搜索\Windows目錄,接著搜索OEM指定的搜索路徑。第2參數(shù)用于傳遞啟動參數(shù),必須為Unicode碼。第6參數(shù)為創(chuàng)建標(biāo)志,可以為0(創(chuàng)建一個(gè)常規(guī)進(jìn)程)、CREATEE_SUSPENDED(啟動后掛起)、DEBUG_PROCESS(用于創(chuàng)建這個(gè)進(jìn)程的父進(jìn)程調(diào)試用)、DEBUG_ONLY_THIS_PROCESS(不調(diào)試子進(jìn)程)、CREATEE_NEW_CONSOLE(控制臺進(jìn)程)。第10參數(shù)傳遞給它一個(gè)PROCESS_INFORMATION結(jié)構(gòu)變量的地址。返回進(jìn)程和主線程的句柄和ID。

終止一個(gè)進(jìn)程最好是由WinMain函數(shù)返回。在主線程中調(diào)用ExitThread函數(shù)也可以。在當(dāng)前進(jìn)程終止另一個(gè)進(jìn)程使用TerminateProcess函數(shù)。WindowsCE下的TerminateProcess函數(shù)要比其他Windows下的TerminateProcess函數(shù)功能強(qiáng)大。WindowsCE下的TerminateProcess函數(shù)在使進(jìn)程退出時(shí),會通知每個(gè)加載的DLL并做出進(jìn)程退出時(shí)該做的所有處理工作。

同進(jìn)程相比,線程是真正的執(zhí)行單元。線程除了能夠訪問進(jìn)程的資源外,每個(gè)線程還擁有自己的棧。棧的大小是可以調(diào)整的,最小為1KB或4KB(也就是一個(gè)內(nèi)存頁,內(nèi)存頁的大小取決于CPU),一般默認(rèn)為64KB,但棧頂端永遠(yuǎn)保留2KB以防止溢出。

線程有五種狀態(tài),分別為運(yùn)行、掛起、睡眠、阻塞、終止。當(dāng)所有線程全部處于阻塞狀態(tài)時(shí),內(nèi)核處于空閑模式(Idlemode),這時(shí)對CPU的電力供應(yīng)將減小。創(chuàng)建一個(gè)線程的API聲明如下:

HANDLECreateThread(

LPSECURITY_ATTRIBUTESlpThreadAttributes //線程屬性,此處為NULL

DWORDdwStackSize,//設(shè)置線程堆棧的大小

LPTHREAD_START_ROUTINElpStartAddress //線程函數(shù)名稱

LPVOIDlpParameter,//傳入線程函數(shù)的參數(shù)

DWORDdwCreationFlags,//creationflags

LPDWORDlpThreadId//返回線程ID號

);WindowsCE不支持安全性,所以參數(shù)1必須設(shè)置為0。如果參數(shù)5為STACK_SIZE_PARAM_IS_A_RESER-VATION,那么參數(shù)2可以指定棧的大小,內(nèi)核將按照參數(shù)2的數(shù)值來為此線程擁有的棧保留地址空間。如果參數(shù)5不為STACK_SIZE_PARAM_IS_A_RESERVATION,那么參數(shù)2必須設(shè)置為0。參數(shù)3為執(zhí)行路徑的首地址,也即函數(shù)的地址。參數(shù)4用來向線程中傳遞一個(gè)參數(shù)。參數(shù)5除了上面的說明外,還可以為0、CREATE_SUSPENDED。CREATE_SUSPENDED表示這個(gè)線程在創(chuàng)建后一直處于掛起狀態(tài),直到用ResumeThread函數(shù)來恢復(fù)。最后一個(gè)參數(shù)保存函數(shù)返回的創(chuàng)建的線程ID。退出一個(gè)線程同退出一個(gè)進(jìn)程有類似的方法。最好是由函數(shù)返回,在線程中調(diào)用ExitThead函數(shù)也可以。在當(dāng)前線程中終止另一個(gè)線程使用TerminateThread函數(shù)。此函數(shù)在使一個(gè)線程退出時(shí),會通知這個(gè)線程加載的所有DLL,這樣DLL就可以做結(jié)束工作了。

WindowsCE不像其他Windows操作系統(tǒng)那樣將進(jìn)程分為不同的優(yōu)先級類,WindowsCE只將線程分為256個(gè)優(yōu)先級。0優(yōu)先級最高,255最低,0~248優(yōu)先級屬于實(shí)時(shí)性優(yōu)先級。0~247優(yōu)先級一般分配給實(shí)時(shí)性應(yīng)用程序、驅(qū)動程序、系統(tǒng)程序。249~255優(yōu)先級中,251優(yōu)先級是正常優(yōu)先級(THREAD_PRIORITY_NORMAL),255優(yōu)先級為空閑優(yōu)先級(THREAD_PRIORITY_IDLE)。249優(yōu)先級是高優(yōu)先級(THREAD_PRIORITY_HIGHEST)。249~255優(yōu)先級一般分配給普通應(yīng)用程序線程使用。

WindowsEmbeddedCE操作系統(tǒng)具有實(shí)時(shí)性,所以調(diào)度系統(tǒng)必須保證高優(yōu)先級線程先運(yùn)行,低優(yōu)先級線程在高優(yōu)先級線程終止后或者阻塞時(shí)才能得到CPU時(shí)間片。而且一旦發(fā)生中斷,內(nèi)核會暫停低優(yōu)先級線程的運(yùn)行,讓高優(yōu)先級線程繼續(xù)運(yùn)行,直到終止或者阻塞。具有相同優(yōu)先級的線程平均占用CPU時(shí)間片,當(dāng)一個(gè)線程使用完了CPU時(shí)間片或在時(shí)間片內(nèi)阻塞、睡眠,那么其他相同優(yōu)先級的線程會占用時(shí)間片。這里提到的CPU時(shí)間片是指內(nèi)核限制線程占有CPU的時(shí)間,默認(rèn)為100ms。OEM可以更改這個(gè)值,甚至設(shè)置為0。

掛起一個(gè)線程使用SuspendThread函數(shù)。參數(shù)只有線程的句柄。要說明的是,如果要掛起的線程正調(diào)用一個(gè)內(nèi)核功能,這時(shí)執(zhí)行此函數(shù)可能會失敗。需要多次調(diào)用此函數(shù)直到函數(shù)返回值不為0xFFFFFFFF,說明掛起成功?;謴?fù)線程使用ResumeThread函數(shù),參數(shù)也是線程的句柄。6.3.2內(nèi)存管理

WindowsCE被設(shè)計(jì)成一個(gè)ROM+RAM的文件系統(tǒng)。在WindowsCE下,RAM被分為對象存儲和程序內(nèi)存兩塊。對象存儲如同一個(gè)永久的虛擬RAM盤,當(dāng)系統(tǒng)掛起或軟件重置的時(shí)候,對象存儲可以保護(hù)存儲到RAM中的數(shù)據(jù),采用這樣的設(shè)計(jì)完全是嵌入式系統(tǒng)設(shè)計(jì)的要求,因?yàn)橛脩粲锌赡芨鼡Q電池,此時(shí)需要保護(hù)RAM中的數(shù)據(jù)。程序內(nèi)存是由全部的RAM除去對象存儲剩下的部分,它像PC中的RAM一樣,用于為運(yùn)行應(yīng)用程序保存堆和棧。對象存儲和程序內(nèi)存之間的邊界是可以移動的,用戶可以通過在系統(tǒng)控制面板中的內(nèi)存管理模塊進(jìn)行調(diào)整。在CE設(shè)備低內(nèi)存的情況下,系統(tǒng)會提示用戶將對象存儲RAM用作程序RAM以滿足應(yīng)用程序的需求。

WindowsCE只能管理512MB的物理內(nèi)存和4GB大小的虛擬地址空間。不同的CPU內(nèi)存管理方法也不同。對于MIPS和SHX系列CPU來說,物理地址映射是由CPU完成的,WindowsCE內(nèi)核可以直接訪問512MB的物理內(nèi)存。對于x86系列和ARM系列的CPU來說,在內(nèi)核啟動過程中它會將現(xiàn)有物理內(nèi)存地址全部映射到0x80000000以上的虛擬地址空間中供內(nèi)核以后使用。OEM可以通過OEMAddressTable來詳細(xì)定義虛擬地址和物理地址的映射關(guān)系。OEMAddressTable本身并不是一個(gè)文件,它只是存在于其他文件中描述虛擬地址和實(shí)際物理地址的映射關(guān)系的數(shù)據(jù)。比如文件OEM層oemaddrtab_cfg.inc中包含如下一行代碼:

dd80000000h,0,04000000h

它表示將整個(gè)物理地址(0x04000000=64MB)共64MB映射到虛擬地址0x80000000到0x84000000中。整個(gè)4GB虛擬地址空間主要?jiǎng)澐譃閮刹糠郑?x80000000以上為內(nèi)核使用部分,0x80000000以下為應(yīng)用程序使用部分,詳見表6.4和6.5。

表6.4內(nèi)核存儲器空間描述表6.5用戶存儲器空間描述6.3.3設(shè)備管理器與文件系統(tǒng)

WindowsCE文件系統(tǒng)是一種靈活的模塊化設(shè)計(jì),它允許自定義文件系統(tǒng)、篩選器和多種不同類型的塊設(shè)備。文件系統(tǒng)和所有與文件相關(guān)的API都是通過FileSys.exe進(jìn)程來管理的。這個(gè)模塊實(shí)現(xiàn)了對象存儲和存儲管理器,并將所有文件系統(tǒng)統(tǒng)一到一個(gè)根“\”下面的單個(gè)系統(tǒng)中。在WindowsCE中,所有文件和文件系統(tǒng)都存在于從“\”作為根開始的單個(gè)命名空間中。所有文件均以在層次結(jié)構(gòu)樹中從根開始的唯一路徑進(jìn)行標(biāo)識。這類似于桌面計(jì)算機(jī)版本的Windows,只是沒有驅(qū)動器號。在WindowsCE中,驅(qū)動器作為文件夾裝入根下面。因此,添加到系統(tǒng)中的新存儲卡將裝入樹的根中,其路徑類似于“\StorageCard”。FileSys.exe由下列幾個(gè)組件組成:

ROM文件系統(tǒng)。

存儲管理器。

對象存儲。

下面討論系統(tǒng)如何加載以上所有各項(xiàng)。操作系統(tǒng)啟動時(shí),NK.exe將直接從ROM文件系統(tǒng)加載FileSys.exe,然后,F(xiàn)ileSys.exe對注冊表進(jìn)行初始化,F(xiàn)ileSys.exe將讀取注冊表項(xiàng),以便啟動各種應(yīng)用程序。首先列在注冊表中的一個(gè)應(yīng)用程序通常是Device.exe,即設(shè)備管理器。設(shè)備管理器從HKEY_LOCAL_MACHINE\Drivers\RootKey項(xiàng)加載驅(qū)動程序。正常情況下,任何內(nèi)置的磁盤設(shè)備(如硬盤)列在該項(xiàng)下面,所以將加載塊驅(qū)動程序。塊驅(qū)動程序通常在一個(gè)特定的設(shè)備類標(biāo)識符中:

BLOCK_DRIVER_GUID{A4E7EDDA-E575-4252-9D6B-4195D48BB865}

設(shè)備管理器是WindowsCE設(shè)備管理的核心機(jī)構(gòu),它主要負(fù)責(zé)跟蹤、維護(hù)系統(tǒng)的設(shè)備信息并對設(shè)備資源進(jìn)行調(diào)配。在%WINCEROOT%\PRIVATE\WINCEOS\COREOS\DEVICE\LIB里可以看到WindowsCE設(shè)備管理器的代碼,設(shè)備管理器在WindowsCE中主要表現(xiàn)為Device.exe的文件,Device.exe在系統(tǒng)啟動的時(shí)候通過注冊表里面的HKEY_LOCAL_MACHINE\Init\"Launch20"="Device.exe"加載(WindowsCE啟動時(shí)分別執(zhí)行[HKEY_LOCAL_MACHINE\init]鍵下所有子鍵列出的程序),設(shè)備管理器是用戶級別的程序,在基于WindowsCE的平臺上不停地運(yùn)行著。設(shè)備管理器雖然不是內(nèi)核的一部分,但是它是與內(nèi)核、注冊表和流接口驅(qū)動程序有相互影響的單獨(dú)部分,設(shè)備管理器通知內(nèi)核設(shè)備接口來支持文件操作(例如,CreateFile),以便訪問公開流接口的設(shè)備。設(shè)備管理器向設(shè)備驅(qū)動程序發(fā)送電源通知回調(diào)并提供電源管理服務(wù)。設(shè)備管理器完成以下任務(wù):(1)在系統(tǒng)啟動時(shí)或收到用戶添加外圍設(shè)備的信息時(shí)初始化驅(qū)動程序的加載。

(2)向內(nèi)核注冊特定的文件名,該文件名把應(yīng)用程序使用的流I/O函數(shù)映射到流接口驅(qū)動程序的函數(shù)中實(shí)現(xiàn)。

(3)通過從外圍設(shè)備獲得即插即用標(biāo)示符,或激活一個(gè)檢查子程序來發(fā)現(xiàn)可以處理該設(shè)備的驅(qū)動程序,為外圍設(shè)備找到合適的驅(qū)動程序。

(4)通過讀寫注冊值來加載跟蹤驅(qū)動程序。

(5)當(dāng)不再需要設(shè)備時(shí),負(fù)責(zé)卸載驅(qū)動程序。WindowsCE在系統(tǒng)啟動時(shí)初始化流驅(qū)動程序的加載。加載流驅(qū)動程序有三種方法。

第一種加載類型是在系統(tǒng)啟動的時(shí)候進(jìn)行的。當(dāng)WindowsCE的平臺啟動的時(shí)候,啟動設(shè)備管理器,設(shè)備管理器從注冊表的HKEY_LOCAL_MACHINE\Drivers\RootKey下面加載入口點(diǎn),通常RootKey的值都被設(shè)置為Drivers\BuiltIn。然后設(shè)備管理器通過\RootKey提供的入口點(diǎn)開始讀取HKEY_LOCAL_MACHINE\Drivers\BuiltIn鍵的內(nèi)容,并加載已列出的流接口驅(qū)動程序。第二種加載的類型是在設(shè)備管理程序自動檢測外圍設(shè)備與基于WindowsCE平臺的連接時(shí)進(jìn)行的。PC卡是自動檢測設(shè)備最常見的類型,因?yàn)樵谟脩舨迦隤C卡時(shí)PC卡插槽控制程序通知WindowsCE,在用戶把PC卡插入插槽時(shí),設(shè)備管理程序調(diào)用插槽驅(qū)動程序(這是一個(gè)內(nèi)部設(shè)備管理程序)尋找即插即用標(biāo)示符。然后,設(shè)備管理程序檢查HKEY_LOCAL_MACHINE\Drivers\PCMCIA鍵以得到和即插即用標(biāo)示符所匹配的子鍵。如果有一個(gè)子鍵存在,該子鍵將加載鍵值列表中的這個(gè)驅(qū)動程序。如果沒有匹配的子鍵,設(shè)備管理器調(diào)用HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect鍵中列表的所有偵測函數(shù)。如果有一個(gè)函數(shù)返回一個(gè)值,那么設(shè)備管理程序加載并初始化那個(gè)流接口驅(qū)動程序。

第三種加載類型是當(dāng)設(shè)備管理器不能夠自動檢測或加載某一種驅(qū)動程序的時(shí)候進(jìn)行。這種情況大多數(shù)出現(xiàn)在串行設(shè)備上,因?yàn)閃indowsCE不能自動檢測到串行設(shè)備。這個(gè)時(shí)候可以使用系統(tǒng)提供的ActivateDeviceEx函數(shù)來加載驅(qū)動程序。6.3.4用戶界面與圖形系統(tǒng)

WindowsCE整合了MicrosoftWin32API、用戶接口及GDI(GraphicsDeviceInterface)的函數(shù)庫,構(gòu)建了GWES(Graphics、Windowing和EventsSubsystem)模塊(GWES.exe)。GWES是介于用戶及操作系統(tǒng)間的一組接口,它支持了所有用戶控制應(yīng)用程序的WindowsCE用戶接口,包括窗口、對話框、控件、選單以及資源。GWES也提供了用戶關(guān)于位圖、carets、光標(biāo)、文字及圖標(biāo)的相關(guān)信息,即使是缺乏圖形用戶接口的那些WindowsCE平臺使用GWES基本的窗口與信息功能及電源管理函數(shù)。WindowsCEGWES系統(tǒng)中的USER部分包含3大模塊:

用戶輸入系統(tǒng)。

事件管理器。

窗口管理器。

用戶輸入系統(tǒng)分為消息隊(duì)列和窗口管理器兩部分,消息隊(duì)列Magque是任何需要消息傳遞的地方所必需的部分,用戶輸入的信息需要在窗口系統(tǒng)中得以顯示。Wmbase組件的作用是建立窗口,為窗口提供窗口處理函數(shù)WndProc,并且給它發(fā)送消息。窗口管理器Winmgr負(fù)責(zé)把繪圖操作的結(jié)果顯示在屏幕上。需要指出的是圖形設(shè)備接口GDI,它包含一個(gè)設(shè)備描述表,表述了圖形的輸出模板,通過將使用的繪圖工具對象選入設(shè)備描述表來完成繪圖工具的選擇。設(shè)備描述表是所有繪圖工具的集合。GDI最重要的特點(diǎn)是它不直接接觸像素,所有的信息都將送至設(shè)備驅(qū)動程序,并由設(shè)備驅(qū)動程序最終完成像素點(diǎn)的輸出。

在WindowsCE操作系統(tǒng)中,位圖的操作和字體選擇也是有自身特點(diǎn)的,可以使用函數(shù)CreateeDIBSection、CreateeBitmap或CreateeCOMpatibleBitmap來建立位圖,從而得到相對應(yīng)的位圖句柄。前兩個(gè)函數(shù)是分配在系統(tǒng)內(nèi)存中的,而CreateeCOMpatibleBitmap是根據(jù)設(shè)備驅(qū)動程序和硬設(shè)備的不同由設(shè)備驅(qū)動程序分配的,同時(shí)設(shè)備驅(qū)動程序可以分配影像內(nèi)存。WindowsCE擁有完整的TrueType字體處理體系,顯示一個(gè)字型需要花費(fèi)很長的時(shí)間,當(dāng)調(diào)用某種商標(biāo)字體中的一個(gè)字母時(shí),系統(tǒng)需要從這種字體的字體文件中取出它的字型,縮放到實(shí)際的大小,最后將其顯示出來。為了減少這個(gè)過程所花費(fèi)的時(shí)間,系統(tǒng)采用了“字型高速緩沖存儲器”。當(dāng)要建立一個(gè)特殊尺寸的字型時(shí),系統(tǒng)需要權(quán)衡處理速度與占用高速緩存之間大小的矛盾以決定給這個(gè)操作分配多少高速緩存以及分配的時(shí)機(jī)。最后需要說明一下顯示驅(qū)動接口(DDI),它是WindowsNT/2000/XPDDI的子集,WindowsCE使用最基本的DDI圖形處理函數(shù)和驅(qū)動程序函數(shù)。6.3.5注冊表

在WindowsCE中,注冊表扮演著非常重要的角色,它是一個(gè)系統(tǒng)數(shù)據(jù)庫,存儲著應(yīng)用程序、驅(qū)動程序和操作系統(tǒng)的配置信息,通常還存儲著操作系統(tǒng)調(diào)用程序的信息。

與桌面Windows一樣,WindowsCE也使用注冊表(Registry)來保存應(yīng)用程序、驅(qū)動程序和用戶的設(shè)定以及其他一些配置信息。WindowsCE注冊表也采用樹形結(jié)構(gòu)來管理配置信息。WindowsCE注冊表的結(jié)構(gòu)和功能與桌面Windows幾乎一樣,注冊表是一個(gè)包括主關(guān)鍵字子樹的集合,它和文件目錄樹一樣具有層次結(jié)構(gòu)。每個(gè)子樹又由更低層的子樹、鍵及鍵值組成。由于WindowsCE注冊表的結(jié)構(gòu)和功能與桌面Windows幾乎一樣,因此此處不作詳細(xì)介紹。

WindowsCE注冊表包括4個(gè)根鍵:HKEY_LOCAL_MACHINE、HKEY_CURRENT_USER、HKEY_CLASSES_ROOT、HKEY_USERS。系統(tǒng)提供了豐富的對注冊表訪問的函數(shù),用戶可以方便地增加、刪除或修改注冊表的內(nèi)容。在表6.6中,可以看到WindowsCE注冊表中的4個(gè)根鍵以及它們存儲的內(nèi)容。

表6.6WindowsCE根鍵內(nèi)容

1.基于RAM的注冊表

基于RAM的注冊表,也叫基于對象存儲(ObjectStorage)的注冊表,用于將注冊表數(shù)據(jù)全部保存在RAM中。

從WindowsCE1.0開始到WindowsCE6.0之前,都采用此技術(shù)來保存注冊表。每個(gè)新創(chuàng)建的內(nèi)核都默認(rèn)采用此技術(shù)來保存注冊表。系統(tǒng)如果斷電,關(guān)閉時(shí)提供低電源給RAM,重新啟動設(shè)備后,系統(tǒng)將從內(nèi)核中重新讀取注冊表數(shù)據(jù)到RAM,當(dāng)然以前保存的用戶數(shù)據(jù)已經(jīng)丟失。

所以基于RAM對象存儲的注冊表適合頻繁熱啟動而不冷啟動的設(shè)備,一般用于較少斷電的系統(tǒng)或不需要冷啟動的系統(tǒng)。2.基于HIVE結(jié)構(gòu)的注冊表

基于HIVE結(jié)構(gòu)的注冊表是在WindowsCE中才實(shí)現(xiàn)的一個(gè)新特性,用于將注冊表數(shù)據(jù)全部或部分保存到永久存儲器上。

(1)它是從WindowsCE開始采用的新技術(shù),適合經(jīng)常冷啟動而不熱啟動的設(shè)備。

(2)支持多用戶信息分別保存。當(dāng)一個(gè)用戶登錄時(shí),加載這個(gè)用戶的注冊表數(shù)據(jù),注銷時(shí)卸載這個(gè)用戶的注冊表數(shù)據(jù)。(3)

HIVE注冊表是指一組鍵,包括子鍵、鍵值、數(shù)據(jù),是保存或者加載注冊表數(shù)據(jù)的單位。HIVE注冊表分為系統(tǒng)HIVE(SystemHive)、用戶HIVE(UserHive)和引導(dǎo)HIVE(BootHive)。

WindowsCE采用新的注冊表保存技術(shù)—基于HIVE的注冊表。在這之前基于WindowsCE的設(shè)備,大多數(shù)采用給RAM供電的方式來保存注冊表數(shù)據(jù),有了基于HIVE的技術(shù),啟動時(shí)系統(tǒng)會自動加載數(shù)據(jù),免去了熱啟動的麻煩,而且當(dāng)內(nèi)核更新升級時(shí),不用擔(dān)心保存在永久存儲器上的系統(tǒng)HIVE文件影響新內(nèi)核,系統(tǒng)會自動判斷并刪除過時(shí)的系統(tǒng)HIVE文件。只有擁有了這樣的技術(shù),基于WindowsCE的產(chǎn)品才算是一個(gè)真正的電腦。6.3.6電源管理

電源管理是管理嵌入式操作系統(tǒng)必要的組件之一。在WindowsCE下,電源管理模塊提供了如下的功能:

提供了設(shè)備可以自己管理電源供應(yīng)的框架。

提供了一種機(jī)制,將設(shè)備的電源管理和系統(tǒng)電源狀態(tài)分割開。

提供了一個(gè)模塊,可以從全局的角度查看系統(tǒng)環(huán)境、電源狀態(tài)和設(shè)備供電狀態(tài)。用戶可以從整個(gè)系統(tǒng)的角度出發(fā),修改電源管理模塊,實(shí)施適合自己應(yīng)用特點(diǎn)的電源管理策略。

圖6.3電源管理架構(gòu)

電源管理模塊是以動態(tài)鏈接庫的形式存在于系統(tǒng)中的,稱為Pm.dll,它和Device.exe直接相連。

使用電源管理器,設(shè)備接收作為I/O控制代碼(IOCTL)形式的電源狀態(tài)變化的通知。由于IOCTL在線程的上下文執(zhí)行,因此在如何實(shí)現(xiàn)電源狀態(tài)變化方面需要更多的靈活性,同時(shí)使用IOCTL管理電源使設(shè)備的電源狀態(tài)與操作系統(tǒng)的電源狀態(tài)區(qū)分開來,這樣,當(dāng)操作系統(tǒng)正在運(yùn)行時(shí),一些設(shè)備可以關(guān)閉自己的電源,而當(dāng)絕大多數(shù)操作系統(tǒng)掛起時(shí),另外一些設(shè)備則可以保持原有狀態(tài)。電源管理器作為設(shè)備、應(yīng)用程序和操作系統(tǒng)電源狀態(tài)之間的一個(gè)中介,它在這三者之間遵循下列通信原則:

操作系統(tǒng)電源狀態(tài)對所有設(shè)備施加最大電量消耗的限制。

為了獲得最小的性能等級,應(yīng)用程序?qū)μ囟ǖ脑O(shè)備施加最小電量消耗的限制。

只要設(shè)備在它們的最大與最小限制之間保持電源等級,電源管理器允許設(shè)備智能地管理自己的電源。

如果最小的電量消耗限制設(shè)置的比最大值還高,那么當(dāng)應(yīng)用程序需要訪問這個(gè)設(shè)備時(shí),設(shè)備的電源將保持最大電量值。

設(shè)備可以實(shí)現(xiàn)一個(gè)或多個(gè)設(shè)備電源狀態(tài),設(shè)備電源狀態(tài)被限制為一個(gè)有限數(shù)。

如果操作系統(tǒng)切換到掛起狀態(tài),那么應(yīng)用程序?qū)⒈皇┘右粋€(gè)最小的電量限制。

系統(tǒng)電源狀態(tài)對所有設(shè)備描述一個(gè)最大的設(shè)備電源狀態(tài),系統(tǒng)電源狀態(tài)是由OEM定義的,并在注冊表中被描述,也可能通過編碼使電源管理器支持它們。OEM可以定義任意數(shù)量的系統(tǒng)電源狀態(tài)。在電源管理器框架內(nèi),OEM定義操作系統(tǒng)電源狀態(tài)以建立最大設(shè)備電源狀態(tài),設(shè)備調(diào)用DevicePowerNotify函數(shù)來調(diào)整它們自己的電源等級,而應(yīng)用程序調(diào)用SetPowerRequirement函數(shù)來驗(yàn)證需要設(shè)備運(yùn)行在一個(gè)可接受的電源等級上。

電源管理器期望所有被管理的設(shè)備都支持一個(gè)或多個(gè)設(shè)備電源狀態(tài),設(shè)備必須向電源管理器報(bào)告它們的電源消耗特征,設(shè)備電源狀態(tài)通常需要在性能與電量消耗之間進(jìn)行折中。電源狀態(tài)包括系統(tǒng)電源狀態(tài)和設(shè)備電源狀態(tài),系統(tǒng)電源狀態(tài)是由OEM在OAL中定義的,而設(shè)備電源狀態(tài)是由驅(qū)動程序開發(fā)者在驅(qū)動程序中定義的。設(shè)備管理器在OEM定義的系統(tǒng)電源狀態(tài)的范圍內(nèi)管理設(shè)備電源狀態(tài),系統(tǒng)電源狀態(tài)對設(shè)備電源狀態(tài)施加了一個(gè)上界。

設(shè)備的電源狀態(tài)是被預(yù)先靜態(tài)定義的,電源管理器將設(shè)備狀態(tài)傳遞給一個(gè)設(shè)備驅(qū)動,而驅(qū)動程序負(fù)責(zé)將這個(gè)狀態(tài)映射為設(shè)備的電源能力,然后對物理設(shè)備完成可用的狀態(tài)轉(zhuǎn)換。

微軟公司為WindowsCE系統(tǒng)建立了相應(yīng)的開發(fā)環(huán)境(IDE),從較早的WindowsCE版本開始使用MicrosoftPlatformBuilder平臺來建立操作系統(tǒng)內(nèi)核以及內(nèi)核調(diào)試等環(huán)境。同時(shí),該平臺提供了WindowsCE的目錄和相關(guān)屬性設(shè)置。6.4WindowsCE操作系統(tǒng)設(shè)計(jì)6.4.1PlatformBuilder集成開發(fā)環(huán)境

微軟公司推出的WindowsCE開發(fā)平臺(IDE)被稱為PlatformBuilder,從較早的版本就已經(jīng)推出該開發(fā)平臺,目前最新的WindowsEmbeddedCE6.0是在MicrosoftVisualStudio2005中集成的,它同VisualC++/VisualC#/VisualJ#等開發(fā)環(huán)境一樣被統(tǒng)一集成到一個(gè)平臺之下。這樣做的好處是可以把系統(tǒng)定制和上層應(yīng)用程序開發(fā)放到一個(gè)平臺下進(jìn)行,縮短了開發(fā)周期。該平臺提供了所有進(jìn)行設(shè)計(jì)、創(chuàng)建、編譯、測試和調(diào)試WindowsCE操作系統(tǒng)平臺的工具。它運(yùn)行在桌面Windows系統(tǒng)下,開發(fā)人員可以通過此工具進(jìn)行設(shè)計(jì)和定制內(nèi)核、選擇操作系統(tǒng)所需屬性以及進(jìn)行調(diào)試和編譯。同時(shí)開發(fā)人員可以通過此工具進(jìn)行WindowsCE平臺下的驅(qū)動程序開發(fā)。下面列出了PlatformBuilder提供的工具集:

可以使用模板來創(chuàng)建一個(gè)新的平臺。

使用模板來創(chuàng)建一個(gè)新的板級支持包。

在目錄列表中列出了系統(tǒng)特性,這些特性可以從系統(tǒng)中添加和刪除,并且屬性和屬性之間建立了完整的關(guān)聯(lián)性。

通過輸出模板,將一個(gè)系統(tǒng)的功能輸出到配置文件,以便其他用戶使用。

提供基本的默認(rèn)配置,為用戶自主創(chuàng)建特殊配置的操作系統(tǒng)帶來了方便。

配置了一系列的遠(yuǎn)程調(diào)試工具,方便了調(diào)試工作。其中,內(nèi)核調(diào)試器能調(diào)試被定制的操作系統(tǒng),并且能給用戶提供性能上的測試參數(shù)。應(yīng)用程序調(diào)試器能在目標(biāo)機(jī)或者模擬器的操作系統(tǒng)中測試應(yīng)用程序。

配置了SDK導(dǎo)出系統(tǒng),為應(yīng)用程序開發(fā)提供了方便。

提供了WindowsCETestKit,用來測試驅(qū)動程序。具體來說,PlatformBuilder提供的主要開發(fā)特性如下:

(1)平臺開發(fā)向?qū)?PlatformWizard)、BSP(板卡支持包)和開發(fā)向?qū)?BSPWizard)。開發(fā)向?qū)в脕硪龑?dǎo)開發(fā)人員去創(chuàng)建一個(gè)簡單的系統(tǒng)平臺或BSP。

(2)基礎(chǔ)配置。它為各種流行的設(shè)備提供向?qū)?,開發(fā)人員可以根據(jù)自身需要選擇一種特定的配置選取相關(guān)組件,輕松修改配置方案,從而縮短了開發(fā)流程。

(3)特性目錄(Catalog)。操作系統(tǒng)的可選特性均在特性目錄中列出,開發(fā)人員可以從特性目錄中選取自身所需要的特性配置。(4)自動依賴性檢測。特性之間的依賴關(guān)系是系統(tǒng)自動維護(hù)的,開發(fā)人員在選擇一個(gè)特性時(shí),系統(tǒng)會自動將這一特性相依賴的屬性加上。反之,如果刪除一個(gè)特性,系統(tǒng)也會將與該特性相關(guān)的特性刪除掉。

(5)系統(tǒng)為驅(qū)動程序開發(fā)提供了基本的測試工具集WindowsCETestkit(測試工具包)。

(6)內(nèi)核調(diào)試器可以對自定義的操作系統(tǒng)鏡像進(jìn)行調(diào)試,并且向用戶提供有關(guān)鏡像性能的信息。

(7)導(dǎo)出向?qū)?ExportWizard)可以向其他PlatformBuilder用戶導(dǎo)出自定義的目錄特性。

(8)導(dǎo)出SDK向?qū)?。該向?qū)Э梢愿鶕?jù)定制好的內(nèi)核鏡像環(huán)境提供軟件開發(fā)包,為進(jìn)一步開發(fā)應(yīng)用程序提供相關(guān)支持。

(9)遠(yuǎn)程工具可以執(zhí)行基于WindowsCE的與目標(biāo)設(shè)備有關(guān)的各種調(diào)試任務(wù)和信息收集任務(wù),其中包括遠(yuǎn)程堆查看程序(RemoteHeapWalker)、遠(yuǎn)程內(nèi)核跟蹤程序(RemoteKernelTracker)、遠(yuǎn)程性能監(jiān)視程序(RemotePerformanceMonitor)、遠(yuǎn)程進(jìn)程瀏覽程序(RemoteProcessViewer)、遠(yuǎn)程注冊表編輯程序(RemoteRegistryEditor)、遠(yuǎn)程消息監(jiān)視程序(RemoteSpy)、遠(yuǎn)程系統(tǒng)信息(RemoteSystemInformation)、遠(yuǎn)程屏幕截圖程序(RemoteZoom-in)等。(10)模擬器(Emulator)。通過硬件仿真加速和簡化了系統(tǒng)的開發(fā),使用戶可以在開發(fā)工作站上對平臺和應(yīng)用程序進(jìn)行測試。需要特別指出的是,在PlatformBuilder6.0版本中提供了ARM系列平臺的模擬器,縮短了開發(fā)周期。

PlatformBuilder集成開發(fā)環(huán)境為開發(fā)人員提供了各種配套工具和開發(fā)向?qū)?,精簡和縮短了開發(fā)流程,使得開發(fā)人員可以隨時(shí)跟蹤和評估開發(fā)成果。

圖6.4PlatformBuilderForCE6.06.4.2定制WindowsCE

內(nèi)核定制是WindowsEmbeddedCE系列操作系統(tǒng)開發(fā)的首要環(huán)節(jié),在MicrosoftVisualStudio2005環(huán)境下,只要安裝了PlatformBuilder系列模塊,就可以在開發(fā)向?qū)У闹敢峦瓿蓛?nèi)核定制。本節(jié)將列出一個(gè)實(shí)例來演示定制過程,使用的平臺是WindowsCE6.0。

首先在MicrosoftVisualStudio2005下選擇Create→NewProject命令,創(chuàng)建一個(gè)新的項(xiàng)目,見圖6.5。

圖6.5創(chuàng)建一個(gè)新的項(xiàng)目如圖6.5所示,可以在ProjectTypes中選擇PlatformBuilderforCE6.0環(huán)境,設(shè)置工程名稱以及路徑,即進(jìn)入平臺定制向?qū)В鐖D6.6所示。

在這個(gè)向?qū)е刑崾玖怂械墓δ埽孩龠x擇BSP。②選擇設(shè)計(jì)模板。③向所需操作系統(tǒng)平臺中添加和刪除特性。單擊Next,打開如圖6.7所示的界面。

這個(gè)界面用來選擇BSP,這里我們選擇了基于ARMv4i平臺的模擬器環(huán)境,當(dāng)然這里還有一些基于嵌入式處理器的環(huán)境可供選擇。同時(shí)開發(fā)人員可以安裝OEM的BSP,在選擇BSP時(shí),會自動增加用戶添加的平臺環(huán)境。接下來點(diǎn)擊Next,打如圖6.8所示的界面。

圖6.6進(jìn)入平臺定制向?qū)?/p>

圖6.7選擇BSP

圖6.8選擇現(xiàn)有配置模板此步驟用來選擇設(shè)計(jì)模板,意味著開發(fā)人員可以通過開發(fā)模板提供的模型來確定選擇與自身開發(fā)環(huán)境相似的平臺。在這里提供了幾組常用的開發(fā)模板:消費(fèi)媒體設(shè)備、工業(yè)設(shè)備、PDA設(shè)備、瘦客戶端、電話設(shè)備、小型內(nèi)核設(shè)備。同時(shí)開發(fā)人員也可以通過自定義來一步一步定制操作系統(tǒng)內(nèi)核。此處選擇了PDA設(shè)備模板,直接點(diǎn)擊Next,如圖6.9所示。

此步驟用來選擇PDA設(shè)備的附加屬性,在這里選擇MobileHandheld這組最常用的設(shè)備特性,直接點(diǎn)擊Next,如圖6.10所示。

圖6.9附加屬性選擇

圖6.10選擇應(yīng)用程序及媒體配置此步驟用來選擇應(yīng)用程序和媒體設(shè)備,基于PDA最常用的軟件和功能,選擇了如圖6.10所列出的屬性,其中ActiveSync是微軟公司提供的同步連接方案。點(diǎn)擊Next,如圖6.11所示。

此步驟是關(guān)于通信網(wǎng)絡(luò)組件的選擇。考慮到PDA應(yīng)用的場合,選擇本地局域網(wǎng)以及無線協(xié)議是必須的,因此做出了圖6.11所示的選擇。選擇完畢后,直接點(diǎn)擊Next,如圖6.12所示。

這樣一個(gè)基于PDA設(shè)備的平臺就定制結(jié)束,直接點(diǎn)擊Finish就完成了組件選擇工作。

圖6.11選擇網(wǎng)絡(luò)與通信配置接下來的工作是對平臺進(jìn)行編譯和設(shè)置,通過編譯可以產(chǎn)生兩種版本:一種用于發(fā)布給用戶的版本,叫做Release版本,生成的文件位于:%_WINCEROOT%\OSDesigns\MyPlatform\MyPlatform\RelDir\DeviceEmulator_ARMV4I_Release\。

圖6.12完成WindowsCE6.0的定制

圖6.13平臺配置選項(xiàng)經(jīng)過版本選擇后,就可以通過Build選項(xiàng)進(jìn)行平臺編譯了。經(jīng)過大約20分鐘的編譯過程,WindowsCE6.0內(nèi)核編譯結(jié)束,確認(rèn)沒有錯(cuò)誤以后,可以通過建立模擬器通道,選擇Target→ConnectivityOptions命令,出現(xiàn)如圖6.14所示的對話框。

在該配置中可以選擇下載方式以及傳輸方式。由于采用模擬器作為演示工具,因此選擇了DeviceEmulator(DMA)方式,同時(shí)可以配置顯示屬性,在這里使用了默認(rèn)的240×320×16顯示效果,并設(shè)置顯存為128MB。

經(jīng)過連接設(shè)置以后,就可以開始下載內(nèi)核鏡像文件了。點(diǎn)擊AttachDevice選項(xiàng),就可以看到模擬器中的WindowsCE6.0顯示效果,如圖6.15所示。

圖6.14目標(biāo)設(shè)備連接選項(xiàng)

圖6.15模擬器效果圖6.4.3WindowsCE目錄結(jié)構(gòu)

在WindowsCE6.0開發(fā)環(huán)境下,有其專用的目錄結(jié)構(gòu),存放在WINCE600文件夾下,在這里將統(tǒng)一標(biāo)記為%_WINCEROOT%,表6.7簡單呈現(xiàn)了其目錄結(jié)構(gòu)。

表6.7WindowsCE6.0目錄1.?PLATFORM文件夾

PLATFORM文件夾里包含系統(tǒng)所有已經(jīng)安裝的BSP文件夾,PLATFORM文件夾中除COMMON文件夾之外都是板卡支持包,對應(yīng)于一個(gè)響應(yīng)平臺。常用的平臺主要有:ARUBABOARD、CEPC、DEVICEEMULATOR、H4SAMPLE、MAINSTONEIII、T5530、VOIP_PXA270。這些都是針對相應(yīng)的處理器平臺的,當(dāng)然開發(fā)人員也可以添加自己的BSP組,需要將BSP文件夾放置于PLATFORM文件夾中。2.?PUBLIC文件夾

PUBLIC文件夾包含一組WindowsCE模塊和組件文件夾、一個(gè)設(shè)計(jì)模板配置文件夾、一個(gè)PB工具文件夾和一個(gè)操作系統(tǒng)測試文件夾。

在WindowsCE模塊和組件文件夾中包括如下的文件:

COMMON:包括所有操作系統(tǒng)平臺共同的核心組件,諸如文件系統(tǒng)、GWE、通信和調(diào)試模塊。

DATASYNC:設(shè)備端的通信組件。

DCOM:分布式COM組件模塊。

DIRECTX:WindowsEmbeddedCE的DirectX支持組件。

GDIEX:圖形設(shè)備接口支持組件。

IE:MicrosoftInternetExplorer組件。

NETCF:.NETCompactFramework模塊。

RDP:用于Windows終端遠(yuǎn)程協(xié)議模塊。

SCRIPT:JavaScript和VBScript腳本引擎。

SERVERS:Web服務(wù)器支持。

SHELL:WindowsCE界面樣式。

SHELLSDK:WindowsCE界面軟件開發(fā)模塊。

SPEECH:語音輸入和識別模塊。

SQLCE:SQLServerforCE模塊。

VIEWERS:文件查看器和組件。

VOIP:可視電話模塊和組件。

WCEAPPSFE:支持亞洲國家字符集的應(yīng)用程序組件。

WCESHELLFE:支持亞洲國家字符集的與界面相關(guān)的應(yīng)用程序組件。在這些文件夾下都設(shè)有CESYSGEN、OAK和SDK文件夾,這些文件夾下的文件定義了如何使用本模塊以及如何包含到操作系統(tǒng)內(nèi)核中,還包括了支持這些組件和模塊的源文件和庫文件,以及利用本模塊開發(fā)軟件的工具。

在設(shè)計(jì)模板配置文件夾中,PlatformBuilder提供了一個(gè)設(shè)計(jì)模板配置文件——CEBase,它由很多bat文件組成,這些批處理文件通過設(shè)置環(huán)境變量控制平臺包含哪些組件,每一個(gè)批處理文件控制一個(gè)相對應(yīng)的模板,當(dāng)我們選擇了一個(gè)模板平臺時(shí),PlatformBuilder會根據(jù)批處理文件中的環(huán)境變量來提取響應(yīng)的組件。而在PlatformBuilder工具文件夾中,指的主要是PBTOOLS文件夾,這個(gè)文件夾下包括一個(gè)SDK的例子,演示了如何使用平臺管理器應(yīng)用程序編程接口來擴(kuò)展遠(yuǎn)程工具中的WindowsCE性能監(jiān)視器。

操作系統(tǒng)測試文件夾主要指的是OSTEST文件夾,它是WindowsCE6.0Testkit的設(shè)備端組件。

3.?OSDesigns文件夾

OSDesigns文件夾主要放置開發(fā)人員建立的操作系統(tǒng)定制工程文件。當(dāng)創(chuàng)建一個(gè)新的平臺時(shí),將在這個(gè)文件夾下創(chuàng)立以工程名命名的文件夾,所有編譯和生成的文件將全部位于這個(gè)文件夾下。在此文件夾下主要包括表6.8所示的兩個(gè)文件夾。

表6.8OSDesigns文件夾下的目錄4.?SDK文件夾

SDK文件夾包含PlatformBuilder用到的一些工具,

但不包含創(chuàng)建鏡像用到的工具。

SDK文件夾包含如下的工具:

處理器編譯器:用于所支持平臺的交叉編譯器和匯編器,如ARM平臺編譯器和x86平臺編譯器。

開發(fā)工具:錯(cuò)誤查找工具errlook.exe、GUID生成工具、鏈接工具link.exe和編譯連接工具nmake.exe。

其他工具:Zoomin和Windiff等。5.?OTHERS文件夾

OTHERS文件夾包括WindowsCE運(yùn)行時(shí)所需要的庫和頭文件、.NETCompactFramework組件及MFC示例程序。

6.?PRIVATE文件夾

PRIVATE文件夾是WindowCE6.0操作系統(tǒng)源代碼的存放位置,目前微軟完全開放了源代碼,其中包括內(nèi)核、GWES組件和文件系統(tǒng)等源代碼。6.4.4WindowsCE的構(gòu)建系統(tǒng)

內(nèi)核是WindowsCE定制的最終結(jié)果,所有的系統(tǒng)性能都將通過內(nèi)核體現(xiàn)。PlatformBuilder環(huán)境有其獨(dú)特的構(gòu)建系統(tǒng),下面將介紹內(nèi)核形成的主要過程。

對于開發(fā)人員來說,首先從目錄特性組中選擇了開發(fā)平臺相對應(yīng)的屬性,這樣在執(zhí)行編譯命令時(shí)將實(shí)現(xiàn)如下的幾個(gè)過程:

(1)

Sysgen階段。這個(gè)階段的主要任務(wù)是鏈接相應(yīng)的靜態(tài)庫到模塊,同時(shí)過濾系統(tǒng)頭文件,產(chǎn)生只包含為聲明平臺導(dǎo)出的函數(shù)的頭文件,為系統(tǒng)模塊產(chǎn)生輸入庫,并且構(gòu)建板級支持包(BSP)。(2)

FeatureBuild階段。該階段的主要任務(wù)是將所有用戶屬性,包括PB工程文件(.php)、dirs文件、源文件、makefiles文件進(jìn)行編譯和創(chuàng)建。

(3)

ReleaseCopy階段??截愃杏脩羯傻腛S鏡像所需文件到Release目錄下,在Sysgen階段產(chǎn)生的模塊和文件首先被拷貝,接著是FeatureBuild階段生成的模塊和文件。

(4)

MakeImage階段。該階段的主要任務(wù)是將Release目錄中的文件整合到二進(jìn)制鏡像文件NK.bin中,對應(yīng)于MakeImage命令。

圖6.16內(nèi)核映像的創(chuàng)建過程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論