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的内存的配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做一个项目,平时都用到哪些工具提高效率(上)

做.NET 相关项目,Visual Studio 2008,SQL Server 2000/2005是标准的配置,但是,除此之外,还可以应用哪些工具来提高工作效率,让项目做的更轻松。 1 需要一个代码生成工具,生成实体层,数据访问代…

【转】傅里叶分析之掐死教程(完整版)更新于2014.06.06

转自:傅里叶分析之掐死教程(完整版)更新于2014.06.06 - 知乎 作 者:韩 昊 知 乎:Heinrich 微 博:花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳…

wince6.0编译命令分析

下面从CSDN帮助文档简要说明vs2005下面的系统编译命令,这些命令位于Build->Advanced Build Commonds 一共有六条命令,分别是: 1.Sysgen 2.Clean Sysgen 3.Build and Sysgen 4.Rebuild and Clean Sysgen 5.Build Current BSP and Subprojec…

【转】C,C++宏中#与##的讲解

转自:C,C宏中#与##的讲解 - MoreWindows - 博客园 文中__FILE__与示例1可以参见《使用ANSI C and Microsoft C中常用的预定义宏》 宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的…

wince对中文字体的支持

最近情况真的是很糟,小小年纪,得了好几样小毛病,弄得每天都提不起精神来,恍恍惚惚的,幸好有妻子的支持,她不论自己多忙多累,一看到我情绪不好,就给与很多安慰,百般鼓励&a…

提示信息的窗口效果

代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>提示信息的窗口效果<…

【转】C++中如何区分构造函数与重载operator()得到的仿函数?

转自&#xff1a;C中如何区分构造函数与重载operator()得到的仿函数?求大神!_360问答 此外,你觉得仿函数(functor)是否能完全取代function呢? 以下是个人使用C仿函数&#xff0c;function表达式的一些体悟。 首先是定义形式&#xff1a; 构造函数无返回值&#xff0c;而o…

WINCE添加新字体需要注意的一些问题

之前测试使用dgwulm.ttf字体&#xff08;GPS软件WolfNCU中带的&#xff09;&#xff0c;发现了一些添加新字体的时候可能被忽视的问题。 在WINCE系统中&#xff0c;除了将字体文件加入到系统内核NK之外&#xff0c;还可以动态的方式添加新字体&#xff0c;使用函数AddFontReso…

开源CRM Hipergate

Hipergate是一个用java写的开源CRM。有一个在线演示的Demo(http://demo-en.hipergate.org/)&#xff0c;并且支持中文。 该软件运行的屏幕截图请看这里&#xff1a;http://www.hipergate.org/docs/screenshots/ 开发语言&#xff1a; Java 操作系统&#xff1a; 跨平台 软件主…

【转】RAX,eax,ax,ah,al 关系

转自&#xff1a;RAX,eax,ax,ah,al 关系_迪迦 • 奥特曼-CSDN博客_rax和eax |63..32|31..16|15-8|7-0||AH.|AL.||AX.....||EAX............| |RAX...................|一般寄存器:AX、BX、CX、DX AX:累积暂存器&#xff0c;BX:基底暂存器&#xff0c;CX:计数暂存器&#xff0c…

MSDN中关于链接字体的解释(非常有用)

Windows Embedded CE提供了链接字库的能力&#xff0c;它可以将一个或多个字库链接到另一个字库上&#xff0c;前者称为被链接字库&#xff0c;后者称为基本字库。一旦你链接了字库&#xff0c;你就可以使用被链接的字库显示在基本字库中不存在的码字。比如&#xff0c;将日文字…

sharepoint站点移植方案

1、备份网站和内容数据库 "%systemdrive%\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe" -o backup -url http://172.18.33.238:8000 -filename "E:\backup\%date:~0,10%.data" –overwrite 2、备份文件系统…

【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍

转自&#xff1a;ARM 之七 主流编译器&#xff08;armcc、iar、gcc for arm、LLVM(clang)&#xff09;详细介绍_itexp-CSDN博客_armcc 必备 在讲解各编译器之前&#xff0c;必须先了解一下以下文件。这些文件在编译器目录下或者编译生成目标平台的可执行程序时经常见到。此外&a…

WinCE内核裁减(中文字体)及字库和内核的分离

每次定制中文系统时&#xff0c;NK总是比英文大10M左右&#xff0c;启动时在bootloader中将内核Copy到内存时也花时间&#xff0c;同时也占用了很多内存&#xff0c;留给系统和应用的内存就少了10M左右&#xff0c;真是浪费呀&#xff0c;看到都心痛&#xff01;本人研究了一下…

【转】深入浅出理解有限状态机

转自&#xff1a;深入浅出理解有限状态机 - 知乎 有限状态机是一种用来进行对象行为建模的工具&#xff0c;其作用主要是描述对象在它的生命周期内所经历的状态序列&#xff0c;以及如何响应来自外界的各种事件。在计算机科学中&#xff0c;有限状态机被广泛用于建模应用行为、…

2010读书计划

跟别人学着将今年想看的书发出来&#xff1a; 1.Implementing Lean Software Development --Mary and Tom Poppendieck 2.沉浮 3.Algorithm of the intelligent web --haralambos Marmanis 4.数据结构-严蔚敏 还有今年是比较重要的一年&#xff0c;加油。。。转载于:https://ww…

wince 环境变量

wince工程的环境变量在PBInitEnv.bat文件中存储&#xff0c;经测试&#xff0c;如果在下面增加了新的变量&#xff0c;在此文件中会出现

【转】vs平台工具集介绍,vc6~vs2019各IDE对应的工具集版本

转自&#xff1a;vs平台工具集介绍以及安装 - jack_Meng - 博客园 一、什么是平台工具集&#xff1a; 平台工具集其实是MSBuild其目录所在C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0。VS从2010之后开始支持使用之前的版本进行编译&#xff0c;可以在工程属性->常…

基于FPGA的前向纠错算法

目前&#xff0c;无线产品的广泛应用使无线音频和视频的高质量传输成为可能。蓝牙、无限局域网等无线传输设备比较复杂&#xff0c;成本较高&#xff0c;急需 开发一种简便的、仅用于流媒体的无线传输平台&#xff0c;将音频数据实时地发送到移动终端。由于音频数据的实时性&am…

wince编译时找不到atls.lib

NMAKE : fatal error U1073: dont know how to make C:\WINCE600\OSDesigns\x210\x210\Wince600\SMDKV210_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\atls.lib 需要选择ATL