WinCE的配置文件学习小结

来源:互联网 发布:淘宝代购新规 编辑:程序博客网 时间:2024/05/21 11:02

一、源代码配置文件

1、dirs文件

Dirs文件时一个文本文件。它指定包含将要编译的源代码子目录。如:
DIRS = \
drivers\
oal\
kitl\
bootloader\

Build.exe根据dirs依次遍历drivers、oal、bootloader目录。如果drivers目录下面还有dirs文件,如:

DIRS = \

drivers\

oal\

kitl\

bootloader\

那么久先遍历这个目录。

如果子目录下面就是源代码,那么build.exe将按照makefile和source文件中的内容进行编译。

2、makefile文件

内容:!include$(_MAKEENVROOT)\makefile.def
当build.exe查找dirs和sources文件之后,它就会设置一个内部环境变量。Nmake.exe使这个环境变量在此工程的子目录把sources.cmn文件添加到源文件中,使用makefile.def包含的连接规则。其实makefile.def文件本身包含了本地的sources文件。
Nmake.exe编译sources文件中指定的源代码或者连接目标模块的同时,还使用makefile.def文件来传递当前的环境变量给编译器连接器或者其他工具。

3、souces文件

这个文件是文本文件,它为子目录中的源代码设置了不少宏定义。build.exe使用这些宏定义来决定如何编译和连接源代码。build.exe从语法上分析一个sources文件之后,Nmake.exe就开始合并sources文件到一个通用的makefile文件,makefile.def
sources文件有很多常用的宏变量,在这里就不做介绍了。

二、CE镜像配置文件

makeimg.exe工具调用大量的应用程序和批处理文件,并且使用镜像配置文件来创建一个运行时的CE镜像。
1、二进制镜像构建文件(binary image builder file)。它定义了包含在运行时CE镜像中的模块和文件。
2、注册表文件(registry file),冷启动时为运行的CE镜像定义注册键和值
3、文件系统文件(file system file),冷启动时为运行的CE镜像创建定义RAM文件系统目录,文件连接等。
4、数据库文件(database file),冷启动时为运行的CE镜像创建存储对象定义的数据库。
5、字符串文件(string file),为了使文本在.reg、.dat和.db文件中对用户可见,须定义本地相关的字符替换。
下面做详细分析:

1、二进制镜像构建文件

.bib文件定义了哪个模块或者文件被包含到运行时的CE镜像中。在编译期间,makeimg.exe是若干个bib文件合并成CE.bib文件,然后romimage.exe使用ce.exe决定哪些文件应该打包进运行时CE镜像中,它同时还使用ce.bib来决定如何建在木偶快和文件到CE镜像(下载到目标设备的CE镜像)所在的内存中。
bib文件可以分为四个部分:memory、config、modules和files

memory:

定义可用的物理内存,包括其实地址、大小、和内存类型。

config:

定义romimage.exe输出的配置选项。默认情况下,这个区域是在config.bib文件中。不过也并不是bib文件中必须包含config文件

files:

指定放在CE镜像中的模块列表

modules:

指定放在CE镜像中的模块列表,包括exe、dll。它与files的区别是放在modules中的文件通常是代码文件,并且构建系统时不会压缩这些文件。


按照功能来分bib文件有以下几种类型:


platform.bib:

包含硬件平台相关的模块和文件,如目标设备的驱动文件

project.bib

定义与创建CE镜像的工程相关的模块

common.bib

通用显示驱动和核心系统 模块

config.bib

Rom和RAM的配置信息

下面详细介绍bib文件的框架:

1、memory

wince构建系统时需要通过memory部分来确定哪一段物理内存是RAM,哪一段物理内存是ROM,以及它们的大小。在config.bib文件中通过名称来保留内存区域,每一个bsp都有一个config.bib副本。
memory的格式如下:
name address size type
名字只要唯一就行
地址是起始地址
size是十六进制表示的大小
type有以下几种类型:
fixupvar  当romimage被调用是,改变一个全局内核变量和内核模块变量的值
ram CE文件系统指定到内核的可用虚拟地址范围
nandinage 如果有nand flash,则会标志位此类型,此段内存必须页对齐。
ranimage CE镜像的位置
reserved 缓冲区
extension 扩展的数据区


2、config

常用选项:
autosize=[on | off]默认为off,ce不在RAM中(如果在RAM中,此项允许自动地把测镜像没有使用的RAM分配给windowsCE操作系统,以使其充当物理RAM使用,而无需更改必备文件。)
profile=[off | on | all] 默认off 不包含分析相关的特征
bootjump=[address | none]address是bootloader跳转到startup的地址,十六进制。none表示启ce镜像时,进制写入跳转到startup的代码。
compression=[off | on]默认为on,压缩
kernelfixups=[off | on |address]默认on,表示把内核的科协区域重定位物理RAM的起始地址
x86boot=[off | on |address]off表示不插入跳转地址,on表示默认地址,address是手动指定。

3、modules

语法:
name path memory block section override type
name 指定了模块的名称
path 打包进CE镜像modules模块的完整路径
memroyblock 指定romimage.exe加载目标模块到内存区域的ranimage部分
sectionoverride 可选
type:
S:定义一个系统文件
H:定义一个隐藏文件
R:压缩资源
C:如果应用于一个模块,则压缩全部内容
D:运行时不允许调试
N:标记一个模块为不可信任,只应用modules部分
P:指定romimage.exe进制在头文件中检查指定的CPU的类型。这个旗帜只用于资源dll,可以在一种CPU上编译,在不同CPU上使用
K:表示romimage.exe必须固定模块的内核地址。
M:表示对此页进制按需调页
U:表示不压缩文件

4、files

与modules十分相似,唯一不同的时在构建系统时,对files部分的文件进行压缩,而对modules部分默认是不压缩的,通常情况下,将wav、bmp文件放在files部分,将exe、dll等代码放在modules部分。


2、注册表文件

注册表文件格式:
【KEY1】
“ValueName1”={Value Type}:{data}
“ValueName2”={Value Type}:{data}
【KEY2】
“ValueName1”={Value Type}:{data}
...


3、文件系统文件

给一个例子来帮助大家理解创建.dat文件的方法
root:-Directory(“My Document”)
root:-Directory(“Program Files”)
Directory(“\Program Files”):-Directory(“My projects”)
Directory(“\Program Files”):-Directory(“Accessoris”)
Directory(“\Program Files”):-Directory(“communication”)
Directory(“\Program Files\My projects”):-File(“My project program”, "\windows\myproj.exe")
root:-File("\demo.lnk", "\windows\myapp.lnk")

上面这个实例中的root参数用来指定CE镜像的根目录,它可以用来创建根目录下的任何子目录。上面的例子中指定了两个根目录My Document和Program Files,在根目录Program Files下创建了3个子目录:My projects、Accessoris和ommunication。接着通过参数-FIle从ROM(\windows目录)中复制myproj.exe到My projects 目录下,并把它重命名为My project program。然后把\windows\myapp.lnk复制到CE的根目录下,并将其重命名为demo.lnk。

当更新.dat文件时,可以用IF和ENDIF条件语句块或NOT(!)来操作控制某些语句是否执行,可以用;注释本行。如下:

IF IMGINCLUDEAPPS
Directory(“\Program Files”):-Directory(“My projects”)

ENDIF

IF IMGNOACC !

Directory(“\Program Files”):-Directory(“Accessoris”)

ENDIF

Directory(“\Program Files”):-Directory(“communication”)

从上面的例子可以看出,如果执行makeimg.exe之前定义了IMGINCLUDEAPPS,那么编译后就包含My projects目录。如果没有定义MGNOACC,才包含Accessoris。不过如何设置,都包含communication目录。


4、数据库文件















原创粉丝点击