2024年4月26日发(作者:)

认识Windows CE操作系统

镜像文件的格式

被BootloaderMain调用的DownloadImage函数负责从开发计算机处下载操作系统

镜像到嵌入式目标设备,它是一个BLCOMMON库函数,不是OEM函数,其实现源代

码在%_WINCEROOT%PLATFORMCOMMONSRCCOMMON BOOTBLCOMMONblcommon.c源

文件中。尽管这个函数的源代码由微软提供,但是用户需要实现几个OEM函数供它

调用,以从以太网端口(或者其他外设端口)读取操作系统镜像数据。下面介绍一

下这个不需OEM用户开发实现的DownloadImage函数的源代码,目的是从中获取

Windows CE操作系统,也包括BootLoader自身所使用的镜像文件的格式信息,这

些信息对于用户的开发和调试工作会有所帮助。

由Windows CE的开发工具Platform Builder编译生成的Windows CE操作系

统及BootLoader的镜像文件主要有两种格式类型——以.bin为文件名后缀的记录

型镜像文件和以.nb0为后缀的原始型(raw)镜像文件,前者以记录(Record)为

单位组织镜像的数据,后者则是镜像在嵌入式系统中运行时的二进制数据的快照。

DownloadImage函数执行的第一步是调用GetImageType函数获知镜像文件的

格式类型。GetImageType也是BLCOMMON库函数,与DownloadImage函数在同一源

文件中实现。GetImageType函数查询镜像文件格式类型的原理十分简单:每一个

Windows CE镜像文件在文件数据的起始位置都有一个7字节的特征码(magic

number),它与镜像文件的格式一一对应如下:

"N000FFx0A"——BL_IMAGE_TYPE_MANIFEST

"X000FFx0A"——BL_IMAGE_TYPE_MULTIXIP

"B000FFx0A"——BL_IMAGE_TYPE_BIN

"S000FFx0A"——BL_IMAGE_TYPE_SIGNED_BIN

"R000FFx0A"——BL_IMAGE_TYPE_SIGNED_NB0

无特征码——BL_IMAGE_TYPE_UNKNOWN

以上的前4种类型都是记录型镜像格式,只有BL_IMAGE_TYPE_SIGNED_NB0代

表原始型镜像文件格式,此外DownloadImage函数把无特征码的

BL_IMAGE_TYPE_UNKNOWN类型也当作原始型镜像来处理。BL_IMAGE_TYPE_MULTIXIP

类型在Windows CE 5.0和5.0以前的版本中用于表示多区段的镜像文件,在

Windows CE 6.0版本中使用BL_IMAGE_ TYPE_MANIFEST类型处理多区段的操作系

统镜像,不再支持BL_IMAGE_TYPE_MULTIXIP类型,仅为了在源代码中保持向下兼

容而保留该类型的定义。