首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

WinCE启动时频繁死机的原因 02

WinCE启动时频繁死机的原因 02

二 导致WinCE启动失败的主因分析


Windows CE在启动时为什么会失败呢?这个问题也一直让我头痛。因为Windows CE启动失败既有软件因素,也有硬件因素。例如,可能是WinCE的启动引导过程有问题、也许是内核加载时有问题、也许是OAL函数调用的隐性问题或者硬件设备本身的问题造成的。所以,解决起来比较麻烦和比较耗时间,也是最让我们头疼的事情。

一般来说,解决和分析WinCE启动失败有一个原则,就是"先软后硬"的原则,也就是说要先分析软件因素再到硬件因素。本文主要是在arm微处理器和Windows CE 6.0平台上进行分析软件因素造成的失败。

(1)引导程序BootLoader导致的失败

在Windows CE系统中,整个系统的加载启动任务由BootLoader来完成,BootLoader是在WinCE内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图和初始化MMU等。从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。因此,只有在引导程序正确的完成自己的任务后,才会将控制权移交给内核。

在WinCE平台上,引导装载程序是在硬件上执行的第一段代码,通常将引导程序放置在不易丢失的存储器的开始地址或者是系统冷启动时PC寄存器的初始值。如果这段小程序代码编写错误,则系统无法完成第一步的引导操作,这是导致启动系统失败的第一个因素。

①BootLoader初始化硬件失败

BootLoader第一个功能是要实现板级和片级初始化硬件,主要是把CPU初始化到一已知状态。在BootLoader目录下,会发现一些。s文件,可能会是init.s或者是reset.s等,这样的文件是CPU加电后最先执行的代码。StartUp 函数是BootLoader的入口函数。该函数一般是使用汇编语言编写,与CPU关系非常紧密,能完成初始化CPU、内存等核心硬件。然后,BootLoader在平台初始化完毕后就可以在不用人工干预的情况下自动加载WinCE内核了。但如果BootLoader在初始化硬件时失败,就会直接导致系统的启动失败了。

②BootLoader加载内核时失败

一般在平台调试完毕后,BootLoader就会加载WinCE内核映像,这也是BootLoader的功能之一。WinCE内核映像文件通常叫做nk.bin,它是Windows CE二进制数据格式文件,不仅包含了有效的程序代码,还有按照一定规则加入的控制信息。

在系统启动时BootLoader可以通过两种不同的方式来加载WinCE内核文件nk.bin.一种是下载模式,另一种是本地启动模式。本地启动模式也称为自主模式,即 BootLoader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。而下载模式则是目标机上的 BootLoader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件。当BootLoader正确的把nk.bin解压到RAM后,就会把CPU控制权交给CE内核。因此,如果Boot Loader处理不当,就可能会造成加载和解压nk.bin文件的失败,这样自然也就会造成系统启动的失败了。
返回列表