作者: 文斌
首頁: 文斌程式網 http://www.wenbinweb.com
經過前兩次的邊做邊學,我們已經建立並可以自由修改自己的平台了,這次我平來補充一點理論知識,以便加深對CE產生過程的瞭解。在此之前,需要說明的是CE的目錄結構是很龐大而複雜的,在以後的工作中很多事情會取決於你對目錄結構的瞭解程度,在此,CE5的檔案夾結構未發生大的改變,因此想瞭解此部分內容的朋友可直接參閱本人的《WinCE實驗教程》相關部分。與CE4稍有不同的是在CE5中你自己的平台不在存放於Public檔案夾中了,而是專門有一個PBWorkspaces的檔案夾,這樣更加方便管理且結構清晰了。
我們重點要說的還是CE的產生過程,即你在編譯平台的時候Platform Builder到底為你做了些什嗎?
實際上,IDE在產生CE的過程當中共經曆了四個階段,分別是Sysgen、Build、Copy、Make,即組件產生階段,編譯階段,Release檔案夾複製階段和鏡像打包階段。下面我們就分階段來說明一下。
在Public檔案夾下是CE為我們提供的可用組件,我們定製自己的平台是通過Platform Builder做的選擇就是從這裡面選擇了一部分需要的組件。在這些檔案夾中,包含了所有可用的庫檔案,標頭檔,DEF檔案,當然也包括了所有可匯出的函數說明。在Sysgen階段要做的就是從中選擇我們自己的平台需要的標頭檔,庫檔案和匯出函數以建立我們自己平台需要的組件。它所完成的標頭檔會以C++注釋的方式加以標記,這樣它就可以選擇需要的部分來匯出,最後把所有需要的庫進行連結就得到了我們自己平台所需要的東西了,它就放在Wince500/pbworkspaces/%ProjectName%/WINCE500/%CPU_TYPE%_x86/cesysgen檔案夾下。
經過上一階段後,需要的標頭檔庫檔案就準備好了,但這隻是系統組件部分,我們的平台還有各種裝置驅動程式等其他的東西,這些就要在Build階段來完成了。
整個Build階段都是在圍繞著DIRS檔案和SOURCES檔案來進行,前者決定了哪些檔案夾要被編譯,後者決定了哪些檔案要被如何編譯,也就是說,此階段要完成的就是各種來源程式的編譯過程。下面我們就重點看一下這兩種檔案的內容。
DIRS檔案可以在很多檔案夾中找到,它列出了要參與編譯的子檔案夾,內容大體如下:
DIRS_CE=/
ceddk /
regenum /
pcibus /
這樣,build.exe在編譯的時候就可以通過它來逐層找到要參與編譯檔案夾了。至於其中的OPTIONAL_DIRS、DIRS_NTANSI等項目的含義可以通過協助查到。
同樣,SOURCES檔案對參與編譯的來源程式的編譯方式做了規定,例如通過TARGETNAME規定編譯後的名稱,通過TARGETTYPE規定編譯的類型是EXE,DLL還是LIB,通過DLLENTRY規定DLL檔案的進入點,通過INCLUDES規定編譯過程中需要的標頭檔,通過SOURCES規定參與編譯的源檔案等等。這些宏的用法在協助文檔裡有更加明細的說明,在這裡只要理解這種編譯機制就可以了。
接下來,所有的編譯都有完成了,DLL也好,EXE也好,都是目標平台自有的了,下一步就是一個Copy過程,也就是將你的專案檔夾下的WINCE500檔案夾下的內容複寫到RELEASE檔案夾下,這步就沒什麼可說的了。
最後一步就是打包了,即將已經準備好的目標平台的檔案打包成NK.bin這樣的作業系統鏡像檔案。在這個過程當中,一個完成了檔案合并、註冊表壓縮、資源檔替換和打包四個子過程。
檔案合并階段重點對以下檔案進行合并:
--所有的.bib檔案合并成CE.BIB
--所有的.reg檔案合并成REGINIT.INI
--所有的.dat檔案合并成INITOBJ.DAT
--所有的.db檔案合并成INITDB.INI
知道這幾個合并以後便於你在RELEASE下尋找你做的修改是否確實被置入了目標平台。
註冊表壓縮會將REGINIT.INT檔案壓縮成DEFAULT.FDF檔案。
資源替換就是將EXE或DLL中的資源替換成本地語言如簡體中文。
接下來才是把這些CE.BIB等二進位檔案製作NK.BIN檔案,這才是我們需要的檔案,不過在CE5中好像可以在項目設定中改變這個檔案的名稱,讀者可以自己試試。
以上說的這些編譯過程,在Platform Builder中的Build OS菜單下分得比較明確,這一點比CE4要好得多,你可以自己掌握讓它單獨執行某一步驟。如果你修改了某個組件的來源程式,也可以右擊這一組件然後單獨編譯此組件,最後再產生Image,總之,靈活性是比較不錯的了。
同時,經過以上的分析也可以看出來,Platform Builder這個IDE在協助產生CE時基本上是依賴於檔案夾結構和那些文字檔以及批次檔的,因此,對於檔案夾結構還是要盡量的熟悉。同時也證明那些總說批次檔沒用的人的無知,在微軟的作業系統和開發工具中,批次檔是至關重要的,說它無用的人只是由於自己的水平不夠而已。
好了,這次我們學得多做得少,不過這些知識還是有必要瞭解的,別忘了對照你的檔案夾結構來學習哦!