Platform Builder實踐之編譯

2021-04-22 18:52:23 字數 3352 閱讀 3093

接上一章所說,當用

pb的「定製平台嚮導」選取了乙個平台的所有特徵(feature)後,接下來的工作就是編譯了。即使你從來未曾編譯過,你也能想象得到編譯的時間一定很長。因為pb是在編譯乙個

作業系統

,而非乙個應用程式。當然,越快的

硬體環境編譯的速度就越快。一般我編譯乙個核心需要5分鐘到10分鐘之間。

在編譯之前你可能還要對這個ce平台的某些特徵進行修改。為此,你必須熟悉pb的操作環境。下面圖1是pb開啟乙個平台工程檔案的介面。

圖1 pb主介面

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

1、「build」工具欄。此工具欄上按鈕、下拉框都用於編譯、除錯。數字1指向的下拉框是編譯指令集,可以指定不同的指令集來編譯ce平台或者應用程式。

2、「workspace」視窗。此視窗有三個子檢視,分別為featureview、parameterview、fileview。當開啟乙個平台工程檔案後,featureview顯示這個平台所有的特徵。如

裝置驅動

程式、各個軟體元件等。parameterview顯示所有平台通用的配置檔案和當前平台的配置檔案,這些配置擴充套件名為*.bib、*.reg、*.db、*.dat。fileview顯示在當前ce平台上建立的應用程式原始碼

檔案、資源檔案、資源指令碼檔案等。也就是說如果在當前ce平台上建立乙個應用程式工程,那麼所有的檔案都在fileview中顯示出來。類似evc

移動滑鼠

游標到此特徵上,然後單擊右鍵,在彈出的選單中單擊「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:/wince410/public。

編譯bsp。因為我們採用的bsp是emulator,所以pb會編譯%winceroot%/platform/emulator目錄下三個子目錄kernel、drivers、gwe中的原始碼檔案。

清除_flatreleasedir環境變數指定的目錄下的所有檔案、子目錄。假如我們定製的平台路徑為c:/emulator,那麼這個環境變數的值為c:/emulator/reldir/emulator_x86release。

複製%_projectroot%/所有檔案到_flatreleasedir。

根據本地地區環境變數,尋找所有與本地語言相關的*.str檔案複製到_flatreleasedir中。*.str檔案中包含了字串資源,將字串與id關聯。在_flatreleasedir目錄下你可以看到以地區碼為目錄名的子目錄。

處理nls(國家語言支援)資料。

執行fmerge.exe。合併所有*.bib檔案為乙個檔案ce.bib,合併所有*.reg檔案為乙個檔案reginit.ini。

執行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所做的工作就是這樣。

Platform Builder實踐之檔案系統方案

隨著ce的發展,物件儲存 object store 的作用越來越小,而大容量的永久儲存裝置被越來越多地採用,這一章將針對ce的檔案系統闡述相關的知識,讓pb開發者除了能夠加入對永久儲存裝置的支援,還能做一些優化。記得在以前講過的文章中提到了如何在pb中向定製的核心加入對硬碟 光碟機的支援 包括ata...

Platform Builder實踐之編譯

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

Platform Builder實踐之檔案系統

隨著ce的發展,物件儲存 object store 的作用越來越小,而大容量的永久儲存裝置被越來越多地採用,這一章將針對ce的檔案系統闡述相關的知識,讓pb開發者除了能夠加入對永久儲存裝置的支援,還能做一些優化。記得在以前講過的文章中提到了如何在pb中向定製的核心加入對硬碟 光碟機的支援 包括ata...