在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 |
|
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中。