Windows Mobile 编译的内部结构和步骤(转载)

文章系转载,作者无从考究

 

编译分为4 个阶段

(1)       CESYSGEN 编译阶段这是编译的第一阶段,由sysgen.bat 完成。这部分首先将用户在定制平台时排除在外的系统功能所对应的文件从编译的列表中剔除,保留和定制功能相关的头文件、def 文件以及.lib文件,这些文件将被用来编译成DLL 以及在后续编译过程中所产生的其他文件。此外,被处理过的头文件和库文件可以被用来导出平台SDK。在IDE 集成开发环境中,这个部分有两个名称:generate system headers re-generatesystem headers。实际上它们的功能是一样的。re-generate system headers 首先把已经存在的头文件等全部删除,然后在重新过滤文件,再进行处理。re-generate system headers 将花去很多时间,但是当用户重新配置了系统结构后,这样做还是有必要的。当用户已经设置完系统配置后,本阶段编译并不是每次编译操作系统时都需要进行的。图19 是本阶段编译的示意图。

(对不起无图)

(2)       BSP 编译阶段           这个阶段的编译由Build.exe 完成。此阶段以后的编译过程将占据绝大部分的编译时间。编译器将编译内核、图形界面模块、事件子系统、OEM 适配层的源代码,并且将这些部分和BSP 编译出的文件链接在一起。这些模块是和硬件平台息息相关的,因此必须得到BSP 的支持。内核模块和OAL 相链接,产生nk.exe。在本阶段中将使用到一组特殊的文件,这些文件将指导如何进行编译,并且决定哪些文件是需要被编译和链接的。

DIRS 将指示从哪些路径寻找需要编译的文件。

SOURCES 文件定义了那些文件是需要被编译,如何被编译的。这两个文件都只是文本文件,但是它们描述了大量编译过程的信息。这两个文件的格式都是基于makefile 文件的。DIRS 文件可以简单地等同于类似Visual C++环境中的workspace。而SOURCES 文件可以看作是工程文件。SOURCES 文件相对比较复杂,但是它基本上设置了各模块的编译和链接顺序以及所要包含和编译的源文件。

下面是kaola BSP DIR 文件的内容:
DIRS= /
drivers/
gwe/
kernel /
pmu
以上列出了在本阶段编译时,要扫描的目录项。在编译器进入这些目录后,再扫描这些目录中的DIR 文件或者是SOURCES 文件(两者选其一),从而进行递归扫描所有的目录。

(3)       BUILDREL 编译阶段

这个阶段主要由BuildRel.BAT 文件完成。它将前两个阶段编译生成的目标文件、EXE 或者DLL 文件,从它们各自的目录中复制到为编译image 而准备的release_FLATRELEASEDIR)目录中。BSP 下的目标文件和子目录将被复制的目标文件夹下以获得前一阶段编译的各模块的中间文件。在集成开发环境中,操作系统的整体编译将在所有需要的文件被复制到_FLATRELEASEDIR目录后执行。

(4)       MAKEIMG 编译阶段

这个阶段由makeimg.exe 文件执行,这是最终的编译阶段,它将所有的二进制文件链接到一起,生成适合特定平台的操作系统镜像文件。本阶段根据配置处理所有release 目录下的文件。同样它还要寻找处理所有模块中XIP 的问题。
本编译阶段主要由3 个子阶段组成。

第一阶段将各种的配置文件整合到一起,比如BIBDATREGDB 等,针对每种配置文件,整合的信息将存放到一个master 文件中。表1 显示了这些文件和对应的master文件。表1 各种配置文件和相应的master 文件源 文 件 Merged master 文件 Description
Common.bib,
Config.bib,
Project.bib,
latform.bib
Ce.bib
描述了将要被链接到操作系统镜像文件中的
Windows CE
文件
Common.reg,
Project.reg,
Platform.reg
Reginit.ini
提供了操作系统镜像文件的注册表入口点
Common.dat,
Project.dat,
Platform.dat
Initobj.dat
提供了对操作系统镜像文件以及各种目录的描述

续表
源 文 件 Merged master 文件 Description
Common.db,
Project.db,
Platform.db
Initdb.ini
定义了Windows CE 对象存储
在第二个子阶段中,makeimg 将用LOC 文件中指定的EXE DLL 模块来替换当前指定的模块。在资源被更新以后,makeimg 将启动RomImage 进入第三个编译子阶段。在第三个子阶段中将链接并且定位所有XIP 文件。同时建立ROM 文件系统的镜像文件。这个文件系统将最终被整合到Windows CE 的统一文件系统中。在Windows CE 启动以后,所有/Windows 下的文件都是对应ROM 文件系统的。RomImage 将最终建立NK.BIN 镜像文件。这个镜像文件可以是SRE 格式或者BIN 格式,它们都能被编程器解释后下载到目标机中运行。SRE 是基于ASCII Hex 的文件格式,在嵌入式系统中被广泛使用;BIN 格式文件是微软公司提供的类似于SRE 的二进制文件格式。

 

 

2.编译中的配置文件解释
1REG 文件
Windows CE .NET
编译过程中使用的REG 文件和其他Windows 系统上的几乎一样。主要的区别在于REG version marker 从文件头上被删除了,这样做的理由是防止将默认的REG 文件直接整合到定制的平台中。因为如果REG version marker,保留的话,双击REG 文件的图标将直接把默认的REG 文件直接整合到定制的平台中,而不是编辑这个文件。下面是注册表文件的内容样例,键被用括弧括起来,其下有子键并且已经被赋值,还有数据类型和默认值。
; StrataFlash block driver.
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/StrataFMD]
"MemBase"=dword:b8380000
"MemLen"=dword:01f80000
; PCMCIA Driver
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/PCMCIA]
"Dll"="PCMCIA.dll"
"Order"=dword:0
"IClass"=multi_sz:"{6BEAB08A-8914-42fd-B33F-61968B9AAB32}=PCMCIA
Card Services"
以上是节选自平台的注册表文件内容。在这段代码中定义了两种设备的驱动信息:FlashPCMCIA 设备驱动。
Flash 的键下是MemBase MemLen 子键。MemBase 代表Flash 的物理起始地址8380000MemLen 定义了Flash 的容量,1f80000 也就是32MBPCMCIA 驱动中,驱动程序位于PCMCIA.dll 的动态链接库中,并且定义了代表该设备的ICLASS GUID

2BIB 文件
ROMIMAGE
使用Binary Image BuilderBIB)文件来配置ROM 文件系统。BIB 文件是文本格式的文件,其中使用了不同的关键词来定义不同的section。以关键词MODULES 开头的是模块section,其中列出了XIP 的可执行文件。以关键词FILE 开头的是其他需要被加入镜像的文件section。这些文件包括bitmapsdatafile HTML pages)。同时也可以描述非XIP 的可执行模块。在FILE 中罗列的文件,默认是被压缩的,以减少空间占用。下面是对BIB 文件结构的描述:
<Target Name> <Whitespace> <Workstation path> <memory Section> <flags>
<Target Name>
是将在ROM 文件系统也就是/Windows 下将出现的文件名。<Workstation
path>
指在开发环境中这些文件的路径。<memory Section>一般为“NK”
<flags>
可以使用表2 中所列的值。
2 flags的值及其说明
flags
功 能
C Compressed
加密的(文件section 默认加密节省空间)
U Uncompressed
未加密(modules section 默认)
R
只加密资源
H
把文件隐藏
S
系统文件
BIB
文件中还有两个section,它们一般出现在Config.bib 文件中。它们都是:
memory section
,它定义了目标系统的内存分布。它使用如下的格式标记:
<name> <Virtual Address> <Size> <TYPE>
<TYPE>
可以使用表3 中的值:
3 memory section TYPE 描述值 功 能
RAM
此项描述可用的RAM 区,RAM 区用来运行进程和文件系统。这个RAM 区必须是连续的。
RAMIMAGE
此项描述的区域将被视作ROM
RESERVED
此项范围内的内存区域是被保留的。这个区域的内存可能被用来当作video
frame buffer
或者direct memory access(DMA) buffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值