WINCE的BIB文件解析
BIB的全稱為Binary Image Builder,在Wince編譯過程中的最后MakeImage階段會用到BIB文件,BIB文件的作用是指示構建系統如何構建二進制映像。所有的BIB文件會被合并成CE.bib文件,然后打包工具Romimage.exe會根據BIB文件中的描述來決定哪些文件最終被包含到WINCE image中,BIB文件還決定了WINCE設備內存的分配,比如定義了WINCE image占用哪塊內存,顯存(Framebuffer)占用哪塊內存等。
?
??? BIB文件包括4項:MEMORY,CONFIG,MODULES和FILES,它們的作用如下所示:
⑴MEMORY:
定義內存的相關設置,一般在0PLATFORMSMDKxxFILESconfig.bib文件中。WINCE構建系統通過MEMORY項知道哪些內存是RAM,哪些內存是ROM,以及它們的大小。MEMORY項的格式如下:
MEMORY
??? NAME?????? Start Address???? Memory Size?????? Type
其中
NAME:此段內存的名稱,此名稱沒有特別的規定,但最好是通過這個名稱我們就可以知道這段內存的用途,這個名稱必須是唯一的,如下文的名稱。
?
Start Address:表示此內存的起始地址,用十六進制數表示,如下文的運行時映像NK所使用的內存的起始地址是0x8C200000。
?
Memory Size:此內存的大小,用十六進制數表示,如下文config.bib中0x01800000(24M),次內存的大小需要根據自己系統的NK大小來指定,如果是中文系統,這個大小應該就需要加大了。
?
Type:此內存段的類型,有如下幾種可選的類型:
①FIXUPVAR:用于在WINCE編譯的Makeimage階段,就初始化內核中的全局變量。
?
②NANDIMAGE:當創建了一個使用BinFS的image的時候,NAND設備上的WINCE內核重定向到RAM中的區域,當系統訪問該區域(此塊RAM)的時候,BinFS會負責訪問NAND設備上相應的位置,并返回數據給系統,實際上就是在NAND設備上面實現了XIP的功能。比如開發板上有NAND的Flash,那么就可以把此段內存標為NANDIMAGE類型。如果Bootloader支持BinFS,那么就可使放在NAND Flash中的bin文件支持本地執行XIP(默認情況下只有NOR的Flash才可支持本地執行),此段內存必須也對齊。
?
③RAM:指定此段內存是RAM,定義了WINCE系統使用的RAM區域,WINCE系統可用這些內存來執行程序和存放RAM文件系統。這塊內存必須是連續的,這里有一點要注意就是從硬件的角度來說,這塊內存不能跨越兩片SDRAM,也就是說整個區域空間必須在一片硬件SDRAM上。
?
④RAMIMAGE:指定這塊內存用于加載WINCE image(也就是NK.bin),實際上WINCE啟動以后,image會被拷貝到這塊內存區域上面運行。一個image只能有一個連續的RAMIMAGE區域。
⑤RESERVED:這塊內存區域會被預留出來,一般用于Framebuffer或者是DMA buffer,或者是一塊共享內存用于EBOOT傳遞參數給WINCE系統,WINCE不會使用這段內存。
?
⑥EXTENSION:定義了一塊WINCE image中的區域作為ROMHDR extension的數據區域。
?
如下面的config.bib文件所示
以下是我們公司產品的WINCE500PLATFORMSMDK2440FILESconfig.bib文件
MEMORY
??? NK??????????? 8C200000? 01800000? RAMIMAGE
??? RAM???????? ? 8DA00000? 04D00000? RAM
?
; Common RAM areas
??? AUD_DMA???? ? 8c002000? 00002000? RESERVED
??? DRV_GLB?????? 8c010000? 00010000? RESERVED
??? SD_DMA??????? 8c028000? 00008000? RESERVED
?
??? EDBG????????? 8c030000? 00020000? RESERVED
??? CAMERA??????? 8c087487? 000A0000? RESERVED
DISPLAY?????? 8c183000? 0007d000? RESERVED
/*****************************************************************/
此段內容表示從地址0x8c200000開始的24MB空間用來存放運行時影響(NK.bin);從0x8DA00000開始的77M內存是RAM區,可供應用程序使用;從0x8c002000開始到0x8c200000的內存是被保留的,主要是聲音和顯示的DMA區域。
/*****************************************************************/
?
⑵CONFIG:這一項是一些附加的選項,一般在config.bib文件中定義,用來告訴構建系統如何生成運行時映像,其格式如下:
CONFIG
??? ITEM=Parameter
ITEM比較常用的有:
①AUTOSIZE:默認值為ON,如果WINCE image在RAM中,此選項允許自動地把WINCE image沒有使用的RAM分配給WINCE操作系統,也就是被用作WINCE系統的RAM。
?
②PROFILE:指定是否在WINCE image中包含用來性能剖分(profile)的結構和符號,默認值為OFF。
?
③BOOTJUMP:指定啟動時系統的跳轉地址,默認會跳向Startup函數的地址。
④COMPRESSION:指定構建系統是否壓縮WINCE image中的可寫部分。如果此部分被壓縮,那么WINCE運行時會把這部分解壓縮到RAM中;如果沒有被壓縮,則直接把這部分復制到RAM中。
?
⑤KERNELFIXUPS:指定構建系統是否對內核的可寫區域進行重定位。默認為ON,把內核的可寫區域重定位到RAM的起始地址。
?
⑥RAMFLAGS:指定內核特性的一些位掩碼,可以進行組合
??? 0x01:表示禁用按需調頁,這樣某個模塊在運行前就要被完全裝入RAM中。
??? 0x02:表示禁用Full Kernel(完全內核模式)。
??? 0x10:表示只信賴bib文件中放在MODULES塊中的文件。
??? 0x20:指示內核不要清空x86的TLB。
??? 0x40:表示按照DLL的/base鏈接選項中的地址加載DLL,這樣DLL就可被加載到某個預先定義的地址。
?
⑦ROMSTART:指WINCE image在內存中的起始地址,如下文的0x8C200000.
?
⑧ROMWIDTH:指定數據總線的寬度,可為8,16或32。
??? 8:表示構建系統會把WINCE image分為4個文件,按8位BYTE依次存放。
??? 16:表示構建系統會把整個WINCE image分成兩個文件。
??? 32:表示構建系統會把整個WINCE image作為一個文件。
?
⑨ROMSIZE:指定WINCE image的大小。
?
⑩FSRAMPERCENT:定義了文件系統使用的內存的百分比,默認值為0x80808080。
??? Byte 0:第一個2MB中,每1MB所包含的4KB的倍數。
??? Byte 1:第一個2MB中,每1MB所包含的4KB的倍數。
??? Byte 2:第一個2MB中,每1MB所包含的4KB的倍數。
??? Byte 3:剩余的內存中,每1MB所包含的4KB的倍數。
Config.bib文件的一部分:
?
CONFIG
??? COMPRESSION=ON
??? KERNELFIXUPS=ON
/**************************************************/
此段代碼指定了構建系統壓縮WINCE image的可寫部分和對WINCE image的可寫部分進行重定位。
/***************************************************/*
?
IF IMGPROFILER??
??? PROFILE=ON???
ENDIF
?
IF IMGPROFILER !
??? PROFILE=OFF
ENDIF
/*****************************************************/
如果設置了環境變量IMGPROFILER,就啟動PROFILE。
/*******************************************************/
IF IMGTRUSTROMONLY
??? IF IMGNOTALLKMODE
?????? ROMFLAGS=12
?????? /*************************************/
表示禁用Full Kernel(完全內核模式)并且只信賴bib文件中放在MODULES塊中的文件。
?????? /***************************************/
??? ENDIF
??? IF IMGNOTALLKMODE !
?????? ROMFLAGS=10? //表示只信賴bib文件中放在MODULES塊中的文件。
??? ENDIF
ENDIF
?
IF IMGTRUSTROMONLY !
??? IF IMGNOTALLKMODE
?????? ROMFLAGS=2??? //表示禁用Full Kernel(完全內核模式)。
??? ENDIF
??? IF IMGNOTALLKMODE !
?????? ROMFLAGS=0
??? ENDIF
ENDIF
?
??? ROMSTART=8C200000??
??? ROMWIDTH=32
??? ROMSIZE=01500000
??? FSRAMPERCENT=0x08080808
?
⑶MODULES和FILES
??? 這兩項列出了所有被包含到WINCE image中的模塊以及文件,以及這些模塊和文件以什么方式被加載到內存中,具體格式如下所示:
MODULES
??? Name?????? Path?????? Memory???? Type
Name:此文件的名字,比如一個dll或者exe文件的文件名。
Path:是要打包文件的完整路徑和名稱,一般都是WINCE的工程的release目錄。
Memory:指定此文件放在上面提到的MEMORY項的哪一段內存中。
Type:文件的類型,常用的有如下幾種:
??? ①S:表示系統文件。
??? ②H: 表示隱藏文件。
??? ③U: 表示不壓縮此文件。
??? ④D:表示不能對此文件進行調試。
??? ⑤N:表示此文件不受信任。
??? ⑥M:表示對此文件禁止按需調頁。
??? 以下內容是摘之platform.bib文件的部分內容
MODULES
?
;? Name?????????? Path???????????????? Memory ?????? Type
IF BSP_NODISPLAY !
??? s3c2440disp.dll????? $(_FLATRELEASEDIR)s3c2440disp.dll???? NK? SH
ENDIF BSP_NODISPLAY !
/*****************************************************/
如果在XXX:WINCE500PLATFORMSMDK2440目錄下的SMDK2440 DOS批處理文件設置了:SET BSP_NODISPLAY =1,那么構建系統將不會打包s3c2440disp.dll到WINCE image(NK.bin)中。
/***********************************************************/
backlite.dll????? $(_FLATRELEASEDIR)backlite.dll?????????????? NK? SH??
camera.dll??? ??? $(_FLATRELEASEDIR)camera.dll????????? ?????? NK? SH
AVOUT.dll???? ??? $(_FLATRELEASEDIR)AVOUT.dll?????????? ?????? NK? SH
?
/**********************************************************/
根據上面的內容,構建系統就把_FLATRELEASEDIR目錄下的backlite.dll、camera.dll 和AVOUT.dll打包到WINCE image中,放在NK內存中,并指定它們為系統文件和隱藏文件。
/**********************************************************/
?
FILES
;?? Name???????????????? Path????????????? Memory ?????? Type
events.wav?????????? $(_FLATRELEASEDIR)events.wav????????? NK? H
LoadGuid.exe???????? $(_FLATRELEASEDIR)LoadGuid.exe??????? NK U
PowerApp.exe???????? $(_FLATRELEASEDIR)PowerApp.exe??????? NK U
usbcnect.lnk???????? $(_FLATRELEASEDIR)usbcnect.lnk??????? NK U??
usbcnect.exe???????? $(_FLATRELEASEDIR)usbcnect.exe??????? NK U
?
?
??? BIB文件支持“條件編譯”,我們可以通過設置環境變量來選擇性地將某些模塊打包到WINCE image中。一般在BSP中,對于一些驅動模塊的環境變量我們通過IF來進行條件判斷,而對于WINCE系統模塊來說,一般都是SYSGEN變量,應該使用@CESYSGEN IF來判斷。
?
??? 在我們的BSP開發中最常見的主要有stepldr.bib、eboot.bib 、config.bib、platform.bib和project.bib,其中:
project.bib:該文件的配置主要是針對當前的OS Design。
platform.bib:該文件包含了和硬件相關的文件,主要以驅動程序為主。
config.bib:該文件描述了WINCE系統的內存的配置。
eboot.bib:該文件描述了WINCE系統的eboot的內存的配置。
stepldr.bib:該文件描述了WINCE系統的nboot的內存的配置。
總結
以上是生活随笔為你收集整理的WINCE的BIB文件解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公司债和股票的区别,两者有什么联系?
- 下一篇: S3C6410启动模式介绍