×

适用于Windows CE 6.0操作系统的Multi-bin技术解析

消耗积分:1 | 格式:rar | 大小:0.3 MB | 2017-10-30

分享资料个

 Windows CE是微软推出的一款32位的嵌入式操作系统。它具有良好的多媒体功能和友好的人机交互界面,支持PowerPC、X86、ARM和MIPS等多个系列处理器的体系结构,并为所支持的处理器提供完善的系统库[1]。它还提供了完善的设备驱动程序和软件开发包,大大缩短了开发周期,节约了电子智能产品的上市时间。在这些产品开发过程中,系统启动时间的时延是影响客户体验(QoE)的重要因素。启动速度受很多因素的影响,包括定制系统镜像文件的大小、系统内核加载驱动的多少、内存占用的大小等。为了减少系统启动时延,目前比较流行的做法是在Bootloader中添加LOGO启动画面,从而在视觉上降低客户的时延感受[2]。从本质上讲,这种方法并没有从根本上减少系统的启动时延,仅仅是从视觉的角度转移了客户的注意力。
  本文在分析Windows CE 6.0系统启动过程的基础上,设计了一种在Bootloader中实现BinFS文件系统进而完成Multi-bin加载的方法,从而真正达到缩短启动时间的效果,同时还为用户节省了大量的内存空间。实验结果表明,该方法性能稳定,可移植性强,并已经应用到一款基于Samsung 2440处理器的IPTV手持式测试仪系统上。
  1 Windows CE系统启动过程
  Windows CE系统启动过程如图1所示。
  适用于Windows CE 6.0操作系统的Multi-bin技术解析
  在Windows CE操作系统中,当基于Windows CE的目标设备上电启动或者复位时,系统首先加载并运行Bootloader程序,Bootloader程序进行必要的硬件初始化,然后通过Bootloader再加载并启动操作系统内核映像。启动操作系统内核的过程实际上就是加载并运行OAL(OEM Adaptation Layer)程序的过程。OAL是Windows CE操作系统内核的重要组成部分,OAL并不能被单独加载并运行,它最终被编译进操作系统内核,从而通过操作系统内核存在并发挥作用,操作系统的启动过程就是一个加载并运行OAL程序的过程[3]。
  系统从启动加载内核映像文件到最后的显示桌面会有一段时间,这个时间段就是通常所说的启动时延。通常情况下为10 s~13 s。为了缩短这段时延,可以将系统映像分为多块,将系统核心启动部分的内容放到内存中,其他部分放到固态存储器(如Nand Flash)中,使用BINFS文件系统读出。即在系统启动过程中,先加载操作系统内核映像的核心部分,而操作系统内核映像的其他部分仍然驻留在Nand Flash中,需要时再从Nand Flash中进行加载,从而大大减少开机读取系统的时间。同时,也不再需要为操作系统预留全尺寸的内存空间,而只需预留最小开机核心部分的内存空间,剩下的作为通用内存空间。这样就使得操作系统内存的使用有了很大灵活性,同时可用系统内存大大增加。从而,在根本上达到了按需加载系统模块到内存的要求。这就是所谓的Multi-bin技术。
  2 Windows CE .bin镜像文件解析与下载
  由Windows CE的开发工具Platform Build编译生成的Windows CE操作系统及Bootloader的镜像文件主要有两种格式类型:以.bin为文件名后缀的记录型镜像文件和以.nb0为后缀的原始型(raw)镜像文件。前者以记录(Record)为单位组织镜像的数据,后者则是镜像在嵌入式系统中运行时的二进制数据快照。其中,.bin文件是一个描述性质的镜像文件,它由文件头(Head)、镜像数据目的起始地址(ImageStart)、镜像数据长度(ImageLength)和多条相对独立的记录(Record)构成。本文以实现Multi-bin的操作系统xip.bin为例进行分析,使用UltraEdit将其打开,如图2所示。
  适用于Windows CE 6.0操作系统的Multi-bin技术解析
  从图2可以看出,文件头(head)由7个字节组成,内容是:42 30 30 30 46 46 0A,即“B000FF\x0A”,这是判断镜像文件是.bin类型的依据。镜像数据目的起始地址(ImageStart,00 00 07 80)由4个字节组成,它定义了镜像文件解析后装载在内存中的起始地址是0x80070000。镜像数据长度(ImageLength,68 07 13 02)也由4个字节组成,它表示.bin镜像文件解析后在内存中占用的总的存储空间大小为(0x02130768)。每条记录(Record)由4字节的起始存储地址(RecordStart)、4字节的数据长度(RecordLength)、4字节的校验码(RecordCheckSum)和RecordLength个字节的记录数据(RecordData)组成。以第一条记录(阴影部分)为例,分别为0x80070040、0x00000008、0x000001E3和0X8007004C434543454。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !