Platform Builder

上一章所說,當用PB的"定製平臺嚮導"選取了一個平臺的所有特徵(feature)後,接下來的工作就是編譯了。即使你從來未曾編譯過,你也能想象得到編譯的時間一定很長。因爲PB是在編譯一個操作系統,而非一個應用程序。當然,越快的硬件環境編譯的速度就越快。一般我編譯一個內核需要5分鐘到10分鐘之間。

  在編譯之前你可能還要對這個CE平臺的某些特徵進行修改。爲此,你必須熟悉PB的操作環境。下面圖1是PB打開一個平臺工程文件的界面。

  

  圖一 PB主界面

  圖一中數字所指示的內容描述如下:

  "Build"工具欄。此工具欄上按鈕、下拉框都用於編譯、調試。數字1指向的下拉框是編譯指令集,可以指定不同的指令集來編譯CE平臺或者應用程序。

  "Workspace"窗口。此窗口有三個子視圖,分別爲FeatureView、ParameterView、FileView。當打開一個平臺工程文件後,FeatureView顯示這個平臺所有的特徵。如設備驅動程序、各個軟件組件等。ParameterView顯示所有平臺通用的配置文件和當前平臺的配置文件,這些配置文件擴展名爲*.bib、*.reg、*.db、*.dat。FileView顯示在當前CE平臺上建立的應用程序源碼文件、資源文件、資源腳本文件等。也就是說如果在當前CE平臺上建立一個應用程序工程,那麼所有的文件都在FileView中顯示出來。類似EVC、VC的"Workspace"窗口中的"FileView"。注:關於FeatureView和ParameterView包含的內容在以後的文章中講解。

  "Output"窗口。用於顯示輸出信息。類似EVC、VC的"Output"。

  "Target"窗口。此工具欄上按鈕分別用於下載內核文件到模擬器或實際平臺、連接、斷開。當一個CE平臺編譯好了之後,就可以按下載按鈕將平臺(nk,bin)文件下載到模擬器上運行。

  "Catalog"窗口。這個窗口包含所有的CE支持的特徵。

  狀態欄圖標。位於狀態欄最右端的四個圖標中,最左邊的圖標表示當前下載狀態。另外三個表示三種服務狀態,這三種服務運行在目標機(target device)上。在這裏就是模擬器。

  要向當前CE平臺添加特徵,首先在右邊"Catalog"窗口中找到要添加的特徵,找到後移動鼠標光標到此特徵上,然後單擊右鍵,在彈出的菜單中單擊"Add to Platform",PB就將此特徵添加到左邊當前CE平臺中。如果無反應說明此特徵已經被添加進去了。要刪除當前CE平臺中某一個特徵,移動鼠標光標到此特徵上,單擊右鍵,在彈出的菜單中選擇"Delete"。並非所有的特徵都可以任意刪除,因爲有些特徵是彼此關聯的。這部分將在以後的文章中講述。

  對平臺進行一些基本的設置,打開菜單"platform"-"Settings",檢查"Locale"選項卡中地區和語言設置。這一點很重要,它決定着編譯的平臺採用的語言種類。再在"Environment"選項卡中添加"IMGRAM64"環境變量,值設置爲1。單擊"OK",PB開始將此環境變量加入到平臺中。單擊工具欄上"Build Platform"按鈕開始編譯。

  在講述編譯過程前必須先了解環境變量以及如何讀取和設置環境變量。一個環境變量包含了一個CE操作系統某一方面的信息。例如一個驅動程序、一個路徑、一個配置文件、一個特徵等。當PB編譯CE平臺時,先做的工作就是收集所有的環境變量供編譯器使用。讀取和設置環境變量的最好方法是單擊PB菜單"Build"-"Open Build Release Directory",PB會彈出一個控制檯窗口,也就是命令行外殼。鍵入"set"命令,當前平臺所有的環境變量就顯示出來了,不過要多屏顯示。爲了看清楚每個變量的值,可以鍵入"set |more",這樣就可以分屏查看了。還可以將所有環境變量信息保存到硬盤上,比如鍵入"set >C:envi.txt"。要查看單個環境變量值,鍵入"set 環境變量名"。要修改原環境變量的值鍵入"set 環境變量名=值"。有些環境變量無需鍵入值就可以達到修改目的。比如前綴爲"BSP_"和"SYSGEN_"的變量,鍵入"set 環境變量名="就取消了這個環境變量。在IDE中也可以修改環境變量,如上面所說的設置"IMGRAM64"的值,就是在IDE中修改的。利用環境變量也可以添加和刪除特徵,如BSP變量。BSP變量分兩種,一種以BSP_NO爲爲前綴,一種以BSP爲前綴。以BSP_NO爲前綴表示當前平臺不支持某一特徵,以BSP爲前綴表示支持這一特徵。例如BSP_SERIAL2表示此CE平臺支持串口2;BSP_NOSERIAL表示此CE平臺不支持串口。如果在PB的"catalog"中找不到要添加的特徵,可以通過設置BSP變量來實現。具體BSP環境變量參見CE幫助文檔。

  下面講述整個編譯過程中PB所做的工作:

  執行cebuild.bat批處理文件。

  cebuild.bat調用sysgen.bat批處理文件。

  sysgen.bat調用cesysgen.bat批處理文件,cesysgen.bat負責在*.wce文件中搜索用戶選擇的特徵,然後形成一系列環境變量。之後PB會顯示這些變量,下面幾個步驟就是顯示收集的變量。

  產生SYSGEN變量。每個SYSGEN變量對應一個特徵。

  產生CE_MODULE、COREDLL_COMPONENTS、FILESYS_COMPONENTS、DEVICE_COMPONENTS、GWE*_COMPONENTS、DCOM_MODULES、FONTS_COMPONENTS等環境變量。其中每個環境變量包含某一個特徵具體的內容。從環境變量名稱就可以看出來是哪種特徵。

  對_DEPTREES環境變量指定的每個目錄分別執行sysgen.bat批處理。_DEPTREES這個變量的值是一些目錄名(例如DCOM、IE、SERVERS、DIRECTX、WCESHELLFE等),這些目錄名位於%WINCEROOT%public。如果安裝PB v4.1時默認安裝路徑,那麼此目錄路徑爲C:WINCE410Public。

  編譯BSP。因爲我們採用的BSP是Emulator,所以PB會編譯%WINCEROOT%PlatformEmulator目錄下三個子目錄KERNEL、DRIVERS、GWE中的源碼文件。

  清除_FLATRELEASEDIR環境變量指定的目錄下的所有文件、子目錄。假如我們定製的平臺路徑爲C:Emulator,那麼這個環境變量的值爲C:EmulatorRelDirEmulator_X86Release。

  複製%_PROJECTROOT%所有文件到_FLATRELEASEDIR。

  根據本地地區環境變量,尋找所有與本地語言相關的*.str文件複製到_FLATRELEASEDIR中。*.str文件中包含了字符串資源,將字符串與ID關聯。在_FLATRELEASEDIR目錄下你可以看到以地區碼爲目錄名的子目錄。

  處理NLS(國家語言支持)數據。

  執行fmerge.exe。合併所有*.bib文件爲一個文件ce.bib,合併所有*.reg文件爲一個文件reginit.ini。

  執行cebuild.bat批處理文件。

  執行fmerge.exe。合併所有*.db文件爲一個文件initdb.int,合併所有*.dat文件爲一個文件initobj.dat。

  運行regcomp.exe壓縮reginit.ini。

  運行txt2ucde.exe。將整個CE平臺涉及到的所有字符串轉成unicode碼。

  運行res2exe.exe。將所有*.dll、*.exe、*.cpl文件中的資源更新。資源更新部分主要和語言相關。

  運行Romimage.exe。將所有文件合併壓縮成一個文件nk.bin(默認文件名)。

  整個編譯過程被調用的批處理文件和EXE文件主要包括:cebuild.bat、sysgen.bat、cesysgen.bat、nmake.exe、txt2ucde.exe、makeimg.exe、fmerge.exe、regcomp.exe、res2exe.exe、romimage.exe、build.exe。在這裏聲明一點,我不保證所講述的PB的編譯過程一定是準確無誤的。從總體上講PB所做的工作就是這樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章