来源:MSDN

http://msdn2.microsoft.com/zh-cn/library/aa459173.aspx

发布日期 : 7/22/2004 | 更新日期 : 7/22/2004

Mike Hall

Microsoft Corporation

Steve Maillet

Entelechy Consulting

在本文中,我们介绍用来生成 Microsoft_ Windows_ CE 操作系统的自定义映像的工具,该工具相应地称为 Platform Builder。Microsoft Windows CE Platform Builder 与 Windows CE .NET 产品一起交付,它是完整的 Windows CE .NET Beta 2 Emulation Edition 的免费 Web 下载版本的一部分。可以从 http://www.microsoft.com/windows/Embedded/ce/taliskerpreview/default.asp?frame=true#getthebeta 下载该版本。

Windows CE .NET Beta 2 Emulation Edition 的可下载版本支持一个主板支持软件包 (BSP),这是一个仿真程序。Platform Builder 工具和仿真程序都运行在 Microsoft_ Windows_ XP(或 Windows NT/Windows 2000)台式机上 £­ 本文随后详细介绍仿真程序。我们还介绍了 Windows CE 生成系统的深层原理。

本文中出现的所有屏幕快照和步骤全部针对 Windows CE .NET Beta 2 Emulation Edition。请注意,这是该产品的发布前版本;在下载版本和最终产品之间,屏幕 UI 和功能可能有更改。

好。让我们深入讨论如何配置、生成操作系统映像,并将它下载到仿真环境。一旦我们已经完成该过程,然后我们就可以看一看在表象的后面发生了什么。

部署 Windows CE 的映像可以划分为三个不同的步骤:

  1. 配置

  2. 生成

  3. 下载

步骤 1. 配置 Windows CE 映像

首先快速回顾一下历史。Windows CE 的以前版本都带有很多预配置的平台工作环境。可以考虑从这些平台工作环境开始启动项目。它们的名称是 minkern、mininput、mincomm、mingdi、minwmgr、minshell、maxall、iesample、dxmax(总共九个 Windows CE 3.0 配置),minkern 是最小的生成,maxall 是最大的(大小分别是从 400 KB 到 8 MB 不等)。有关每个工作环境所含功能的说明,请参阅 Microsoft Windows CE 3.0 Operating System Configurations

使用这些工作环境,有时很难确定项目的最好启动点,有时更难自定义平台来完全满足开发人员的需要。现在有了 Windows CE .NET,这些都已经改变了。新的 Platform Builder IDE 支持一系列设备映像(Web Pad、Internet 家电、本地网关、机顶盒和其他设备)以及自定义映像配置。这使配置操作系统映像变得很容易。

让我们看一看 New Platform Wizard,它可以在 Platform Builder 中通过选择 File,然后选择 New... 找到。该向导有七步。

步骤 1. 这一步提供要执行的步骤的概括信息:我们将需要选择“主板支持软件包”(参考平台;用于 Web 下载版本,这将是仿真程序)、平台配置(Web Pad,Internet Appliance 等等)、配置变体(Basic Web Pad、Enterprise Web Pad 等等),并添加任何其他配置(例如网络)。

1. 欢迎使用平台向导

步骤 2. 这是选择平台配置的地方。可以从很多设备配置中作出选择。在本例中,我已经选择使用 Web Pad 配置,并选择了名称 MyPad。注意,选择这些配置中的一个将为您的平台提供基本组件。然后,我们可以使用平台工作环境和编录来添加或删除功能。

2. 选择基本配置

步骤 3. 要使用哪个参考平台?(Platform Builder 的 Web 下载版本只支持仿真。)注意,Windows CE .NET 的发布版本将支持一系列硬件参考平台,通过第三方加载项组件,支持的硬件参考平台的清单可以进一步加长。

3. 选择一个或多个参考平台

平台工作环境将创建在 C:\WINCE400\PUBLIC\MyPad 中。现在可能是引入 Windows CE 生成系统所使用的某些文件夹的最好时机。

如果我们检查 C:\WINCE400 文件夹,我们将注意到有很多子文件夹。其中有三个是我们需要特别关注的:

C:\WINCE400\PLATFORM。它包含特定于硬件的文件,和主板支持文件。通常每个硬件平台都有一个文件夹列在 Platform 文件夹的下面(即 Geode、CEPC、Emulator 等等)。注意,使用 Windows CE .NET,我们已经使用了很多独立于平台的驱动程序,并且已经将它们从平台文件夹移动到公共文件夹:C:\Wince400\public\common \oak\drivers。可以看一看位于该文件夹下面的驱动程序。

C:\WINCE400\PUBLIC。 它包含每个工作站配置(在我们的例子中是 MyPad)和构成每个可用启动配置的组件。

C:\WINCE400\PRIVATE。 该文件夹包含 Windows CE 源代码(用于内核和其他组件)。源代码没有与仿真下载版一起交付,但可作为 Windows CE 3.0 的 Web 下载获得,并且还将在 Windows CE .NET 版本中提供。

步骤 4. 我们已经选择了 Web Pad。现在,我们需要决定 Web Pad 的哪些特性满足我们的需求。在我们的例子中,我们只需要像手持 PC 的外壳程序和 Microsoft_ Internet Explorer(基于 Internet Explorer 5.5)。Enterprise Web Pad 配置添加了对 Microsoft_ 消息队列 (MSMQ)、终端服务客户端(远程桌面)和其他企业功能的支持。即使我们已在示例中选择了基本 Web Pad,我们仍然可以在任何时候从编录中添加诸如 MSMQ 和终端服务客户端这样的功能,以便完全自定义我们的平台。

4. 选择 Web Pad 的特性

步骤 5. 在该步骤中,我们选择要将哪些应用程序和媒体组件添加到平台中。(默认情况下,Windows Media 组件已被选择;在我的生成中我已禁用它们)。一旦我们已配置完平台,然后就可以使用 Project Wizard 添加我们自己的应用程序和服务(该向导还可用来将文件添加到项目)。

5. 选择应用程序和媒体组件

步骤 6. 我们在这里为我们的平台选择网络和通信选项,包括对蓝牙、点对点隧道协议 (PPTP) 和 Voice over IP (VoIP) 的支持。同样,在平台开发期间我们可以在任何时候从编录中选择这些选项。向导使对平台进行初始配置变得容易。

6. 选择网络和通信功能

步骤 7. 这一步只是确认设置并启动帮助文件,帮助我们进一步自定义平台。我们可以只是单击 Finish。

7. 配置完成

到这时为止,我们的核心平台配置已经完成。我们有两种选择:可以用该配置开始生成,或进一步自定义。如果选择进一步自定义,则需要从编录中添加组件(参阅下面内容),创建应用程序、驱动程序或函数/资源 DLL。

8. 编录的屏幕快照

现在,让我们看一看将应用程序添加到操作系统配置中是多么容易。

将应用程序添加到 Windows CE .NET 操作系统映像中

选择 File 然后选择 New Application;这将启动 Application Wizard。Windows CE 3.0 或更早版本的用户将认识该向导的外观,另外向导还有一些简单但非常有用的更改。请继续阅读,了解很多内容。

Application Wizard 包含两个简单的步骤:

步骤 1. 选择您要构建的应用程序的类型。您有很多选择;也许最频繁使用的选择将是 WCE Application(Windows 应用程序)和 WCE 动态链接库,后者可以是设备驱动程序、函数库或一组资源—实际上,使用动态链接库来包含本地化资源是本地化应用程序的巧妙方式。(顺便说一句,一定要让我们知道您是否对有关 Unicode 编程、构建本地化应用程序或将桌面应用程序移植到 Windows CE 等问题的文章感兴趣。)

在我们的示例中,我们选择 WCE Application,并将我们的应用程序命名为“MyApplication”。您将在“New”对话框上注意到(参见下面的图 9),应用程序位于 C:\WINCE400\PUBLIC\MyPad\MyApplication 文件夹中—新的应用程序创建在工作环境的子文件夹中。

9. 应用程序向导

步骤 2. (或步骤 1/1)在这里我们将选择要构建的应用程序的类型。我们可以从空项目开始,然后插入以前的应用程序的源代码。我们还可以选择从“simple” Windows CE 应用程序开始,这将只提供默认的 Windows 应用程序入口点“WinMain”(我们负责编写其他所有内容)。或者,我们可以从典型的 HelloWorld 应用程序开始,它是一个功能完整的图形应用程序,包含对键盘和鼠标的支持以及用于维护 Windows 工作区的绘图代码。虽然添加自定义应用程序所需要的所有其他代码是我们的责任,但这种方式确实为我们的应用程序提供了良好的起点。

10. 选择应用程序类型

一旦已将应用程序添加到工作环境,它将作为“用户功能”出现在工作环境中(请参见下图)。

11. 包括应用程序的工作环境

工作环境(上面)包含两个选项卡,第一个是 FeatureView,它包含构成平台的功能或组件的列表。第二个选项卡是 ParameterView,它显示平台注册表、二进制映像生成器 (BIB) 文件(随后详细介绍它)、数据库文件和 DAT 文件(用来创建文件夹和快捷方式)。

好了,那么在 Windows CE 3.0 和 Windows CE .NET 之间什么是非常有用的更改?默认情况下(在 Windows CE 3.0 中),出现在工作环境中的应用程序将被构建,但不会包括在最终的操作系统映像中(需要修改 Project.bib 文件才能将应用程序/功能包括在操作系统中)。使用 Windows CE .NET,每个用户功能都将自动包括在最终的生成中。您可以控制每个功能的很多设置,包括是否隐藏功能。为控制该设置,请选择 Platform,再选择 Settings,并从可用组件的列表中选择用户功能,然后选择 BIB Info(请参见下图)。

12. “User features”配置

返回页首

步骤 2. 生成 Windows CE 映像

现在,我们已经配置完包含基本 Web Pad 的组件以及 HelloWorld 应用程序的工作环境。我们有两个生成应用程序的选择:调试和发布。每个生成将生成到它自己的生成输出文件夹中。在本例中,使用 MyPad 示例,在生成过程中将创建和填充下列文件夹:

发布: C:\WINCE400\PUBLIC\MyPad\RelDir\EMULATOR_X86Release

调试: C:\WINCE400\PUBLIC\MyPad\RelDir\EMULATOR_X86Debug

当然,如果使用已发布的 Windows CE .NET 版本,还可以使用相同项目工作环境为其他 BSP 生成。通过生成到用于调试和发布的不同文件夹中,将使我们能够分别控制各个设置。(例如,假设我们想要从用于调试生成的操作系统映像中排除 MyApplication。)这样,我们就能够将操作系统映像下载到硬件(或仿真程序)中,然后从 Platform Builder 运行应用程序(选择 Target,然后选择 Run)。

该命令将检查生成输出文件夹,并提供所有可执行文件程序的列表(无论是否包括在最终的操作系统映像中)。如果应用程序不在操作系统映像中,那么它将下移到目标中并执行。在任何情况下,都有这样的优点:我们可以调试应用程序、找到错误、中断目标上的进程、进行修改,然后重新下载并测试—所有这些操作都不必重建操作系统。当然,还可以使用 Microsoft ® eMbedded Visual C++ ® 来这样做。

是否为调试或发布生成(以及为什么平台生成)的决定要从生成工具栏进行控制。仿真预览下载版只能为 Emulation Debug 和 Emulation Release 生成。

13. 生成工具栏

要生成操作系统映像,只需选择 Build,然后选择 Build Platform

本文随后将介绍生成系统是如何工作的,然后在下个月的文章中针对该知识的部分内容进一步展开。

返回页首

步骤 3. 下载 Windows CE 映像

Platform Builder 支持通过串行/并行端口、以太网和(通过加载项组件)JTAG/BDM 将映像下载到设备。我们需要先配置下载并调试传输,然后才能下载操作系统映像。仿真是特殊情况,因为它的目标是运行在开发工具所在的相同 PC 上。

要配置下载并调试目标,请选择 Target,然后选择 Configure Remote Connection。将显示下列对话框(参见图 14)。由于我们的唯一目标是仿真,因此我们选择用于下载和内核传输的仿真程序。

14. 配置远程服务

通过单击 Download Configure 按钮,可以改变仿真环境的配置。可以修改下列设置。

Video

能够设置仿真程序的屏幕分辨率和颜色深度

Memory

仿真程序必须使用的内存量。

Skin File Web

下载版不支持。我们将在另一篇文章中详细讨论它。

Serial Ports

使用 PC 的串行端口。

Ethernet

使用 PC 的以太网连接。

Parallel Port

使用 PC 的并行端口。

15. 仿真选项

那么,为什么生成 Windows CE 映像的开发人员会对仿真有兴趣?实际上,有很多理由。

  • 并行开发。开发桌面或嵌入式产品的一个关键问题是投放市场的时间。没有仿真,就只能使用硬件参考平台(它可能与最终的硬件配置不匹配),或者需要等到硬件开发工作组完成参考电路板的开发。使用仿真,应用程序(和外壳程序)开发团队就能与硬件开发并行地开发和测试应用程序。

  • 产品测试。使用仿真的另一个好处是能够将操作系统映像交付给客户(或内部测试团队),让他们进行测试。Windows CE .NET 的发布版本在交付时将带有支持外观和虚拟键盘(随后的文章详细介绍)的仿真程序。

返回页首

Windows CE .NET 生成过程

好。您已经开始尝试,并且已经有了成效,现在让我们深入介绍后台的工作原理,看一看生成操作系统映像时实际上发生了什么事情。

Windows CE .NET 的生成过程分为 4 个阶段:

CESYSGEN

该阶段将筛选在生成过程中使用的所有头文件、用于生成 DLL 的 DEF 文件以及其他文件。该筛选将删除您没有为操作系统选择的系统部件。经过处理的头和库随后用于生成特定于平台的 SDK。

BSP

主板支持软件包 (BSP) 阶段将编译和链接图形、窗口和事件子系统 (GWES)、内核、OEM 适配层 (OAL) 以及设备驱动程序。所有这些部件都是非常依赖硬件的。内核将链接到 OAL 以生成 nk.exe。GWES 则与某些本机驱动程序库(电池和通知)链接,并编译和链接其他驱动程序,以创建 DLL。(以后的文章将重点介绍一个好的和适当的 BSP 的详细构成。)

BUILDREL

该阶段从多个位置取得文件、数据、配置和可执行文件模块,并将它们复制到 Make 映像阶段(参阅下面内容)的平面发布目录。使用 IDE 时,这时还是生成工作环境中的项目并将 EXE 或 DLL 复制到发布目录的时候。

MAKEIMG

如名称所示,这一阶段实际上将为平台生成最终的 ROM 映像。它将按照配置文件,对发布目录中的所有文件进行处理。Make 映像将执行链接,并定位到映像中将就地执行 (XIP) 的所有可执行文件模块。

目录结构

在详细介绍每个阶段之前,我们先深入认识生成中使用的目录结构。

16. 用于生成的目录结构

所有生成文件和文件夹都位于 %_WINCEROOT% 文件夹(通常由安装程序设置为 c:\WINCE400)的下面。(可以重写该位置,将它放在您想要的任何地方,但如果您希望使用其他位置,通常最容易的做法是将它放到磁盘驱动器的根,这样每人都可以找到它。)根的下面有几个目录,它们中有两个是非常重要的。(生成中也会使用其他文件夹,但您实际上应当将它们看作是不可触动的,因为它们包含了 Microsoft 提供的将会随版本变化而更改的生成部件。)

PLATFORM

该文件夹包含一组文件夹。安装在系统上的每个 BSP 对应一个文件夹。常规做法是将用于特定系统的、特定于硬件的文件、代码和设置与对于硬件而言未知的系统部件分开。这样就可以有可支持多个硬件平台的单个工作环境。如果有一个 BSP 是针对仿真的,这种做法将是非常有用的,因为它允许您生成一个将在真实硬件上存在的准确的操作系统版本,甚至是在硬件设计完成之前,它就将运行在仿真程序上。

PUBLIC

该文件夹用来存储所有 Microsoft 提供的配置信息,并驻留示例驱动程序和可自定义的代码。您将在此处创建您自己的配置文件夹(否则 IDE 将根据您的首选项代表您决定该位置)。像位于根的文件夹一样,除了您自己的配置文件夹以外,PUBLIC 文件夹中的所有文件夹都应当被视为不可触动。如果需要修改这些文件夹中的某些内容,请制作源文件的副本,并将副本放入您自己的配置或平台中 £­ 但不要修改这些文件。为什么?因为处理加载项包、QFE 和工具版本升级时,将给您自己带来巨大麻烦 £­ 所有这些都可以根据需要改变这些文件夹的内容。(那时,如果修改了这些文件,会使您忙得不可开交!)

CESYSGEN 阶段( CEBUILD.BAT sysgen.bat

这是生成过程的第一个阶段。该步骤将处理整个系统的头和 .lib 文件。Talisker 的新功能是同样能够可选地处理平台文件。这主要对开发系统有用(比如,基于 Windows CE 的 PC 硬件开发平台 (CEPC)),在开发系统中,实际的硬件可能支持比特定操作系统配置所要求的功能多得多的功能。如果看一看 %_WINCEROOT%\platform\CEPC\files\platform.reg 下面的用于仿真的注册表项,将在靠近文件顶部的位置看到下列内容:

; @CESYSGEN IF FILESYS_FSREGHIVE
; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE\init\BootVars]
   "SYSTEMHIVE"="Documents and Settings\\system.hv"
   "PROFILEDIR"="Documents and Settings"
   "Start DevMgr"=dword:0
; END HIVE BOOT SECTION
; @CESYSGEN ENDIF FILESYS_FSREGHIVE

CESYSGEN 筛选查找如下形式的注释行:

@CESYSGEN IF 

并在查找到下列相应行时结束查找:

@CESYSGEN ENDIF 

在上面的例子中,如果设置了环境变量 FILESYS_FSREGHIVE,那么注册表数据块将包括在筛选出的输出中;否则,它将被删除。

筛选出的 BSP 数据将放在 BSP 的 cesysgen 文件夹中。为配置筛选出的文件和所有筛选出的系统头和文件,都放在 WINCE400\cesysgen 下面的平台配置文件夹中。

在 IDE 中,该阶段有两个名称:生成系统头和重新生成系统头。它们两个实际上都做相同的事。重新生成头将首先“清理”生成输出,然后生成头,以便所有内容都从头到尾重新生成。完成它需要更长的时间,但有时要在配置中进行成批更改时就需要这样做。一旦您确定了操作系统配置,通常不需要再对每个生成重复该阶段。所以两种方式都可以,这不是主要因素。

17. 筛选后的输出

返回页首

BSP 阶段 (Build.exe)

开发新系统时大多需要运行 BSP(和随后的阶段)。该阶段编译和链接所有驱动程序和 OAL 代码。系统怎么会知道要生成什么内容?这个问题问得好!

该阶段使用了一组特殊的文件;这些文件是生成过程的指南,它们确定了需要编译和链接什么。DIRS 文件用于定义生成系统应当在哪里查找要生成的内容。SOURCES 文件定义了要生成什么和如何生成它。它们都是简单的文本文件,实际上只在大型生成文件系统中包括。两种文件的语法都基于生成文件的语法。DIRS 文件大约相当于 C 和 C++ 开发环境中的工作环境。SOURCES 文件大约相当于项目。DIRS 文件的语法非常简单,在 CEPC BSP 中它是这样的:

DIRS= \
    gwe      \
    drivers  \
    eboot \
    sboot \
    kernel

可以看到,它只是生成系统要扫描的目录的列表。在 BSP 阶段中,将读取 DIRS 文件,并扫描该文件中列出的目录内是否有另一个要处理的 DIRS 文件或 SOURCES 文件(您不会同时有这二者)。

SOURCES 文件稍微复杂一点,但基本上它用于设置链接器和编译器设置,并指定要包括在模块的生成中的源代码文件。源文件的完整语法超过了这篇特殊文章的讨论范围。它记录在帮助文件中,并且有许多示例可供您学习。(也许我们将在另一篇文章中重新讨论该主题。请向我们发送一些反馈,让我们知道您是否认为它是很重要的。) BSP 阶段的输出通常放在仿真程序生成上 EXE 和 DLL 的平台中特定于 CPU 的目录内。即用于库的 C:\WINCE400\PLATFORM\EMULATOR\lib\x86\[retail|debug],和用于 EXE 和 DLL 模块的 C:\WINCE400\PLATFORM\EMULATOR\target\x86\[retail|debug]。完成这一阶段后将允许 SOURCES 文件生成一个 .lib 文件,这个 .lib 文件将被 OAL 中多个其他片段使用,并且不会在其他任何地方直接使用。

返回页首

BUILDREL 阶段 (BuildRel.BAT)

该阶段主要是从各种生成部件那里收集文件,并将它们全部复制到一个平面发布目录 (%_FLATRELEASEDIR%) 中。来自 BSP 的文件和目标文件夹内容被复制进来,以便连同来自 BSP 的 Files 目录中的、特定于 BSP 的配置设置在 BSP 阶段中生成模块。使用 IDE 时,将在所有文件已复制到 _FLATRELEASEDIR 之后再生成 Platform Builder 项目。

返回页首

MAKEIMG 阶段 (makeimg.exe)

这是生成过程的最后一个阶段。它将所有内容组合到一个二进制映像文件中,以便放在目标硬件上。它的实现过程分为三个主要的内部阶段。

第一个阶段是将所有不同的配置文件(BIB、DAT、REG、DB £­ 随后我们将详细介绍这些文件)合并到对应于每种类型的一个主文件中。下表列出了这些文件和它们对应的主合并文件。

原始文件

合并后的文件

说明

Common.bib, Config.bib, Project.bib, Platform.bib

Ce.bib

标识要组合到操作系统映像中的所有 Windows CE 文件。

Common.reg, Project.reg, Platform.reg

Reginit.ini

提供操作系统映像的注册表项集合。

Common.dat, Project.dat, Platform.dat

Initobj.dat

提供操作系统映像的目录和文件位置的说明。

Common.db, Project.db, Platform.db

Initdb.ini

定义在 Windows CE 对象存储区中创建任何数据库。

注册表文件 reginit.ini 将进一步压缩成为 default.fdf。还可以使用 PBMERGE.exe 在您自己的设置中对添加到系统中的驱动程序或其他应用程序进行合并。(IDE 中的 CEC 文件允许自动添加 BIB 条目。)

在合并后的第二阶段中,makeimg 将处理在 LOC 文件中指定的所有 EXE 和 DLL 模块,以便替换为生成所指定的当前语言的资源。

更新资源之后,makeimg 将运行 ROMIMAGE,这是第三阶段。该阶段将链接和定位映像中所有就地执行的代码文件,并为所有其他文件创建 ROM 文件系统映像。该文件系统将与 RAM 和其他文件系统在 Windows CE 单根文件系统中进行合并。ROM 中的所有文件位于 \Windows 文件夹中。

RomImage 将最终的映像生成为 NK.BIN,并且可以选择将其生成为 SRE 或适合直接烧进闪存的绝对二进制映像。SRE 是一种基于 ASCII 十六进制文本的文件格式,很多嵌入式系统工具和 ROM/FLASH 程序员都使用该格式。BIN 文件是 Microsoft 特有的格式,类似于 SRE 或 Intel 的 HEX 格式。但是,BIN 文件不使用 ASCII 十六进制字符,而是使用实际的二进制数据,因而使映像文件大小减小了大约一半。

生成配置文件

REG 文件

Windows CE .NET 生成过程的 REG 文件使用了与其他 Windows 版本的 REG 文件几乎相同的格式。主要差异是从文件顶部删除了 REG 版本标记。这样做可以防止您意外地将 Windows CE REG 文件合并到开发工作站的注册表中,因为双击 REG 文件的默认操作正常情况下是合并数据而不是编辑文件。(我对第一个做此操作并认识到这会是一个困难问题的 Microsoft 开发人员感到遗憾和感激!)语法相当简单。键名要在括号中指定,并且基于一个系统定义的键。通过使用键名、数据类型和数据值将数据指派给子键,并使用 @ 来标识键的默认值。

[HKEY_LOCAL_MACHINE\SOFTWARE\MegaSoft\KillerApp]
   "Version"=dword:0400
   "Build"=dword:0b3f
   "Greeting"="Howdy!"
   "Messages"=multi_sz:"Windows CE .NET is Cool!","KillerApp iz da BOSS!"
   "AppData"=hex:01,00,02,00,03,00

在该示例中,为 MegaSoft 软件公司的 KillerApp 创建了新的键。将为该键添加下列值。

名称

类型

Version

REG_DWORD

0x0400。DWORD 值类型总是十六进制的,因此没有使用“0x”前缀。

Build

REG_DWORD

0x0b3f

Greeting

REG_SZ

"Howdy!"

Messages

REG_MULTI_SZ

"Windows CE .NET is Cool!\0KillerApp Iz da BOSS!\0\0"

AppData

REG_BINARY

01,00,02,00,03,00 这里同样总是假设采用十六进制。

DAT 文件

DAT 文件用来指定当系统冷启动时文件系统应当如何初始化 RAM 文件系统结构。可以在 RAM 系统中创建完整的文件系统结构,来满足应用程序和最终用户的需要。文件系统将把在 initobj.dat 文件中指定的所有文件复制到为它们指定的文件夹中。请记住,所有 ROM 文件都已经存在于 \Windows\ 文件夹中,所以将 EXE 和 DLL 文件复制到在 DAT 文件中的、基于 RAM 的文件夹中只是浪费空间。您应当创建快捷方式文件来引用在 windows 文件夹中的 EXE。

DAT 文件的语法有点古怪,但并不复杂:

root:-Directory("Program Files")
Directory("\Program Files"):-Directory("KillerApp")
Directory("\Program Files\KillerApp"):-File("KillerApp.lnk","\Windows\KillerApp.lnk")

该示例在文件系统的根创建 Program Files 文件夹。在该文件夹内部,它创建了一个名为 KillerApp 的新文件夹,最后将 KillerApp 快捷方式(.LNK 文件)复制到新创建的文件夹中。用户现在可以导航到 Program Files\KillerApp,并单击快捷方式启动应用程序。

DB 文件

DB 文件用于为对象存储区定义默认的、基于 RAM 的属性数据库。语法有点神秘,但有说明。对于 Platform Builder 生成的系统,除了为 ActiveSynch 设置自动连接,很少需要使用数据库,如下所示:

; This is the database initialization file.
; format is as follows -
; Database : <db name> : <type in hex> : <num sort order> : <hex propid> : <hex flags> ....
;    CEDB_SORT_DESCENDING         0x00000001
;    CEDB_SORT_CASEINSENSITIVE    0x00000002
;    CEDB_SORT_UNKNOWNFIRST       0x00000004
;    CEDB_SORT_GENERICORDER       0x00000008
; A database specifier can be followed by any number of record specifiers
; Record :
; A record specifier can be followed by any number of field specifiers
; Field : <hex propid> : <value> [ either string or hex dword ]
; End   (ends a matching database or a record context)

Database: "DB_notify_events" : 0 : 1 : 0001001F : 0
; 0001001F - PROPIDR_NAME
; 0002001F - PROPIDR_CMDLINE
; 00030013 - PROPIDR_EVENT
Record :
Field : 0001001F : "repllog.exe"
Field : 0002001F : "AppRunAtRs232Detect"
Field : 00030013 : 9
End
End Database

该 DB 文件将通知数据库设置为一旦触发 RS232 事件就运行 REPLLOG。这将在用于 ActiveSynch 的默认“热插拔”端口上启动连接过程。

BIB 文件

ROMIMAGE 使用二进制映像生成器 (BIB) 文件来对它应当如何配置 ROM 进行配置。BIB 文件只是以关键字定义四个不同节的纯文本文件。

模块节以在独立的一行上的关键字 MODULES 进行标识。在模块节中,列出了将要就地执行 (XIP) 的代码的可执行文件模块。文件节(关键字 FILES)列出了要放在映像中的其他文件(位图、数据文件、HTML 页等等)。它还可以指定不是专门用于 XIP 的可执行文件模块。很少使用的诊断应用程序很适合被指定在这里。默认情况下,文件节中的项目经过了压缩,以减小大小。

模块和文件节的条目的语法非常简单:

<Target Name> <Whitespace> <Workstation path> <memory Section> <flags>

<目标名>是出现在 ROM 中的该文件的名称。<工作站路径>是 ROMIMAGE 将用来查找实际文件的路径(通常基于 $(_FLATRELEASEDIR))。内存节将是几乎没有例外的“NK”。(启动加载程序是一个常见的例外)。

下表总结了这些标志:

标志

用途

C

压缩(默认用于文件节)

U

未压缩(默认用于模块节)

R

只压缩资源

H

隐藏文件

S

系统文件

BIB 文件的剩余两个节通常放在 Config.bib 文件中(在 makeimg 阶段中与其他 BIB 文件合并以生成 ce.bib)。它们是:

  1. 内存节,用于描述系统的内存布局。它的语法是:

    <name> <Virtual Address> <Size> <TYPE>
    

    其中 TYPE 是下列值之一:

    说明

    RAM

    指定一个可用于运行进程和基于 RAM 的 Windows CE 文件系统的 RAM 区域。该区域必须是连续的。

    RAMIMAGE

    指定应当像 ROM 一样对待该区域。内核会将应用程序的所有可写入的节复制到 RAM 中,并在启动应用程序进程之前固定内存地址。

    RESERVED

    指定某个 RAM 区域是保留区域。当前,Romimage.exe 忽略该字段,所以它只充当一个注释。该内存可能是视频帧缓冲区,或直接内存访问 (DMA) 缓冲区。不要让保留区域与其他内存区域发生重叠。Windows CE .NET 提供了通过编程来分配这样的缓冲区的手段,所以实际上现在使用保留区域已经过时了。

  2. 配置节指定很多杂项设置,包括 ROM 的大小和宽度(如果使用原始二进制映像格式 (ABX=ON))。

返回页首

小结

既然已经考察了生成过程的各个部分,让我们快速回顾该过程,并作一个小结。

  1. sysgen 阶段将筛选操作系统的头和库,并可选择筛选 BSP。

  2. BSP 阶段将生成 OAL 并将它链接到内核,然后生成驱动程序并将本机驱动程序链接到 GWES。

  3. Buildrel 阶段将数据文件和可执行文件复制到 _FLATRELEASEDIR 中。

  4. Makeimage 阶段将合并 BIB、DAT、DB 和 REG 文件,把注册表压缩到 default.fdf 中,链接并定位在合并后的 CE.bib 的模块节中的所有模块,并生成映像文件。

在 IDE 中使用 CEC 文件进一步扩展上述功能,即实际上允许在所有阶段之前和之后注入功能。我们将在以后的有关主板支持软件包的文章中讨论它。

返回页首

以后要介绍的内容

在本文中,我们逐步地介绍了典型的生成和下载方案,并第一次讨论了生成系统的工作原理。在以后的几个月里,我们将更深入地讨论我们已经接触到的每个区域,包括工具(Platform Builder 和 Remote Tools)和用来自定义 Windows CE 操作系统的技术。

Get Embedded

Mike Hall 是 Microsoft Embedded and Appliance Platform Group (EAPG) 的产品经理。Mike 从 1996 年起就参与 Windows CE 工作,他参加过开发人员支持、嵌入式系统工程以及嵌入式产品组。工作之余,Mike 喜欢与家人在一起,摆弄些小玩意,或者骑上 Honda ST1100 去兜风。

Steve Maillet 是 Entelechy Consulting 公司的创始人兼资深顾问。自 1997 年 CE 问世以来,Steve 一直在为客户提供培训以及开发 Windows CE 解决方案。Steve 是 Microsoft Windows CE 开发新闻组的热心参与者。当他不在计算机旁边忙碌时,Steve 喜欢参加附近的跳伞运动。

posted on 2007-12-24 20:45  WindowsCE  阅读(1213)  评论(0编辑  收藏  举报