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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WINCE的BIB文件解析

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。