WinCE启动时频繁死机的原因分析及解决办法.docx
文本预览下载声明
PAGE 1
PAGE 1
WinCE启动时频繁死机的原因分析及解决办法
WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Windows CE的图形用户界面相当精彩。 Windows CE作业系统是Windows家族中的成员,特地设计给掌上型电脑(HPCs)所使用的电脑环境。这样的作业系统可使完整的可携式技术与现有的Windows桌面技术整合工作。Windows CE 被设计成针对小型设备(它是典型的拥有有限内存的无磁盘系统)的通用操作系统,Windows CE 可以通过设计一层位于内核和硬件之间代码来用设定硬件平台,这即是众所周知的硬件抽象层(HAL)。不象其它的微软 Windows 操作系统,Windows CE 并不是代表一个标准的相同的对全部平台适用的软件。为了足够敏捷以达到适应广泛产品需求, Windows CE 采纳标准模式,这就意味着,它能够由一系列软件模式做出选择,从而使产品定制。另外,一些可利用模式也可作为其组成部分,这意味着这些模式能够通过从一套可利用的组份做出选择,从而成为标准模式,通过选择,能够达到系统要求的模式, OEM 能够削减存储脚本和操作系统的运行。 Windows CE中的C代表袖珍(Compact)、消费(Consumer)、通信力量(Connectivity)和伴侣(Companion);E代表电子产品(Electronics)。与Windows 95/98、Windows NT不同的是,Windows CE是全部源代码全部由微软自行开发的嵌入式新型操作系统,其操作界面虽于Windows 95/98,但Windows CE是基于WIN32 API重新开发、新型的信息设备的平台。Windows CE具有模块化、结构化和基于Win32应用程序接口和与处理器无关等特点。Windows CE不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用Windows 95/98上的编程工具(如Visual Basic、Visual C++等)、使用同样的函数、使用同样的界面风格,使绝大多数的应用软件只需简洁的修改和移植就可以在Windows CE平台上连续使用。Windows CE并非是专为单一装置设计的,所以微软为旗下采纳Windows CE作业系统的产品大致分为三条产品线,Pocket PC(掌上电脑)、Handheld PC(手持设备)及Auto PC. 我们的嵌入式系统用的是arm处理器+WinCE平台,目的是要把WinCE平台从旧版本移植到WinCE6.0平台上。但结果是这个WinCE系统在启动的时候常常会消失失败,而且每次失败的缘由都莫明其妙和不尽相同。 为什么会消失这种状况呢?经过分析和讨论,原来主因是系统的引导过程、内核加载过程、OAL启动过程和硬件驱动加载过程时都存在可能导致的失败的隐忧。本文通过对以上因素进行分析,并提出相应的解决方法。但由于WinCE启动失败会特别取决于硬件平台,因此在详细应用时需要综合考虑和分析。 一 什么是WinCE启动过程? WinCE系统在启动时一般需要三个基本元素:引导初始化、内核加载和OAL初始化等。它们的作用是要完成引导过程的初始化和操作系统执行环境的初始化。其中引导初始化是由引导工具BootLoader完成,主要是完成板级、片级的初始化。例如,通过设置寄存器来完成硬件的初始化,如设置时钟、设置中断掌握寄存器、完成内存映射和初始化MMU的工作方式等。内核加载是指将操作系统内核映像从只读存储器加载或者拷贝到系统的RAM中并执行。OAL是位于操作系统的内核与硬件之间的适配层,也是连接系统内核与硬件的枢纽,它具有屏蔽硬件设备细节以及抽象硬件功能的作用。而OAL初始化则是指通过一组函数来体现出0AL屏蔽和抽象硬件设备的作用。 此外,假如要WinCE系统成为完整的操作系统,还得加上硬件驱动程序、硬件接口程序和应用程序组。因此,即使在一个简洁的嵌入式系统里,WinCE系统启动时是需要加载内核和加载很多组件或驱动程序。 WinCE系统在启动时调用函数的挨次:①CPU执行引导向量,跳转到硬件初始化代码,即Startup函数。②在start up函数完成硬件环境初始化后跳转到KernelStart函数,来对内核进行初始化。③Kernelstart函数调用OEMInitDebugSerial完成对调试串口的初始化;同时调用0EMInit函数来完成硬件初始化工作以及设置时钟、中断;,调用OEMGetExtensionDRAM函数来推断是否还
显示全部