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类型,仅为了在源代码中保持向下兼
容而保留该类型的定义。


发布评论