我们已在全世界举行了一系列 Windows Embedded
Essentials (WEE)
活动,国家和地区包括:印度、德国、中国台湾地区、韩国、日本和中国。而且我们在美国也举办了活动:在波士顿和圣何塞。我们最近还在旧金山举办了嵌入式系统会议
(ESC West)。WEE 活动有很多会议和动手实验,涉及
Windows CE .NET 4.2、Visual Studio(R) .NET 2003
托管应用程序开发(其中还有一个故事 …,稍后将有详细阐述)和
Windows XP Embedded。您可能对有关 ESC West 和 Visual
Studio .NET 2003 的故事感兴趣,这个故事与 Windows XP
Embedded 有关,请耐心等一会。
ESC West 的动手实验很“有趣”;通常,在活动之前我们有时间用
Windows XP SP1、Visual Studio .NET 2003、Windows CE .NET 和
Windows XP Embedded 建立一台“主 PC”。Windows CE .NET 和
Visual Studio .NET 实验室都使用 Windows CE
模拟器作为操作系统和托管应用程序的目标,因此是不依赖硬件的。对于
Windows XP Embedded 来说,我们通过使开发 PC
双启动进入 Windows XP Embedded
映像。对于代表来说,这当然是很好的体验,但在设置机器时这会导致出现某些问题。
结果,对于 ESC West,我们在实验室中让 PC
运行四个不同的硬件配置。这意味着我们应当在四个“主”PC
中的每一个上运行目标分析器探测 (TAP),并使用组件设计器基于
devices.pmq 文件创建新的组件,然后生成并测试
Windows XP Embedded 操作系统。在 ESC West
中,活动之前我们并没有访问实验室。在晚上较早的时候,我们发现某些实验室
PC 在用不同硬件运行,并且 Ghost
未能将映像部署到实验室中的某些机器上(由于某些
PC
的硬盘驱动器比原始主映像小)。我们请我们信任的技术支持小组
(TSG) 人员修复 Ghost 问题,这让 Doug Boling
和我有时间考虑 Visual Studio .NET 实验室的事情。
安装 Virtual PC
安装 Virtual PC 很容易;安装非常干净。一旦安装了 Virtual PC 2004,就需要确定如何启动和运行
Windows XP Embedded 操作系统。要完成这个任务,有两个选择。
1.
|
启动 Virtual PC 后进入 MS-DOS。
|
2.
|
|
3.
|
将 devices.pmq 文件移回我们的开发 PC。
|
4.
|
生成 Windows XP Embedded 系统
|
问题是,如何将 Windows XP Embedded 操作系统转移到 Virtual PC 并启动映像。
1.
|
启动 Virtual PC 后进入 Windows XP。
|
2.
|
|
3.
|
|
4.
|
生成 Windows XP Embedded 系统。
|
毫无疑问,启动 Virtual PC 后进入 Windows XP
有很多优点。
使用 Windows XP 作为 Windows XP Embedded
映像的宿主操作系统可以提供很多好处:首先,Windows
XP 有很好的网络支持,使得能够在 Virtual PC
上共享文件夹,然后把我的 Windows XP Embedded
映像直接从开发 PC 放到 Virtual PC
上并启动映像。其次,由于我不必重新启动开发
PC 就能测试操作系统映像,所以我还能远程调试
Windows XP Embedded 操作系统和应用程序。第三,Virtual
PC 的关机/重新启动速度非常快。
我决定将 Windows XP 安装在 Virtual PC 上作为“宿主”操作系统。然后,我可以在
Windows XP 上运行 TAP
以捕获基本硬件配置。但是怎样将 Windows XP
安装在 Virtual PC 上呢?实际上,Virtual PC 是个“裸”PC
盒;您需要为 Virtual PC
的硬盘驱动器配置大小和分区信息。Virtual PC
可以共享桌面硬件,这意味着可以从开发 PC
的软盘驱动器或从开发 PC 的 CD-ROM 启动 Virtual PC。我首先从物理软盘驱动器启动进入
MS-DOS,以便之后可以在 Virtual PC
的硬盘驱动器上运行 FDISK。这使我能够配置硬盘驱动器的分区信息。我选择了
2GB 主分区(以便启动和运行 Windows XP)和 700MB
第二分区以便启动和运行 Windows XP Embedded
操作系统。
下一个步骤是以某种方式安装 Windows XP,因为
Windows XP 安装程序无法从 MS-DOS
运行。因此我决定安装 Windows 98,然后从那里运行
Windows XP 安装程序。这样,我可以从 Windows XP
安装 CD-ROM 启动,而不需要安装 Windows 98。安装过程非常顺利。
下面是 Virtual PC 内部的 Windows XP SP1。注意气球通知安装新的更新…这恰好与在桌面上运行
Windows XP 一样(这是个好主意,对不对?)。
图 1:Microsoft Virtual PC
内部的 Windows XP SP1
只是为了好玩,并且因为我有点空闲时间,我还决定在
Virtual PC 内部运行 Windows 2.03,看看事实是否如此
… 从 Windows 2.03 发展到 Windows XP
真是件令人惊异的事情。
图 2:Virtual PC 内部的
Windows 2.03
现在,我们已经在 Virtual PC 上安装了 Windows XP,我可以继续配置其余设备,包括将第二个
700MB 分区格式化为 NTFS,并在 Virtual PC 的 C:\
驱动器上修改 boot.ini。
Boot.ini
被设置为系统文件,并且是隐藏的。下面是我修改后的
boot.ini:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP Embedded" /fastdetect
现在我启动 Virtual PC,它会提示选择 Windows XP
或 Windows XP Embedded。
到这里,我们已经准备好配置并生成 Windows XP
Embedded 操作系统映像。我们需要从 Virtual PC
获得硬件快照。这是 TAP.exe 进入的地方。TAP.exe
安装在开发 PC 的 C:\Program Files\Windows
Embedded\utilities 目录中。因为 Virtual PC
支持网络,所以,您可以在 Virtual PC
上创建共享,或创建开发 PC 和 Virtual PC
之间的共享文件夹,并将 TAP.EXE 放到 Virtual PC
上,然后运行 TAP
应用程序。(注:使用共享文件夹也能将 Windows
XP Embedded 操作系统放到 Virtual PC 上。)TAP 生成
XML 文件 devices.pmq,该文件包含 Virtual PC
硬件的快照。一旦有了该文件,就可以使用组件设计器工具创建自定义组件。
您可能知道可以将 devices.pmq
文件直接导入到目标设计器中,这是一个选项。我更喜欢将
PMQ
文件导入组件设计器,然后添加选择器原型。当组件被选入组件数据库后,您就能够从
PMQ
组件中选择单个硬件组件了。为什么可以这样?您可能对生成“锁定”设备感兴趣,这样可以防止他人在设备上安装应用程序。这种情况下,您就可以关闭
CD-ROM、软盘驱动器等等 …
或者,也许您对更新设备感兴趣,那么您可以使用诸如设备更新代理
(DUA) 这样的技术。
我们的 Windows XP Embedded Virtual PC
设备有两个分区:第一个分区 (C:\) 包含 Windows XP,第二个分区
(D:\) 包含 Windows XP Embedded
操作系统映像。在目标设计器中配置目标设备的设置时,我们需要确保启动设备是驱动器
C,并且目标驱动器是 D。我们还需要将 Boot ARC
路径配置为分区 2(请参阅图 3)。
图 3:目标设备配置
我的初始 Windows XP Embedded 映像是以 Information
Appliance
模板(宏组件)为基础的。您可能已注意到,在目标设计器中显示的很多组件是以粗体字显示的。粗体表示这些组件是宏组件,换句话说,它们本身没有任何功能,它们只是将组件从目录中拖到工作区中。创建宏组件相对来说比较容易;也许这可以是下个月的
Windows XP Embedded 文章的主题。
生成操作系统
选择硬件组件和 Internet Appliance
组件(并配置设备的启动参数)之后,我们就可以开始生成操作系统了。
第一步是运行依赖性分析。这会将所有宏组件展开成单独的组件,并从目录中拖入任何依赖组件。例如,平台中的一个组件可能需要
DCOM,而 DCOM 作为一项技术则依赖于 RPC,因此,在依赖性分析阶段,还会将
RPC 添加到平台。
依赖性分析过程无法为我们解析所有功能,因为工具不知道以下情况:我们是从
FAT 还是 NTFS 启动的;我们想要 Explorer 外壳还是
Taskman/CMD
外壳;我们将在用户界面中使用什么语言(Windows
XP Embedded 支持 MUI,即多语言用户界面);或者,我们将使用
NT Loader 还是 EWF
装载程序。我们需要手动解决这些问题。幸运的是,Windows
XP Embedded
提供了很方便的任务列表,使这个过程变得更容易。下面四项是需要我们针对自己的平台解决的问题。
图 4:Windows XP Embedded
任务列表
• |
|
• |
区域和语言选项 – English Language Support
|
• |
用户界面核心 – NTFS Format and FAT Format
|
• |
Windows 登录 – Explorer Shell
|
现在,我们可以将 Windows XP Embedded
操作系统映像生成到 C:\Windows Embedded Images\DriveD
文件夹中。(我们的示例操作系统大约有 250MB。)下一步是将
C:\Windows Embedded Images\DriveD 的内容复制到
Virtual PC 中。Virtual PC 支持网络,并且能够在开发
PC 上共享文件夹。我已经将 C:\Windows Embedded
Images 共享为 Virtual PC 上的驱动器 Z:,因此,我只需将文件从
Z:\DriveD 复制到 D:\。然后,我重新启动并选择
Windows XP Embedded 作为启动目标。
图 5:First Boot Agent (FBA)
Windows XP Embedded 操作系统通过一个称为 First Boot
Agent (FBA) 的过程运行,FBA 负责配置硬件、注册
COM 对象并执行很多其他事务性任务。一旦 FBA
完成,Virtual PC
就会重新启动。这次重新启动之后,我们可以选择
Windows XP Embedded,并启动到最后的 Windows XP Embedded
操作系统映像中。
图 6:启动到 Windows XP
Embedded 操作系统中
由于我们是在开发工具所在的同一台机器上在 Virtual PC 内部启动 Windows XP Embedded,所以我们可以做很多其他(有趣)的事情。例如:我们可以在开发
PC 上安装 Internet Information Server,并使用 DUA 来更新远程 Windows XP
Embedded 操作系统映像。MSDN 上的一个视频显示了该操作。我们可以在开发 PC 上安装 Visual Studio
.NET 2003,并在 Windows XP Embedded 映像上安装 Visual Studio 远程调试组件,然后执行一些远程应用程序开发和调试工作(非常酷)。