在WinCE中使用的一個重要的文件就是 BIB文件,全稱 Binary Image Builder File。在 WinCE的編 譯過程中會用到 BIB文件,應該是在最後的 Makeimg階段。所有的 BIB文 件會被合併成 CE.bib文件,然後 Romimage.exe會根據 BIB文件 中的描述來決定哪些文件最終被包含到 WinCE image中。當然, BIB文件還決定了 WinCE設備內存的分配,其中定義了 WinCE image佔用哪塊內 存, Framebuffer佔用哪塊內存等 。
在 BIB文件中分爲 4大 項: MEMORY項, CONFIG項, MODULES項 和 FILES項。下面分別作個解釋:
MEMORY : 定 義了內存分配的相關設置,一般在 BSP中的 config.bib 文件中。
CONFIG : 在 最後的 Makeimg階段,爲 Romimage.exe提供一些生成 WinCE image的配置屬性。該項是可選的,一般也在 BSP中的 config.bib文件中定義。
MODULES : 定 義了一些會被打包到 WinCE image中的模塊或者文件,比如 dll, exe等。這些 文件會被 Romimage.exe標記爲加載到 RAM中或者 XIP。我 們可以在這裏添加自己的 WinCE應用程序或者模塊,但是不要添加 Managed Binaries,一般指 .NET的程序。
FILES : 定 義了一些操作系統會用到的其他的文件,比如字體文件,圖片等。這些文件也會在 WinCE運行的時候被加載到 RAM中。
下面會詳細介紹上面的 4大項:
1. MEMORY 項
一般都在 config.bib文件中定義,開頭會有 MEMORY的字樣。這裏定義了爲 WinCE image以及其他模塊預留的 RAM,同時也定義了 WinCE可以使用的 RAM。具體格式如下:
MEMORY
NAME Start Address Memory Size Type
NAME : 該內存區域的名字,必須是唯一的。
Start Address : 該內存區域的起始地址,用十六進制表示。
Memory Size : 該內存區域的大小,用十六進制表示。
Type : 內存區域的類型。包涵的多種類型如下。
類型值 |
描述 |
FIXUPVAR |
用於在 WinCE編譯的 Makeimg階 段,就初始化一個內核中的全局變量。 |
NANDIMAGE |
當創建了一個使用 BinFS的 image的時 候, NAND設備上的 WinCE kernel重定向到 RAM中 的區域,當系統訪問該區 域的時候, BinFS會負責訪問 Nand設 備上相應的位置,並返回數據給系統,實際上就是在 Nand設備上面實現了 XIP的功能。 |
RAM |
定義了被 WinCE系統使用的 RAM區 域,這塊內存必須是連續的,這裏有一點要注意就是從硬件的角度來說,這 塊內存不能跨越兩片 SDRAM,也就是說整個區域空間必須在一片硬件 SDRAM上。 |
RAMIMAGE |
定義了一塊內存區域用於加載 WinCE image,實際上 WinCE啓動以後, image會 被拷貝到這塊內存區域上面運行。 一個 image只能有一個連續的 RAMIMAGE區域。 |
RESERVED |
這塊內存區域會被預留出來,一般用於 Frambuffer或者是 DMA Buffer,或者是一塊共享內存用於 EBOOT傳遞參數 給 WinCE系統。 |
EXTENSION |
定義了一塊 WinCE image中的區域作爲 ROMHDR extension的數據區域。 |
2 . CONFIG 項
一般在 config.bib文件中定義,定義了一些額外的配置參數,其中一些對於 WinCE image來說也很重要。具體格式如下;
CONFIG
ITEM=Parameter
ITEM |
描述 |
AUTOSIZE |
允許未被使用的 WinCE image的 RAM被用作 WinCE系統的 RAM。默認值爲 ON。 |
COMPRESSION |
允許 Romimage.exe壓縮 WinCE image中的可寫入部分。默認值爲 ON。 |
BOOTJUMP |
定義了跳轉跳轉頁在 RAMIMAGE空間的地址。而不是默認情況下的 RAMIMAGE的首地址。默認值爲 NONE。 |
FSRAMPERCENT |
定義了文件系統使用的內存的百分比。默認值爲 0x80808080。 Byte 0:第一個 2MB中,每 1MB所包含 的 4KB的倍數。 Byte 1:第二個 2MB中,每 1MB所包含 的 4KB的倍數。 Byte 2:第三個 2MB中,每 1MB所包含 的 4KB的倍數。 Byte 3:剩下的內存中,每 1MB所包含的 4KB的倍 數。 |
KERNELFIXUPS |
定義了 Romimage.exe是否重新定向內核的可寫入區域。默認值爲 ON,內核的可寫入區域被重新定向到 RAMIMAGE的起始位置。 |
OUTPUT |
定義了最終生成的 image存放的路徑。默認爲 %_FLATRELEASEDIR%。 |
PROFILE |
定義了是否在 WinCE image中包含 profiler的結構和符號。默認值爲 OFF。 |
RESETVECTOR |
重新指定跳轉頁的位置,一般針對 MIPS芯片從 0x9FC00000開始引導的問題。 |
ROMFLAGS |
內核標記位,可以進行組合: 0x01表示禁用按需分頁。 0x02表示禁用完全內核模式,完全內核模式表示所有的線程都運行在內核模式。 0x10表示只信任 ROM MODULES中的模塊。 0x20表示停止刷新 TLB。 0x40表示 按 照 /base鏈接選 項中的地址加載 DLL。 |
ROMSTART |
指 WinCE image在內存中的起始地址。 |
ROMSIZE |
指 WinCE image的大小。 |
ROMWIDTH |
指數據總線的寬度。 |
ROMOFFSET |
指定一個偏移量來修改 .bin文件中的每一個記錄的地址。一般用於 ROM中的 .bin文件加 載到 RAM來運行 的情況,主要是表示存儲 .bin的位置和運行 .bin的位置不一樣。 |
SRE |
使 Romimage.exe產生一個 .sre文 件。默認值爲 OFF。 |
X86BOOT |
定義是否插入一條跳轉指令,在 x86復位向量地址的時候。 |
3 . MODULES 項和 FILES 項
該項列出了所有被包含在 WinCE image中的模塊以及文件,以及這些模塊和文件以什麼方式被加載到內存中 。具體格式如下:
MODULES
Name Path Memory Type
Name : 模塊的名字,比如一個 dll或者 exe文件的文件名。
Path : 路徑,一般都是 WinCE的工程的 Release目錄。
Memory : 指定該模塊被放在哪個區域,一般都是 NK區域。
Type : 定義了文件的類型。具體如下:
類型 |
描述 |
S |
系統文件。 |
H |
隱藏文件。 |
R |
只壓縮模塊的資源部分。 |
C |
壓縮模塊的所有部分。 |
D |
禁止調試。 |
N |
模塊是不可信任的。 |
P |
告訴 Romimage.exe不需要檢查 CPU的 類型。 |
K |
告訴 Romimage.exe必需固定該模塊的內核地址。有該標記的模塊只能被 LoadKernelLibrary函數加載。 |
X |
告訴 Romimage.exe對該模塊簽名。 |
M |
運行時加載整個模塊,不要按需分頁。 |
L |
告訴 Romimage.exe不要分離 ROM DLL。 |
一般 FILES項的 Type只支持 S, H, N, D幾個類型,而 MODULES項的 Type是都 支持的。
舉個例子吧:
INIT.EXE %_WINCEROOT%"RELEASE"INIT.EXE NK SH
MYDLL.DLL %_WINCEROOT%"RELEASE"MYDLL.DLL NK SHC
對於 BIB文件來說同樣支持“條件編譯”,我們可以通過設置環境變量來選擇性地將某些模塊打包到 WinCE image中。一般在 BSP中, 對於一些驅動模塊的環境變量我們 IF來進行條件判斷。而對於 WinCE的系統模塊來說,一般都是 SYSGEN變量,應該使用 @CESYSGEN IF來判斷。
我們在 BSP的開發中最常見的主要就是 eboot.bib, config.bib, platform.bib和 project.bib。下面簡單介紹一下:
project.bib : 該文件主要自創建的 WinCE工程中所需的一些文件。
platform.bib : 該文件包含了和硬件平臺相關的文件,主要以驅動程序爲主。
config.bib : 該文件描述了 WinCE系統的內存的配置。
eboot.bib : 該文件描述了 WinCE的 eboot的內存的配置。
還有其他的一些 bib文件,在 WinCE系 統編譯後都會背拷貝到工程的 release目錄下面。比如 common.bib, ie.bib等。 這些文件列出了 WinCE的組件相關的文件,根據用戶訂製的系統,會被選 擇性的打包到 WinCE image中。