嵌入式复习资料

  • 格式:doc
  • 大小:324.50 KB
  • 文档页数:14

下载文档原格式

  / 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统复习资料

一、Windows CE 的体系结构

Windows CE 体系结构采用层次化的设计方法,其层次化体系结构如下图所示:

硬件层:

嵌入式操作系统在整个嵌入式系统中起着承上启下的作用:一方面,操作系统为嵌入式应用程序提供了一个运行平台;另一方面,操作系统要运行在硬件之上,直接与硬件打交道并管理硬件资源。Windows CE 只支持RAM ,X86,SH3,MIPx 架构的处理器。 OEM层:(OEM :original equipment manufacturer,原始设备制造商)

OEM抽象层(OEM Abstraction Layer,OAL )是整个OEM 层的主体。它包含高度硬件相关代码。OAL 主要负责Windows CE

内核与硬件通信。当引导程序引导操作系统结束后,有OAL 负责硬件平台的初始化,包括中断服务例程,实时时钟,计数器,内核调试,开关中断,内核性能检测等工作。OAL 的代码在物理上是内核的一部分,最终经过编译连接,OAL 会成为内核的一部分。 Boot Loader 是硬件开发板上执行的一段代码,它的主要功能是初始化硬件,加载操作系统映像到内存,然后跳到操作系统代码去执行。它加载操作系统映像方式有:串口,USB ,以太网下载。

配置文件是一些包含配置信息的文本文件。这些配置信息通常与操作系统映像或源代硬件层 硬件层 OEM 抽样层

boot 配置文件

驱动程序

OEM 层 内核 多媒体技术

GWES 设备管理器 网络 CoreDLL

对象存储 应用和服务

Ineternet 客户

端服务

第三方应用程序

Windows CE 应用程序

用户界面 操作系统层 应用程序层

码有关。例如告诉编译系统如何编译某些代码,或告诉编译系统如何配置最终的操作系统映像文件。

设备驱动程序直接与硬件外设打交道,是应用程序或操作系统与硬件外设交互的桥梁。不同的外设有不同的驱动程序,如声卡驱动,显卡驱动,USB驱动等等。

在嵌入式系统中有一个与Windows CE的OEM相对应的概念:BSP(板级支持包)。BSP是介于主板硬件和操作系统之间的一层,主要目的是为了支持操作系统使之能正常运行于主板硬件上。

操作系统层:

内核:windows CE的内核表现为NK.EXE进程,它是所有基于windows CE的系统中都存在的核心进程,为设备提供处理器调度,内存管理,异常处理及系统内通信等功能并为应用程序使用这些核心功能提供内核服务。

Core DLL:它是一个会被所有用户进程都加载的动态链接库,应用程序希望访问windows CE提供的服务,只能通过Core DLL.DLL进行。Core DLL.DLL的主要功能是负责应用程序与windows CE 通信以及完成windows CE的系统调度。系统调度是操作系统向应用程序提供的服务,一般以函数的形式提供。

对象存储:为应用程序及其相关数据提供的存储方式,完成管理栈和内存堆,必要时压缩或展开文件无缝的集成基于ROM的应用和基于RAM的数据三项任务。理论上包含文件系统,数据库,系统注册表。

GWES:图形窗口系统负责操作系统中与图形界面相关的部分提供基本的绘图功能和窗口管理器。所有的用户输入(键盘,触摸屏等)相关的驱动程序都由GWES.EXE来加载和管理。

设备管理:DEVICE.EXE是windows CE中的设备管理器。它负责加载,卸载和管理所有不被GWES.EXE管理的驱动程序,也负责加载所有的总线驱动程序和电源管理DLL,同时向系统提供所有关于驱动的API的实现。

网络服务:SERVICES.EXE是负责加载系统服务的进程。它们提供一些后台的处理或者为应用程序提供高级的功能。Windows CE中,FTP,HTTP和TELNET都是以系统服务的形式实现。Windows CE提供单独的API来启动,停止和操作服务。

二、线程与进程的区别

WinCE是一个基于优先级的抢占式多任务操作系统,在WinCE中,每一个运行着的应用程序都是一个进程。在一个进程中可以包含一个或多个线程。

进程是程序的一次动态执行实例。进程与程序不同,当程序被WinCE加载到内存并

开始执行后就变成了一个实例或者说进程。在WinCE中进程本身不参加系统的调度,也没有优先级和上下文。

线程是WinCE中最小的可执行单元。WinCE中真正参加调度的是线程,每个进程

在创建的时候都会创建一个主线程作为该进程默认的执行体。从某种意义上说,进程只是线程的容量。线程除了占有内存外,还占有其他资源,例如处理器的寄存器和栈,每个线程都有自己独立的栈。这些资源构成了线程的上下文。

进程总是先于线程创建而后与线程撤离,也只有在进程中才有可能创建线程。同一进程中的多个线程共享该进程的地址空间,这些线程可以执行同一段代码、处理同一堆

数据,还能共享内核对象的句柄。

知识拓展:

WinCE最多只支持32个进程同时运行。每个进程占据32MB的虚拟内存空间。由于操作系统本身也被分成多个进程,因此,用户实际可用的进程数只有不到三十个。因此,在构建复杂的应用程序时,如果需要同时处理多个任务,那么应该选择多线程解决方案而不是采用多进程。

线程可以运行在核心态和用户态。在核心态,线程可以访问操作系统所有的资源。

三、线程的调度

线程的调度是抢占式的,WinCE使用的是基于时间片轮转算法对线程进行调度的,也就是说,对于处于就绪状态列队的线程,先分给优先级更高的线程以时间片,当时间片用完后,无论线程是否执行完毕,都退回就绪状态列队中继续等待下一次时间片的分配。

WinCE的线程被分为256个优先级,从0~255, 0的优先级最高。通常,应用程序能使用的优先级为248~255这八个最低的优先级,0~247供驱动程序和内核使用,这样做的目的是为了保证系统的可靠性和安全性。

应用程序可使用CreateThread( )函数创建一个新线程。结束线程,可以从线程的执行体函数返回,也可以使用WinCE中的ExitThread( )和TerminateThread( )函数结束线程。

四、WinCE内核启动过程

在NBOOT引导EBOOT后,EBOOT加载并引导WinCE操作系统(NK)。

首先,eboot跳转到OAL.exe的startup函数中执行。startup的作用是初始化CPU。

startup函数执行完后将跳转到Kernelstart函数中,这个函数的主要任务就是为WINCE操作系统设置页表并且启用MMU。

之后KernelStart函数就会调用ARMInit函数。

ARMIint函数有三个主要的任务:

⑴是调用KernelRelocate( )函数进行内核全局变量重定位。

⑵全局变量重新定位之后,对内核启动所需要的KDataStruct结构体

⑶是调用函数FindKernelEntry通过TOC找到kernel.dll的入口点函数地址

调用函数ARMInit函数后返回到NKStartup函数。

NKstartup函数的主要工作如下:

⑴从NK Loader传递过来的KDataStruct结构体数据中获取到供自身启动所需

要的数据信息,

⑵定位对WINCE6.0特有的OEMGLOBAL结构体的初始化函数OEMInitGlobals地址,该

结构体构建了内核和OAL层之间进行通信的桥梁。

⑶调用函数ARMSetup为操作系统内核进程填充虚拟内存0XA0000000~0XBFFFFFFF 范围的uncachable静态映射区域