paper 37 : WINCE的BIB文件解析
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:
定义内存的相关设置,一般在0\PLATFORM\SMDKxx\FILES\config.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文件所示
以下是我们公司产品的WINCE500\PLATFORM\SMDK2440\FILES\config.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:\WINCE500\PLATFORM\SMDK2440目录下的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的内存的配置。
paper 37 : WINCE的BIB文件解析的更多相关文章
- 将MyApp.exe和Autorun.lnk添加到NK里,在project.bib文件内加入
1. 将应用程序和应用程序快捷方式添加到映像里,再将快捷方式添加到StartUp目录下,这样当系统运行后应用程序就能自动运行:2. 直接替换Wince的SHELL,即修改注册表: [HKEY_LOCA ...
- Dicom格式文件解析器[转]
Dicom格式文件解析器 Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯那方面的问题 只讲*.dcm 也就是diocm格式文件的读取,读取本身是没啥难度的 无非就是字节码数据流处理.只不 ...
- Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析
转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...
- PE文件解析 基础篇
PE文件解析 基础篇 来源 https://bbs.pediy.com/thread-247114.htm 前言 之前学习了PE格式,为了更好的理解,决定写一个类似LoadPE的小工具. 编译器是VS ...
- Rabbit MQ config文件解析
Rabbit MQ config文件解析 tcp_listeners:用于监听AMQP连接的端口或主机名/对(不带TLS),默认端口:5672 2.numtcpacceptors :将接受TCP侦听器 ...
- 文件解析漏洞总结(IIS,APACHE,NGINX)
(本文主体来自https://blog.csdn.net/qq_36119192/article/details/82834063) 文件解析漏洞 文件解析漏洞主要由于网站管理员操作不当或者 Web ...
- OpenCV读写视频文件解析
OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在 OpenCV 中,VideoCapture ...
- 简单学习一下ibd数据文件解析
来源:原创投稿 作者:花家舍 简介:数据库技术爱好者. GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 简单学习一下数据文件解析 这是尝试使用Golang语言简单解析My ...
- CocosStudio文件解析工具CsdAnalysis
起因 因为工作需要,所以需要使用CocosStudio来制作界面动画什么的.做完了发现需要找里边对象的时候会有很长一串代码,感觉不是很爽.之前写OC代码的时候可以吧程序中的对象指针跟编辑器中的对象相对 ...
随机推荐
- 1014 C语言文法
<程序> -> <外部声明> | <程序> <外部声明> <外部声明> -> <函数定义> | <声明> ...
- Java实验五报告——TCP传输及加解密
一.实验内容 1.运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码,一人加密后通过TCP发送: 注:加密使用AES或者D ...
- 适用于Magento的最合适的.htaccess写法
原作者地址:http://www.ctrol.cn/post/ecommercial/magento/12-05-ctrol-4057.html ########################### ...
- Selenium2学习-029-WebUI自动化实战实例-027-判断元素是否存在
非常简单的源码,敬请各位小主参阅.若有不足之处,敬请大神指正,不胜感激! /** * Verify the element exist or not * * @author Aaron.ffp * @ ...
- Java学习-016-CSV 文件读取实例源代码
上文(CSV文件写入)讲述了日常自动化测试过程中将测试数据写入 CSV 文件的源码,此文主要讲述如何从 CSV 文件获取测试过程中所需的参数化数据.敬请各位小主参阅,若有不足之处,敬请大神指正,不胜感 ...
- 解决VS2010无法打开,提示无法找到atl100.dll的方法
这个问题是卸载VS2010一些组件造成的误删问题,且从网上下的atl100.dll通常与自己的VS2010不符 解决方法: 从路径:C:\Program Files\Microsoft Visual ...
- net异步线程获取返回值的三种方式
方式一:endInvoke using System; using System.Collections.Generic; using System.Text; using System.Thread ...
- 针对应用程序池“xxxxxx”的模板永久性缓存初始化失败,解决方法
日志名称: Application 来源: Active Server Pages 日期: 2014-11-22 9:09:39 事件 I ...
- Chrome控制台调试工具用法
下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册 ...
- Power-BI For K3 免费版培训与交流!Q群视频培训,绝对干货!
Power-BI For K3 免费版培训与交流!Q群视频培训,绝对干货!1.产品安装与配置:2.产品使用:3.个性化开发(现场提需求现场开发):4.交流互动.时间:2015-12-03(周四)晚8 ...