日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

WINCE的BIB文件解析

發(fā)布時(shí)間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WINCE的BIB文件解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。