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

时间: 2024-12-27 20:15:23

paper 37 : WINCE的BIB文件解析的相关文章

CSV文件解析到DataTable

详细代码如下: 1 public class CsvParsingHelper 2 { 3 /// <summary> 4 /// 将csv文件的数据转成datatable 5 /// </summary> 6 /// <param name="csvfilePath">csv文件路径</param> 7 /// <param name="firstIsRowHead">是否将第一行作为字段名</pa

JAVA之XML文件解析

在Java.Android开发中,xml文件的解析很重要.本人使用过的xml文件解析的方式有两种,一种是DOM文档解析.还有一种是SAX. DOM是基于文档树结构的.SAX是基于事件驱动的.SAX则是遇到标签则触发工作的.当解析器发现元素开始.元素结束.文本.文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据.优缺点很明显:DOM对于大型文件的操作不好(因为它要先读入整个文档到内存中),SAX为了解决这样问题.不用事先调入整个文档,占用资源少:SAX解析器代码比DOM解析器代

OC-Json文件解析-Json网址学习

1 //json 2 //javascript 语法的子集 3 //key : value 类似于dictionary对象 4 //json是由数组和对象构成的 5 6 //1.json文件的最外层结构为字典或是数组,大多数是字典 7 //2.json数据可以是基本数据类型,字符串对象,数组对象([]包含),字典对象,逻辑对象({}包含),null, 8 9 int main(int argc, const char * argv[]) { 10 @autoreleasepool { 11 12

Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PARENT/FILL_PARENT属性的原理说明 xml布局文件解析成View树的流程分析. 希望对大家能有帮助.- - 分析版本基于Android 2.3 . 1.WRAP_CONTENT.MATCH_PARENT/FILL_PARENT 初入Android殿堂的同学们,对这三个属性一定又爱又恨.爱的是使

9.XML文件解析

一.xml文件的引入 1.1 创建Student.java类 1 package com.entity; 2 /** 3 * 1.创建学生类 4 * @author pc 5 * 6 */ 7 public class Student { 8 private int id; 9 private String name; 10 private String course; 11 private int score; 12 13 public Student() { 14 } 15 public S

IOS 文件解析

1 import java.io.BufferedInputStream; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.StringReader; 7 import java.util.ArrayList; 8 import java.util.HashMap; 9 impo

浅谈文件解析及上传漏洞

中国菜刀 在web渗透中,我最期待两种漏洞,一种是任意命令执行漏洞,如struct2漏洞等:另一种是文件上传漏洞,因为这两种漏洞都是获取服务器权限最快最直接的方法.而对于任意命令执行漏洞,如果是通过内网映射出来的,那么可能还需要使用不同的手段进行木马文件上传,从而获取webshell,通过webshell进行端口转发或者权限提升.    本文主要是介绍文件上传中的个人利用技巧经验汇总,讲解分为两部分:一部份是文件解析漏洞,另一部份是文件上传漏洞. 文件解析漏洞 解析漏洞主要是一些特殊文件被iis

PE文件解析 基础篇

PE文件解析 基础篇 来源 https://bbs.pediy.com/thread-247114.htm 前言 之前学习了PE格式,为了更好的理解,决定写一个类似LoadPE的小工具. 编译器是VS2015,采用MFC框架. 此系列文章采用边介绍知识点,边写代码的形式,以免变的无聊丧失兴趣. PE知识请参照<加密与解密>第10章 文章有错误或则不清楚的地方还请您指出. PE文件格式 1.PE文件基本概念 PE文件是windows系统中遵循PE结构的文件,比如以.exe   .dll为后缀名的

Intel HEX文件解析

近期有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序.眼下的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比較麻烦的.由于每次的编译完以后都须要通过一个USB线来完毕传输烧录的工作,这个还是非常麻烦的. 原理解读 在Arduino中.利用USB来完毕传输烧录大概是这么一个过程. 每一个Arduino源程序.即sketch文件,经过一系列的编译处理以后.终于会形成一个Intel HEX格式的文件.这个HEX文件事实上就一个被封装