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