嵌入式操作系統(tǒng)Windows CE研究
引言
嵌入式系統(tǒng)被定義為:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式操作系統(tǒng)是支持嵌入式系統(tǒng)應(yīng)用的操作系統(tǒng)軟件,它是嵌入式系統(tǒng)極為重要的組成部分,通常包括與硬件相關(guān)的底層驅(qū)動(dòng)軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)接口、通信協(xié)議、圖形界面、標(biāo)準(zhǔn)化瀏覽器等。與通用操作系統(tǒng)相比較,嵌入式操作系統(tǒng)在系統(tǒng)實(shí)時(shí)高效性、硬件的依賴性、軟件固態(tài)化以及應(yīng)用的專用性等方面具有較為突出的特點(diǎn)。嵌入式操作系統(tǒng)的出現(xiàn),大大提高了嵌入式系統(tǒng)開(kāi)發(fā)的效率,在嵌入式操作系統(tǒng)之上開(kāi)發(fā)嵌入系統(tǒng)將減少系統(tǒng)開(kāi)發(fā)的工作量,增強(qiáng)嵌入式應(yīng)用軟件的可移植性,使嵌入式系統(tǒng)的開(kāi)發(fā)方法更具科學(xué)性。近年來(lái),隨著電子技術(shù)的不斷進(jìn)步,嵌入式系統(tǒng)開(kāi)發(fā)己成為熱點(diǎn),
Windows CE 是Microsoft 公司專門針對(duì)嵌入式產(chǎn)品領(lǐng)域開(kāi)發(fā)的嵌入式操作系統(tǒng),該系統(tǒng)是一種緊湊、高效、可伸縮的32 位的操作系統(tǒng),主要面向各種嵌入式系統(tǒng)和產(chǎn)品。它所具有的多線程、多任務(wù)、完全搶占式的特點(diǎn)是專為各種有很嚴(yán)格資源限制的硬件系統(tǒng)所設(shè)計(jì)的。它的模塊化設(shè)計(jì)使嵌入式系統(tǒng)和應(yīng)用程序開(kāi)發(fā)者能夠方便地加以定制以適應(yīng)一系列產(chǎn)品,例如:消費(fèi)類電子設(shè)備、專用工業(yè)控制器和嵌入式通信設(shè)備等的需要[1]。
Windows CE最大的好處在于界面的通用性,用戶容易接收;同時(shí),可以將Windows通用操作系統(tǒng)下的應(yīng)用程序移植到嵌入式應(yīng)用系統(tǒng)中。關(guān)于Windows CE的研究文獻(xiàn)有許多,但是缺少?gòu)臉?gòu)建平臺(tái)到網(wǎng)絡(luò)應(yīng)用的系統(tǒng)分析,本文從網(wǎng)絡(luò)應(yīng)用出發(fā),深入研究Windows CE下如何實(shí)現(xiàn)TCP/IP協(xié)議,這對(duì)嵌入式網(wǎng)絡(luò)應(yīng)用很有意義。
1 基于Windows CE的嵌入式系統(tǒng)的結(jié)構(gòu)[2][3]
要進(jìn)行嵌入式系統(tǒng)的應(yīng)用開(kāi)發(fā),必須先建立一個(gè)開(kāi)發(fā)平臺(tái)。一個(gè)基于Windows CE 的平臺(tái)由Windows CE 操作系統(tǒng)核組件、OEM 適配層(OEM Adaptation Layer ,OAL) 和設(shè)備驅(qū)動(dòng)程序以及組成系統(tǒng)的硬件設(shè)備組成,圖1為基于Windows CE平臺(tái)的層次結(jié)構(gòu)。
從圖1 中可以看出,一個(gè)基于Windows CE 的嵌入式系統(tǒng)可分為四個(gè)層次,從底層到上層分別是硬件層、OEM層、操作系統(tǒng)層和應(yīng)用程序?qū)印?
圖1 基于Windows CE的目標(biāo)平臺(tái)及其組件
硬件層是系統(tǒng)的硬件,包括微處理器和各種周邊設(shè)備。OEM層是一個(gè)硬件抽象層,它提供了硬件和操作系統(tǒng)之間的接口,操作系統(tǒng)要訪問(wèn)具體的硬件就可以通過(guò)OEM層提供的API 進(jìn)行訪問(wèn),而不必直接與硬件打交道。操作系統(tǒng)層中有Windows CE 的組件,用戶可以根據(jù)自己的系統(tǒng)的需要進(jìn)行定制,選擇需要的組件,去掉不必要的組件,這樣可以減小內(nèi)存需求,使系統(tǒng)性能達(dá)到最佳。應(yīng)用程序?qū)邮怯脩魹樘囟ǖ那度胧较到y(tǒng)開(kāi)發(fā)的應(yīng)用程序。
在操作系統(tǒng)層中,設(shè)備管理器提供對(duì)可安裝設(shè)備的支持,允許在系統(tǒng)中安裝諸如PC 卡存儲(chǔ)器和調(diào)制解調(diào)器之類的設(shè)備已擴(kuò)充功能,內(nèi)核提供最基本的操作系統(tǒng)功能,例如進(jìn)程調(diào)度、內(nèi)存管理、進(jìn)程通信等。圖形、窗口事件處理模塊將用戶的擊鍵、鼠標(biāo)移動(dòng)和控件選擇轉(zhuǎn)換為消息,傳送給應(yīng)用程序和操作系統(tǒng)來(lái)處理用戶的輸入。對(duì)象存儲(chǔ)、文件系統(tǒng)、數(shù)據(jù)庫(kù)和注理用戶的輸入。對(duì)象存儲(chǔ)、文件系統(tǒng)、數(shù)據(jù)庫(kù)和注冊(cè)表提供存儲(chǔ)數(shù)據(jù)的能力。附加技術(shù)模塊指由CE操作系統(tǒng)提供的一些可選擇的專用功能模塊,如Java語(yǔ)言支持模塊、手寫(xiě)體輸入識(shí)別模塊等。用戶界面模塊為系統(tǒng)提供一個(gè)與PC 電腦上的視窗操作系統(tǒng)類似的圖形化操作界面。對(duì)系統(tǒng)設(shè)計(jì)者而言,需要自行開(kāi)發(fā)的是應(yīng)用程序和直接與硬件有關(guān)的部分,包括硬件系統(tǒng)本身、OAL 、設(shè)備驅(qū)動(dòng)程序。其中,OAL 是指建立在硬件設(shè)備與系統(tǒng)內(nèi)核之間的一層代碼,主要任務(wù)是為內(nèi)核管理具體的硬件設(shè)備時(shí)鐘、中斷和實(shí)施電源管理提供支持。設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)支持操作系統(tǒng)對(duì)目標(biāo)硬件的訪問(wèn)。OAL 和驅(qū)動(dòng)程序都要針對(duì)具體的硬件設(shè)備編寫(xiě)。
一般硬件設(shè)備制造商會(huì)為設(shè)備提供驅(qū)動(dòng)軟件支持,如果有專門為CE 系統(tǒng)編寫(xiě)的驅(qū)動(dòng)程序,只需將其加入到操作系統(tǒng)的相應(yīng)模塊中就可用了。如果沒(méi)有,則應(yīng)根據(jù)廠商提供的驅(qū)動(dòng)程序開(kāi)發(fā)包編寫(xiě)。通常這些開(kāi)發(fā)包總已經(jīng)包含了完成各種硬件操作的標(biāo)準(zhǔn)代碼,開(kāi)發(fā)者的工作只是將其與相應(yīng)的CE 系統(tǒng)API函數(shù)對(duì)應(yīng)起來(lái)。在CE 系統(tǒng)中,所有涉及硬件的操作都通過(guò)調(diào)用相應(yīng)的API 接口函數(shù)來(lái)完成,而OAL 和驅(qū)動(dòng)程序就是要為這些API 函數(shù)提供支持,將其翻譯為直接對(duì)目標(biāo)硬件進(jìn)行底層操作。通過(guò)這種方式,CE 系統(tǒng)將應(yīng)用程序與具體的硬件設(shè)備進(jìn)行了隔離,應(yīng)用程序只需調(diào)用API 函數(shù)就可以實(shí)現(xiàn)對(duì)硬件的訪問(wèn)。這樣,程序員在開(kāi)發(fā)應(yīng)用程序時(shí)就沒(méi)有必要編寫(xiě)任何直接針對(duì)硬件的代碼,因此不必考慮具體的硬件特性,而應(yīng)用程序也具有了不依賴于具體硬件設(shè)備的獨(dú)立性。
2 Windows CE 中的網(wǎng)絡(luò)通信協(xié)議
Windows CE的網(wǎng)絡(luò)通信基于一個(gè)按層組織的網(wǎng)絡(luò)堆棧[1 ] (network stack) ,如圖2所示。網(wǎng)絡(luò)堆棧實(shí)際上是Windows CE 的一個(gè)組件,它絡(luò)堆棧實(shí)際上是Windows CE 的一個(gè)組件,它負(fù)責(zé)對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)傳輸進(jìn)行處理,將來(lái)自于應(yīng)用程序的數(shù)據(jù)分解成若干小段,并為每小段加上相關(guān)地址和段的分割信息,組成可以存貯轉(zhuǎn)發(fā)的信息包(packets) ,信息包中的地址確保數(shù)據(jù)達(dá)到最終的目的端點(diǎn)。訪問(wèn)網(wǎng)絡(luò)堆棧有如下三種方式:第一種是WinSock端口套接字方式。這是一個(gè)中間層的傳輸接口協(xié)議,WinSock 負(fù)責(zé)對(duì)建立的信息包的所有頭信息細(xì)節(jié)進(jìn)行處理, 但可以不管其數(shù)據(jù)格式。Windows CE 的網(wǎng)絡(luò)通信都直接或間接地使用WinSock。采用IrDA 協(xié)議實(shí)現(xiàn)基于紅外線套接字的客戶/ 服務(wù)器網(wǎng)絡(luò)通信是Windows CE平臺(tái)的一個(gè)特色。第二種為WinInet API 方式。WinInet API是微軟公司基于Win32 平臺(tái)的互聯(lián)網(wǎng)函數(shù)接口。Windows CE 的WinInet API 對(duì)其進(jìn)行了某些限制或擴(kuò)展,它提供的高級(jí)數(shù)據(jù)協(xié)議除了常見(jiàn)的超文本傳輸協(xié)議HTTP 和文件傳輸協(xié)議FTP 外,還提供了對(duì)SSL的支持。API 方式避免了直接使用WinSock 訪問(wèn)網(wǎng)絡(luò)的操作,簡(jiǎn)化了網(wǎng)絡(luò)編程。第三種為CIFS 重定位器方式。Windows CE 通過(guò)對(duì)遠(yuǎn)程訪問(wèn)服務(wù)RAS 客戶的支持,允許基于Windows CE的設(shè)備與遠(yuǎn)程主機(jī)建立連接。
3 Windows CE 中網(wǎng)絡(luò)通信協(xié)議使用實(shí)例
3.1 HTTP
Windows CE提供了一個(gè)開(kāi)發(fā)Internet 客戶應(yīng)用程序的工具集WinInet,與使用Socket 建立網(wǎng)絡(luò)連接的方法相比,它簡(jiǎn)化了訪問(wèn)互聯(lián)網(wǎng)絡(luò)的操作細(xì)節(jié)。利用WinInet可連接到遠(yuǎn)程站點(diǎn),訪問(wèn)HTML 頁(yè)面,通過(guò)FTP 上傳、下載文件或獲取文件目錄清單等。WinInet 的Windows CE版本類似于桌面平臺(tái)上的WinInet ,但有兩個(gè)重要的區(qū)別:一是在Windows CE 中,大多數(shù)callback 函數(shù)以同步方式處理,只有InternetReadFile和InternetQueryDataAvailable 具有同步和異步兩種操作方式;二是Windows CE 默認(rèn)支持Unicode 碼,所有WinInet 函數(shù)都要求寬字符變量[4]。
通過(guò)WinInet 實(shí)現(xiàn)網(wǎng)絡(luò)通信最常見(jiàn)的例子是利用HTTP 協(xié)議訪問(wèn)Internet 站點(diǎn)上的HTTP 頁(yè)面。其處理過(guò)程與桌面平臺(tái)上的情況一致:
1) 調(diào)用InternetOpen ,獲取Internet 句柄;
2) 調(diào)用InternetConnect ,為給定站點(diǎn)建立一個(gè)會(huì)話句柄;
3) 調(diào)用HttpOpenRequest ,打開(kāi)一個(gè)HTTP 請(qǐng)求句柄;
4) 調(diào)用HttpSendRequest ,發(fā)送一個(gè)指定的請(qǐng)求到HTTP 服務(wù)器;
5) 調(diào)用InternetReadFile ,從被HttpOpenRequest 所打開(kāi)的句柄中讀數(shù),下載信息;
6) 調(diào)用InternetCloseHandle ,關(guān)閉Internet 句柄。
3.2 遠(yuǎn)程訪問(wèn)服務(wù)RAS RAS 是一個(gè)用于連接遠(yuǎn)端設(shè)備的基于軟件的多協(xié)議路由器,也稱為RAS 客戶,對(duì)于桌面主機(jī),則稱為RAS 服務(wù)器。RAS 應(yīng)用程序常在設(shè)備端上執(zhí)行,并通過(guò)PPP/ SLIP 與服務(wù)器連接。WindowsCE對(duì)RAS 客戶提供了支持。盡管有許多標(biāo)準(zhǔn)的Win32 RAS 函數(shù),但這里僅允許通過(guò)串行電纜或撥號(hào)Modem 建立點(diǎn)對(duì)點(diǎn)的連接。在Windows CE 環(huán)境下,RAS 電話簿項(xiàng)目中包含有建立RAS 連接的必要信息,Windows CE 將其存貯在注冊(cè)表中。RAS 電話簿信息包括:撥打的電話號(hào)碼(含國(guó)家和地區(qū)代碼) 、當(dāng)前連接的IP 地址、網(wǎng)絡(luò)協(xié)議、用于建立連接的設(shè)備類型。用RAS 建立連接的步驟如下[4]: 1)確定呼叫的電話號(hào)碼;如果該號(hào)碼不在電話簿中, 則需要調(diào)用RasEnumEntries 函數(shù)查找。 2)RasDial 建立連接; DWORD RasDial (LPCTSTR lpszPhonebook , / / 電話簿文件的路徑和文件名指針 DWORD dwNotifierType , / / RasDial 事件的句柄類型 LPVOID lpvNotifier , / / RasDial 事件的句柄 LPHRASCONN lphRasConn / / 指向連接句柄類型變量) ;該函數(shù)的參數(shù)設(shè)置與桌面平臺(tái)上的設(shè)置不同,要求將lpszPhonebook 設(shè)置為NULL ,dwNotifierType 設(shè)置為0xFFFFFFFF。 3) 當(dāng)會(huì)話結(jié)束時(shí),用RasHangUp 終止連接。 DWORD RasHangUp ( HRASCONN hrasconn ) ; 3.3 WAP應(yīng)用 通常,Web Server需要在目標(biāo)機(jī)中置入文件系統(tǒng),但是,嵌入式系統(tǒng)往往會(huì)面臨有限的存儲(chǔ)資源問(wèn)題,文件系統(tǒng)會(huì)增加系統(tǒng)負(fù)擔(dān)。Windows CE的Web Server設(shè)計(jì)了一個(gè)Web頁(yè)的格式編輯器,可以將Java,GIF,JPEG,PDF,TIFF,HTML,ASCII轉(zhuǎn)換成標(biāo)準(zhǔn)C源文件,可以與其他的應(yīng)用程序鏈接,Web Server就在一個(gè)虛擬的文件系統(tǒng)下訪問(wèn)這些文件。 在開(kāi)發(fā)移動(dòng)通信產(chǎn)品時(shí)候,需要用WAP協(xié)議,Windows CE提供了一個(gè)WAP的解決方案,開(kāi)發(fā)起來(lái)非常方便。該協(xié)議棧可以支持任何標(biāo)準(zhǔn)的無(wú)線協(xié)議,包括GSM、UDP、GPRS等,協(xié)議棧包括WAE、WSP、WTP、WTLS、WDP等[3]。見(jiàn)圖3。 圖3 WAP應(yīng)用 此外,Windows CE還支持藍(lán)牙協(xié)議、RFCOMM協(xié)議、SDP協(xié)議、L2CAP協(xié)議等。 4 基于Windows CE嵌入式平臺(tái)創(chuàng)建 在硬件設(shè)計(jì)成功后,就需要?jiǎng)?chuàng)建一個(gè)基于Windows CE 的嵌入式平臺(tái),有了平臺(tái),用戶就可以利用Windows CE 的開(kāi)發(fā)工具在該平臺(tái)上進(jìn)行應(yīng)用程序的開(kāi)發(fā)。為了創(chuàng)建一個(gè)基于Windows CE 的平臺(tái),首先需要選擇一個(gè)Windows CE OS 配置,安裝或創(chuàng)建一個(gè)OAL 和設(shè)備驅(qū)動(dòng)程序,創(chuàng)建一個(gè)基于用戶配置的OS映像文件,并開(kāi)發(fā)一個(gè)將映像文件傳輸?shù)侥繕?biāo)設(shè)備的引導(dǎo)程序[1][2][3]。 首先,選擇一個(gè)Windows CE OS 配置,然后加入一個(gè)OAL 和設(shè)備驅(qū)動(dòng)程序。可以創(chuàng)建自己的OAL ,使用一個(gè)預(yù)先配置好的BSP(Board Support Package)或者創(chuàng)建自己的BSP。一個(gè)BSP 包含一個(gè)OAL 、設(shè)備驅(qū)動(dòng)程序和定制的硬件缺省的組件列表。 Windows CE Platform Builder3. 0 中包含有CEPC (CE-base PC) 的BSP 和HitachiD9000 硬件開(kāi)發(fā)平臺(tái)(ODO) ,系統(tǒng)開(kāi)發(fā)者也可以根據(jù)需要開(kāi)發(fā)自己的BSP 或者利用第三方開(kāi)發(fā)好的BSP。 5 結(jié)束語(yǔ) 在嵌入式系統(tǒng)中,網(wǎng)絡(luò)通信應(yīng)用越來(lái)越廣泛。選擇一個(gè)合適的實(shí)時(shí)操作系統(tǒng)是開(kāi)發(fā)嵌入式系統(tǒng)的關(guān)鍵。本文研究了Windows CE在網(wǎng)絡(luò)通信方面的開(kāi)發(fā)工作,今后還有許多問(wèn)題值得研究,包括在基于ARM的嵌入式應(yīng)用中如何移植Windows CE中的應(yīng)用程序,Windows CE的調(diào)試工具如何和DSP、MUC的調(diào)試工具配合使用等。 |
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論