在 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項。下面分別作個解釋:
config:在最後的makeimg階段,為romimage.exe提供一些生成wince image的配置屬性。該項是可選的,一般也在bsp中的config.bib檔案中定義。
modules:定義了一些會被打包到wince image中的模組或者檔案,比如dll,exe等。這些檔案會被romimage.exe標記為載入到ram中或者xip。我們可以在這裡新增自己的 wince應用程式或者模組,但是不要新增managed binaries,一般指.net的程式。
下面會詳細介紹上面的4大項:
a、 memory項
一般都在config.bib檔案中定義,開頭會有memory的字樣。這裡定義了為wince image以及其他模組預留的ram,同時也定義了wince可以使用的ram。具體格式如下:
memory
name start address memory size type
name:該記憶體區域的名字,必須是唯一的。
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的資料區域。
b、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。
romstart
指wince image在記憶體中的起始位址。
romsize
指wince image的大小。
romwidth
指資料匯流排的寬度。
romoffset
指定乙個偏移量來修改.bin檔案中的每乙個記錄的位址。一般用於rom中的.bin檔案載入到ram來執行的情況,主要是表示儲存.bin的位置和執行.bin的位置不一樣。
sre使romimage.exe產生乙個.sre檔案。預設值為off。
x86boot
定義是否插入一條跳轉指令,在x86復位向量位址的時候。
c、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工程中所需的一些檔案。
config.bib:該檔案描述了wince系統的記憶體的配置。
eboot.bib:該檔案描述了wince的eboot的記憶體的配置。
還有其他的一些bib檔案,在wince系統編譯後都會背拷貝到工程的release目錄下面。比如common.bib,ie.bib等。這些檔案列出了wince的元件相關的檔案,根據使用者訂製的系統,會被選擇性的打包到wince image中。
WinCE下,快速編譯驅動及BSP
wince下,快速編譯驅動及bsp 在wince下面,建立工程,然後編譯是需要花很長時間的。當我們第一編譯完工程以後,如果需要改我們的驅動或者bsp,我們是不需要重新編譯整個工程的 1.如果更改了driver,以wince6.0為例,我們可以在選單裡面選擇 build open release di...
WinCE下,快速編譯驅動及BSP
在wince下面,建立工程,然後編譯是需要花很長時間的。當我們第一編譯完工程以後,如果需要改我們的驅動或者bsp,我們是不需要重新編譯整個工程的 1.如果更改了driver,以wince6.0為例,我們可以在選單裡面選擇 build open release directory in build w...
WinCE下,快速編譯驅動及BSP
在wince下面,建立工程,然後編譯是需要花很長時間的。當我們第一編譯完工程以後,如果需要改我們的驅動或者bsp,我們是不需要重新編譯整個工程的 1.如果更改了driver,以wince6.0為例,我們可以在選單裡面選擇 build open release directory in build w...