您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术基于S3C2440A的Windows CE系统快速启动方案 正文
基于S3C2440A的Windows CE系统快速启动方案

基于S3C2440A的Windows CE系统快速启动方案

点击数:7188 次   录入时间:03-04 11:58:09   整理:http://www.55dianzi.com   嵌入式系统-技术

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上直接运行会速度更快。

www.55dianzi.com
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的注册表,它会使系统速度更快,占用空间更小,对注册表的读写访问操作会变得非常高效,系统开发者应提供一种使系统能够在断电前后备份和恢复注册表的方法,通常这种备份和恢复注册表的方法的缺点是需要两次启动,在启动过程中必须多一次热启动才能使恢复的注册表有效,因此效率相对比较低。

[1] [2]  下一页


本文关键字:Windows  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术