摘 要: 創(chuàng)建和定制Windows CE .net嵌入式操作系統(tǒng)的方法。此方法對于Windows CE嵌入式平臺的研究、開發(fā)和定制具有良好的借鑒作用。
關(guān)鍵詞: Windows CE 嵌入式操作系統(tǒng) 定制 裁剪
Microsoft Windows CE .net是Windows CE 3.0的后續(xù)產(chǎn)品,它不僅是一個功能強(qiáng)大的實時嵌入式操作系統(tǒng),而且提供了眾多開發(fā)調(diào)試工具,允許用戶利用它快速開發(fā)新一代的智能化設(shè)備。借助于完善的操作系統(tǒng)功能和開發(fā)工具,Windows CE .net為開發(fā)人員提供了構(gòu)建、調(diào)試和部署基于Windows CE .net定制設(shè)備所需的一切特性。平臺開發(fā)工具Platform Builder是一個完全集成的開發(fā)環(huán)境(IDE),并且包括一個軟件開發(fā)工具包(SDK)導(dǎo)出工具。
平臺向?qū)?Platform Wizard)允許開發(fā)人員根據(jù)將要創(chuàng)建設(shè)備的類型簡便快捷地建立新的平臺。該向?qū)峁┝?2個預(yù)建配置,以便為設(shè)備設(shè)計提供一個基礎(chǔ)。這些設(shè)備包括:數(shù)字媒體接收設(shè)備、企業(yè)終端、企業(yè)Web Pad、網(wǎng)關(guān)、工業(yè)控制設(shè)備、Internet設(shè)備、IP電話、移動手持設(shè)備、移動電話、機(jī)頂盒、微內(nèi)核、Windows瘦客戶機(jī)。
由于微軟對嵌入式操作系統(tǒng)研發(fā)力量的增強(qiáng),CE的優(yōu)勢越來越明顯:實時處理能力不斷增強(qiáng)(在使用Pentium 166 MHz處理器時,ISR延遲平均為2.8ms,IST延遲平均為17.9ms)、強(qiáng)大的多媒體能力、可伸縮的無線技術(shù)支持、針對小內(nèi)存體積占用進(jìn)行優(yōu)化(最小200KB)、具有適應(yīng)性的可定制用戶界面、豐富的設(shè)備驅(qū)動程序、強(qiáng)大的應(yīng)用程序開發(fā)等。因此,Windows CE在嵌入式系統(tǒng)的市場占有率越來越高。
1 創(chuàng)建Windows CE .net的主要步驟
創(chuàng)建一個基于Microsoft Windows CE .net的操作系統(tǒng),必須完成下面幾個主要步驟:(1)選擇一個標(biāo)準(zhǔn)的開發(fā)版(SDB)作為模板,創(chuàng)建一個Windows CE的平臺。(2)使用備選的工程及目錄中列舉的特色,對平臺進(jìn)行定制。(3)編譯并Build鏡像文件(image),并將它下載到SDB。采用在Platform Builder集成開發(fā)環(huán)境中的Debug工具調(diào)試平臺。(4)為特定的目標(biāo)設(shè)備創(chuàng)建一個boot loader以及板支持包(BSP)。(5)用新的BSP重新編譯(Rebuild)操作系統(tǒng)鏡像,并將它下載進(jìn)入目標(biāo)設(shè)備,調(diào)試這個平臺。(6)當(dāng)平臺創(chuàng)建完畢的時候,輸出軟件開發(fā)包(SDK),以便在開發(fā)平臺應(yīng)用程序時使用。
在一個典型的平臺開發(fā)方案中,可以首先下載自己的操作系統(tǒng)鏡像到硬件平臺,例如基于PC的Windows CE硬件開發(fā)平臺(CEPC)。Platform Builder包括了boot loaders、CEPC板支持包以及許多別的硬件開發(fā)平臺。在硬件平臺上精簡而且調(diào)試好開發(fā)平臺后,就可以將它應(yīng)用于自己的特定目標(biāo)設(shè)備。在下載鏡像到目標(biāo)設(shè)備之前,用戶必須創(chuàng)建一個boot loader以及OEM適配層OAL。OAL是指操作系統(tǒng)kernel和目標(biāo)平臺之間的連接層。一旦完成了平臺創(chuàng)建,就可以輸出一個SDK,應(yīng)用程序開發(fā)人員可以將此SDK安裝到Microsoft eMbedded Visual C++ 4.0或者M(jìn)icrosoft Visual Studio.Net的Smart Device Extensions等開發(fā)系統(tǒng)中,用以編寫基于該平臺的應(yīng)用程序。圖1描述了采用Platform Builder創(chuàng)建一個基于Windows CE平臺的過程。

2 定制適合自己的操作系統(tǒng)
由于微軟提供了良好的平臺向?qū)?本文不再對這些過程進(jìn)行敘述,僅對創(chuàng)建過程中的關(guān)鍵問題進(jìn)行說明。
2.1 自動載入應(yīng)用程序
很多設(shè)備需要在操作系統(tǒng)啟動時,自動載入自己的應(yīng)用程序。有的CE系統(tǒng)本身就沒有標(biāo)準(zhǔn)的CE界面,更需要自動加載自己的應(yīng)用程序作為設(shè)備啟動界面。需要在操作系統(tǒng)啟動時加載的文件一般放在注冊表的鍵[HKEY_LOCAL_MACHINEinit]下面,例如:[HKEY_LOCAL_MACHINEinit]
″Launch50″=″explorer.exe″
″Depend50″=hex:14,00,1e,00
這些文件是系統(tǒng)啟動時運(yùn)行的程序。其中Launch后的數(shù)字越小,運(yùn)行越早;Depend的值說明這個程序要依賴前面的哪些程序。一般有Launch10 SHELL.EXE、Launch20 DEVICE.EXE、Launch30 GWES.EXE、Launch50 EXPLORER.EXE四個模塊需要啟動。
以上這些模塊都是標(biāo)準(zhǔn)的用戶級進(jìn)程,因此可以在這個階段添加自己的應(yīng)用程序,也可以在DEVICE.EXE之后、GWES.EXE之前啟動一個任意的應(yīng)用程序App.exe。但是該應(yīng)用程序必須沒有調(diào)用GWES.EXE和EXPLORER.EXE中定義的圖形和Windows資源管理器的功能,否則該應(yīng)用程序不能正常運(yùn)行。EXPLORER.EXE是CE標(biāo)準(zhǔn)的Shell,在其之前和之后啟動一個具有標(biāo)準(zhǔn)用戶接口的應(yīng)用程序時都會出現(xiàn)問題。EXPLORER并不能處理在其之前創(chuàng)建的可見的、頂級的窗口應(yīng)用。由于EXPLORER.EXE裝載之后需要執(zhí)行某些特定的初始化操作,因此在其后隨即啟動的帶有用戶接口的應(yīng)用也不能正常執(zhí)行。但在其之前和之后可以啟動沒有用戶接口的應(yīng)用程序,例如通信監(jiān)控程序。
EXPLORER.EXE執(zhí)行之后,啟動過程從注冊表切換到文件系統(tǒng)。在初始化完桌面和任務(wù)欄窗口之后,它會在目錄windowsstartup中尋找任何可以執(zhí)行的應(yīng)用程序或其快捷方式,因此可以把需要開機(jī)啟動的應(yīng)用或其快捷方式放在該目錄中。方法如下:
在platform.dat文件中加入以下程序:
Directory(″WindowsStartUp″):-File(″sample.exe″,
″windowssample.exe″)
其中:路徑″WindowsStartUp″代表啟動菜單,路徑″WindowsPrograms″代表程序菜單。
2.2 改變盤符名稱
如何改變硬盤、電子盤、CF卡等的盤符名稱,是平臺必須考慮的問題,因為有些應(yīng)用程序?qū)τ诒P符的名稱要求是固定的。
以改變CF盤盤符為例,也可以改變CF ATAPI驅(qū)動的注冊表設(shè)置,其位置為:
[HKEY_LOCAL_MACHINESystemStorageManager
ProfilesATA]
″Name″=″ATAPI Device″
″Folder″=LOC_STORE_HD_FOLDER
將LOC_STORE_HD_FOLDER改為需要的盤符,例如“Compact flash”等。
2.3 設(shè)置存儲設(shè)備
任何嵌入式設(shè)備都需要存儲設(shè)備存儲信息。由于CF卡之外的其他設(shè)備都有比較明確的驅(qū)動模塊,所以這里僅對加入CF卡設(shè)備進(jìn)行說明。如果要加入CF設(shè)備,首先需要加入Storage Devices/Compact Flash/PC Card Storage(ATADISK)特色,這是必要條件。另外還需要PCMCIA支持,因為CF卡接口是PCMCIA的擴(kuò)展。如果PCMCIA控制器不屬于微軟支持之列,則還需要編寫驅(qū)動程序來驅(qū)動特定的硬件。不要加入USB特色,因為它與CF卡或者ATAPI存儲器沒有關(guān)系。
2.4 設(shè)置網(wǎng)絡(luò)適配器
網(wǎng)絡(luò)化是嵌入式設(shè)備的發(fā)展方向,這里以Intel 82559ER單口網(wǎng)卡為例進(jìn)行說明。
首先用一個文本編輯器對CONFIG.BIB和PLATFORM.REG文件進(jìn)行修改。網(wǎng)絡(luò)適配器需要它自己單獨(dú)地預(yù)留內(nèi)存,這些信息在文件CONFIG.BIB中表示,其大小應(yīng)該符合默認(rèn)大小(大約120KB),而且不能和其他預(yù)留的內(nèi)存相沖突。第二,網(wǎng)絡(luò)適配器也需要在文件PLATFORM.REG中加入注冊表信息,其中IP和網(wǎng)關(guān)的設(shè)置可以根據(jù)實際應(yīng)用進(jìn)行修改。第三,修改CE物理地址注冊表數(shù)值與在CONFIG.BIB文件描述的內(nèi)存范圍的基地址相符合。在Windows CE .net系統(tǒng)中,PCI插槽不再需要通過注冊表設(shè)置,系統(tǒng)可以通過列舉PCI總線得到這些信息。同樣,也不需要手動設(shè)置網(wǎng)絡(luò)地址綁定、路由和連接等信息,這些都由操作系統(tǒng)負(fù)責(zé)處理。
下面是將一塊Intel Pro 10/100單口網(wǎng)絡(luò)適配器加入系統(tǒng)的部分程序。


2.5 調(diào)試控制面板程序
如何調(diào)試Windows CE .net控制面板程序(Control Applet),對增強(qiáng)Windows CE .net的功能十分重要。Windows CE的控制面板程序是動態(tài)鏈接庫(DLLS),可以通過三個步驟進(jìn)行調(diào)試:(1)創(chuàng)建一個.exe文件去加載自己的.cpl文件。(2)在開發(fā)環(huán)境中Project->Settings->Debug設(shè)置“Executable for debug session”和“Remote executable path and file name”為該.exe文件名。(3)設(shè)置“Additional Dll′s”參數(shù)為要加載的.cpl或.dll文件。
當(dāng)然,也可以通過這個方法來調(diào)試別的.dll文件。
2.6 編寫設(shè)備驅(qū)動
編寫設(shè)備驅(qū)動的最好辦法是在一個同類設(shè)備的驅(qū)動上進(jìn)行改造。
(1)復(fù)制一個設(shè)備的驅(qū)動,修改它的文件夾,換成需要的名字,這里包含*.c、*.h文件和源文件,更換*.c、*.h的內(nèi)容,相應(yīng)更換源文件的內(nèi)容。
(2)在Dir文件中加入自己的文件夾名字。
*.c、*.h文件需自己生成,不會自動生成。source dir file可以用一些生成文件的程序生成。
3 下載和調(diào)試操作系統(tǒng)
3.1 準(zhǔn)備工作
確認(rèn)CE目標(biāo)機(jī)上是否裝有MS-DOS 6.22。若沒有,則按照以下步驟制作啟動軟盤:(1)準(zhǔn)備一張空的軟盤。(2)制作MS-DOS 6.22啟動軟盤。(3)在BIOS中設(shè)置計算機(jī)從軟盤驅(qū)動器啟動,使用軟盤啟動您的計算機(jī),進(jìn)入MS-DOS 6.22。(4)順利進(jìn)入到MS-DOS 6.22操作系統(tǒng)后,MS-DOS 6.22啟動軟盤(以下簡稱啟動軟盤)制作完成。
3.2 制作CE目標(biāo)機(jī)啟動硬盤/CF卡/DOC
(1)為CE目標(biāo)機(jī)的硬盤/CF卡/DOC建立一個FAT16的主引導(dǎo)分區(qū)(注:使用啟動軟盤中的FDISK工具)。
(2)將主引導(dǎo)分區(qū)格式化,并創(chuàng)建系統(tǒng)引導(dǎo)文件。例如:從啟動軟盤啟動計算機(jī)后,使用“A:FORMAT C:/S”命令格式化目標(biāo)硬盤/CF卡/DOC。
(3)將啟動軟盤上的所有文件復(fù)制到目標(biāo)硬盤/CF卡/DOC。
(4)在文件Autoexec.bat中加入“loadcepc nk.bin”,在文件Config.sys中加入“device=himem.sys”。將Himem.sys(ver 6.22)、loadcepc.exe拷貝進(jìn)目標(biāo)盤。
(5)新建并編輯bootcepc.cnf文件,作為啟動文件,并加入以下內(nèi)容:
N:NK BIN ;標(biāo)記N:參數(shù)說明Loadcepc要加載的BIN文件名稱。
S:BOOTCEPC.bmp ;標(biāo)記S:參數(shù)說明要顯示的圖片名稱。
L:640x480x16 ;標(biāo)記L:參數(shù)為Windows CE啟動后的顯示分辨率。
如果通過網(wǎng)絡(luò)或者串口進(jìn)行調(diào)試,也可以加入下面的參數(shù):
B:3 ;標(biāo)記B:表示連接的波特率,在串口連接時使用。
E:0:0:192.168.0.124 ;標(biāo)記E:參數(shù)為網(wǎng)絡(luò)下載指定本機(jī)IP地址。
(6)在BIOS中設(shè)置計算機(jī)從目標(biāo)硬盤/CF卡/DOC啟動。計算機(jī)使用目標(biāo)硬盤/CF卡/DOC啟動到MS-DOS6.22后,制作啟動硬盤/CF卡/DOC完成。
3.3 啟動系統(tǒng)進(jìn)行調(diào)試
(1)將影像文件NK.BIN復(fù)制到CE目標(biāo)機(jī)硬盤/CF卡/DOC引導(dǎo)分區(qū)。(2)重新啟動計算機(jī),使用CE目標(biāo)機(jī)硬盤/CF卡/DOC引導(dǎo)系統(tǒng)。(3)調(diào)試操作系統(tǒng)。
4 評估并發(fā)布操作系統(tǒng)
4.1 定制啟動畫面
如果要發(fā)布一個操作系統(tǒng),就要改造其外觀,加入設(shè)備名稱、單位圖標(biāo)等標(biāo)識。首先使用Photoshop或CorelDraw等圖形制作工具制作自己的BMP圖片,推薦圖片分辨率為640*480和800*600,顏色深度為256色和24位真彩色;然后將圖片復(fù)制到存放操作系統(tǒng)鏡像的存儲設(shè)備中,替換原有的標(biāo)準(zhǔn)界面文件;最后重新啟動計算機(jī)。
4.2 設(shè)置注冊機(jī)制
軟件開發(fā)的成果需要保護(hù),一般采用注冊機(jī)制。注冊序列號是根據(jù)每臺設(shè)備硬件情況生成的。在提示注冊頁面上,根據(jù)每臺設(shè)備的硬件組成,會出現(xiàn)數(shù)量不一的序列號碼。一個最簡單的辦法是得到CPU ID或者存儲設(shè)備(如硬盤的序列號),隨機(jī)生成一個序列號,根據(jù)序列號經(jīng)過加密算法解算注冊碼。一般可以通過kenealioctrl、GetVersionEx、GetSystemInfo等函數(shù)獲得系統(tǒng)信息。具體用哪些數(shù)據(jù),可以根據(jù)需要來確定。注冊軟件做好后還應(yīng)該和操作系統(tǒng)集成。啟動操作系統(tǒng)的同時啟動輸入序列號,只有輸入了正確的序列號后才能正確使用。因為操作系統(tǒng)的鏡像文件一般都是只讀的,所以有些人將注冊信息寫入注冊表中,實際是不可靠的,最好將其加密存入文件中的某個部位。
4.3 集成嵌入式軟件
基于32位CPU的WinCE設(shè)備嵌入式軟件由操作系統(tǒng)和應(yīng)用程序(AP)二個部分組成。在Windows CE中體現(xiàn)為NK.bin和應(yīng)用程序包AP,也可將AP集成到NK.bin中。這二種形式各自具備它們的優(yōu)缺點,如表1所示。

在可能的情況下,嵌入式軟件或者應(yīng)用程序應(yīng)該集成在操作系統(tǒng)中,防止更改。當(dāng)然,也可以單獨(dú)存放。
參考文獻(xiàn)
1 Boling D.Microsoft Windows CE程序設(shè)計.北京:北京大學(xué)出版社,1999
2 Goggin T A.Windows CE高級開發(fā)指南.北京:電子工業(yè)出版社. 2000
3 Microsoft.Windows CE通信指南.北京:希望電子出版社,1999
4 Microsoft.How to Write and Use ActiveX Controls for Windows CE.http://www.microsoft.com/embeded.2003
