在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中。
wince bib檔案合成
在wince中,reg檔案和bib檔案是兩種重要的檔案,它影響了整個的ce系統。在解析的過程中,原始的common.bib,config.bib,project.bib,platform.bib等檔案會合成為ce.bib,而原始的common.reg,project.reg,platform.reg...
C C 檔案操作相關資料
c ofstream和ifstream詳細用法 c 程式設計中對緩衝區的理解 c語言檔案操作 linux系統下c 語言進行檔案操作 linux系統下,一切皆檔案,只有一種檔案系統,因此二進位制方式和文字方式 ascii碼方式 不存在區別。windows系統下c 語言進行檔案操作 a.以文字方式開啟檔...
PE檔案格式及相關資料
pe檔案格式應用於所有32位windows系統 windows 9x,windows nt,windows 2000及windows xp vista已經對pe格式進行了公升級,也出現了pe64 而在msdn 98中有pe的大量詳細資料 按目錄 msdn library visual studio ...