0 引言
微软的Windows CE系统是被广泛使用的嵌入式系统之一。在产品的研究开发中,一些嵌入式操作系统的启动速度所花时间比较长,Wind-ows CE也不例外。由于各种因素的影响,有些情况下启动甚至超过1 min。而在实际的嵌入式电子产品中客户需要体验一个极速爽快而又稳定的系统,避免长时间等待。因此,如何快速启动Windows CE系统是一个很重要的内容。本文将基于三星公司的S3C2440A处理器和Windows CE
系统,分析Windows CE的启动原理和影响其启动速度的原因,给出加快启动的方案。
1 Windows CE的启动过程
一般嵌入式系统的引导过程如图1所示。其中引导加载程序(BootLoader)是系统加电后运行的第一段代码,主要是通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化MMU等。其次是系统执行环境的初始化,将系统内核(Kernel)和应用程序的映像从只读存储器加载或拷贝到系统的RAM中执行,完成系统内核的加载以及应用程序的启动等。
1.1 BootLoader的启动
BootLoader是在操作系统内核运行之前运行的一段小程序,它可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。引导程序完成自己的任务后,就将控制权移交给内核。通常引导程序是放置在不易丢失的快闲存储器的开始地址或者是系统冷启动时PC寄存器的初始值。
1.2 内核启动时加载过程
BootLoader按照Windows CE启动方式的不同可分为2大类:下载模式和启动加载模式。当BootLoader把nk.bin解压到RAM后就把CPU控制权交给Windows CE内核。
启动加载模式是BootLoader的正常加载模式,BootLoader从存储介质将操作系统加载到RAM中,并从RAM中启动运行操作系统。该过程并没有用户的介入。
下载模式则是BootLoader从开发工作站下载操作系统映像文件到目标设备的RAM,然后再将它写到目标设备的FLASH等存储介质中。该过程要通过串口线或网络连接等通信手段从主机(Host)下载文件。因此,不同的加载模式会直接影响内核启动加载时间。
2 影响Windows CE启动速度的主要因素
影响系统启动时间的因素可以从系统本身和硬件2个方面考虑。
2.1 系统加载
系统在启动时涉及到BootLoader、内核加载、初始化进程、硬件的驱动程序和接口程序以及应用程序组等。因此Windows CE启动速度要与引导程序初始化时间、内核加载时间、硬件驱动的加载时间、应用程序的加载时间等有着直接的关系。
2.2 硬件
显然,CPU的频率及效率、内存的大小及类型等直接影响着系统的启动速度。例如ARM7和ARM9对运行系统的速度是明显不一样的,另外,内存方面选择NoR FLASH还是NAND FLASH其也会对启动速度有一定的影响。
3 Windows CE快速启动的方案
快速启动Windows CE的方案大致有下面几种。由于实验条件的限制,本文主要讨论内核体积、使用Multi-bin技术、串口打印输出、不同注册表形式对启动速度的影响。
3.1 使用合理的闪存和选择适当的Windows CE内核的运行方式
当前应用于嵌入式系统的FLASH从制作工艺角度讲主要分为2种:NOR FLASH与NANDFLASH。NOR的特点是芯片内执行(Execute In Place,XIP),这样应用程序可以直接在NOR FLASH中直接运行,而无需再把代码读到系统的RAM中,但是很低的写入和擦除速度大大影响了它的性能。NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快,但在使用时必须先写入驱动程序,而且,由于不能向坏块写入,这就需要在NAND FLASH上自始自终都必须进行虚拟映射,可能会产生额外的时间花费。因此,选择不同闪存对启动速度有一定的影响。
也正因为上面2种闪存的特点不同,Windows CE的运行方式直接与它们有关,可以分为2类,一是在NOR FLASH上直接运行,二是用NAND FLASH来存储,再加载到内存中运行。前者把内核的可执行映像烧写到FLASH上,可以实现XIP;而后者是先把内核的压缩文件放在FLASH上,启动时先解压,再执行。因此,在NOR FLASH上直接运行会速度更快。
3.2 精简Windows CE内核体积和加载内容
在Windows CE启动过程中,加载内核过程和加载内核之后所占时间是不一样的,前者是从NANDFLASH加载内核到内存,占了绝大多数时间,后者其实只占很小的一小部分时间。因此,可以通过缩短加载内核过程中的时间来实现缩短启动时间。要做到这一点,可以通过缩小内核来实现。也就是组件全部根据所需要的来定制,删除掉所有不必要的组件。其中,最有效的办法之一是缩减字体,去除不需要的其他国家的字库。
另一方面,内核在启动时会有很多静态和延迟加载依赖项,尤其是各种安全性DLL,这肯定增加启动时间。启动时加载的驱动程序、设备和自启动程序也会占用一定的时间。因此,在设备能正常启动和应用的情况下,应以精简的原则,以最小化来加载设备驱动和启动程序,以最少数量的组件和驱动来启动系统,减少不必要的时间延迟。例如可以精简设备上的外壳程序和启动界面等。
3.3 使用Multi-bin技术
Windows CE中提供了Multi-bin的功能。字面上Multi-bin是多个bin的意思,它将整个内核映像分成几部分,在Windows CE启动时可只加载核心部分,这样就能有效提高Windows CE的启动速度。方法如下:
首先,修改Eboot,使其支持BinFN(Binary Rom Image File System)文件系统,支持Multi-bin的下载和烧写,同时在注册表platfor-m.reg中增加BinFN分区。
其次,修改配置文件config.bib,根据实际情况设置各分区空间和类型;并对XIPKERNEL进行规划,将最小化系统内核打包到其中,即在project.bib中的modules和Files中添加必须的内核文件,例如系统必须加载组件有nk.exe,coredll.dll,filesys.exe,fatfsd.
dll,diskcaehe.dll,Fatutil.dll,binfs.dll,fsdmgr.dll,mspart.dll,smFLASH.dll,boot.hv等。
最后,在用Platform Builder定制内核时系统选用的RAM and ROM File System文件系统,注册表格式选用Hive-based Registry,它支持永久保存。
这样经过编译后,将生产的xip.bin和XIPKERNEL.bin文件在EBoot.nb0的引导下进行烧写,完成Windows CE的烧写工作并可以使用Wi-ndows CE系统。
3.4 关闭串口输出
Windows CE在启动时把很多启动信息状态输出,因为串口RETAILMSG等输出打印信息要花一定的时间,故在编译没有出错的情况下把串口输出信息关闭,也可以提高启动速度。做到这点可以在Debug.c文件中去除OEMWriteDebugByte(),OEMReadDebugByte()函数的输出内容。
3.5 选择适当的注册表方式
注册表分为基于RAM的注册表(RAM-Based Registry)和基于Hive的注册表(Hive-Based Registry)两种方式,一般都用于记录着所有应用程序和硬件外设的驱动信息。
基于RAM的注册表把整个注册表作为一个对象存储堆存放在系统的内存中,如果对系统进行冷启动或者系统断电,对注册表的所有改动都会使存储的数据丢失,所以基于对象存储方式实现的注册表一般用于较少断电的系统,或一般不需要冷启动的系统。但如果使用基于RAM的注册表,它会使系统速度更快,占用空间更小,对注册表的读写访问操作会变得非常高效,系统开发者应提供一种使系统能够在断电前后备份和恢复注册表的方法,通常这种备份和恢复注册表的方法的缺点是需要两次启动,在启动过程中必须多一次热启动才能使恢复的注册表有效,因此效率相对比较低。
基于HIVE结构存储的注册表使用文件存储注册表数据,它与系统使用的文件系统的类型无关。这种方式使系统断电前后无须备份和恢复注册表数据,这使系统冷启动时速度更快。
总之,基于RAM的注册表在经常热启动的设备上是非常高效的,在经常冷启动的设备中性能却让人失望;而基于Hive的注册表在经常冷启动或不常热启动的设备中非常高效。因此,采用不同的类型也会影响Windows CE的启动效率,用户应根据实际情况进行合理选择。
4 实验与分析
4.1 实验平台
(1)硬件平台。ARM处理器为三星公司的S3C2440A,标称工作频率为400 MHz;存储器包括2片32 MB SDRAM,1片64 MB的NAND FLASH;设备模块包括USB,LCD,UART。
(2)软件平台。Bootloader:bootloader VER-5.0;操作系统:Windows CE5.O;开发工具:Platform Builder 5.0。
4.2 实验条件
在建立PB工程时选择移动手持设备(Mobile Handheld)模板,其他组件选择如表1所示,就可以实现支持MFC编程、文字表格编辑、MP3播放的手持设备系统,在该系统下得到表1数据。
表2为实现MP3播放功能精简系统前后的比较。精简前的方法是选择移动手持设备(MobileHandheld)模板,加入MP3支持;精简后的方法是选择CustomDevice模板,只选择MP3 Codec,wMA and MP3Streaming和Windows Media Player就可以实现MP3播放,不加入其他所有不必要的组件,从而减小内核体积。表3、表4的数据都是基于MobileHandheld模板下不同注册表RAM和Hive下得到的数据。
4.3 实验结果及分析
表2至表4中对比了相应优化带来启动时间的比较,时间的计算使从开始启动到进入windows CE界面为止。从表2可以看出,使用Multi-bin技术可以很大提升启动速度,缩短了启动时间;而串口输出信息也有一定的影响,特别是在输出信息很多的情况下,所占用的时间是不可忽视的。
另外,表3则表明,内核、组件等的构成系统大小也直接影响着启动的速度,故应当尽量减少系统不必要的内核和组件。
由表4、表5可以看出,在没有修改注册表的时候,使用基于RAM的注册表速度比基于Hive的注册表的略快一些,但在修改注册表之后,由于前者通常需要启动2次,故速度要慢于后者。
5 结语
在嵌入式操作系统Windows CE的开发和使用中,系统的启动速度不仅体现设备的性能,而且也直接影响到使用者的感受和体验。本文先介绍Windows CE的启动流程,分析影响Windows CE启动速度的因素,再提出一些加快启动速度的方案。虽然系统启动还与具体的硬件有关,在具体应用时还需要综合考虑。但本文提出的方法对对基于其他硬件结构下使用WindowsCE系统时优化其启动速度同样有重要的指导意义。