技术开发 频道

只争朝夕,WinCE快速启动有窍门

  (1)BootLoader的启动原理
  在Windows CE系统中,整个系统的加载启动任务由BootLoader来完成,BootLoader是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。引导程序完成自己的任务后,就将控制权移交给内核。通常引导程序是放置在不易丢失的快闪存储器的开始地址或者是系统冷启动时PC寄存器的初始值。

  (2)内核启动加载过程
  WinCE并不是一个通用的安装版操作系统,在各种嵌入式硬件设备中,一款CE系统通常只会针对某一种硬件平台生成。在整个系统启动时BootLoader通过不同的方式加载CE的内核文件nk.bin。Boot Loader按照WinCE启动方式的不同可分为两大类:一类是下载模式,一类是本地启动模式。当Boot Loader把nk.bin解压到RAM后就把CPU控制权交给CE内核。

  本地启动模式也称为自主模式,即 BootLoader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。而下载模式则是目标机上的 BootLoader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件。因此,选择不同的加载方式是会直接影响内核的启动加载时间的。

  在实现初始化硬件的启动时,在BootLoader目录下会发现一些.s文件,这样的文件是CPU加电后最先执行的代码。接着Oal.exe通过Startup函数完成硬件的初始化。该函数一般是使用汇编语言编写,与CPU关系非常紧密,能完成初始化CPU、内存等核心硬件。在系统硬件初始化完毕之后,Startup调用OALStartUp函数,OALStartUp函数主要完成将OEMAddressTable表传递给内核,然后调用KernelStart函数跳转到内核。在StartUp 函数初始化CPU等核心硬件并跳转到Main函数后,系统就会转入C语言代码执行环境。

  然后,BootLoader在平台调试完毕后可以在不用人工干预的情况下自动加载CE内核了。CE映像文件通常叫做nk.bin,它是Windows CE二进制数据格式文件,不仅包含了有效的程序代码,还有按照一定规则加入的控制信息。当然,也可以选择生成.sre格式的代码文件,但是相于对前一种格式,它的代码要长很多,所需要的下载时间也更长。

  (3)WinCE注册表在启动过程的作用
  在WinCE中注册表扮演着非常重要的角色。与桌面Windows一样,Windows CE注册表(Registry)也是一个系统数据库,用来保存应用程序、驱动程序、用户的设定以及其它一些系统的配置信息,通常还存储着操作系统运作和调用程序的状态信息。

0
相关文章