Win CE下BSP中的bib檔案學習

2021-06-01 09:31:07 字數 4094 閱讀 9811

在 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...