WINCE6.0的体系结构图如下图所示:
图1 WINCE的体系结构
根据上图可以把WINCE6.0体系结构分为硬件层、OEM层、操作系统层和应用层,这四层紧密合作,相互配合来完成从应用程序的调用到对硬件的操作和交互。
1. 硬件层
硬件平台的核心是嵌入式处理器,而嵌入式处理器的种类很多,处理能力和主频的速度各有差异,如果要跑WINCE操作系统,需要处理器包含MMU单元。WINCE6.0支持的ARM、MIPS、x86、SHx这四种CPU体系,在这点上嵌入式linux支持更多CPU体系结构的处理器。
2. OEM层
OEM(Original Equipment Manufacturer,原始设备制造商)层位于WINCE的操作系统层和硬件层,主要的作用是对硬件进行抽象并且提供统一的接口让操作系统来和硬件交互。OEM层主要包括OAL(OEM Abstraction Layer,OEM抽象层)、bootloader、配置文件和驱动程序。
3. 操作系统层
由图1可知操作系统层包括Coredll、文件系统、GWES、设备管理器、驱动(分为用户模式和驱动模式的驱动)、services服务和内核(Kernel)这些部分组成。
3.1 Coredll
coredll.lib,Coredll模块为其他WINCE模块提供核心(core)功能,此模块是WINCE操作系统的一个不可或缺的模块,但它不一定需要所有的组成部分。Coredll模块包含配置OS的结构体、宏定义、函数等重要的内容,这些信息定义在Celog.h、Pkfuncs.h、Pwinreg.h、Pwinuser.h和Windbase.h头文件中,为了引入(import)这些功能,必须链接coredll.lib文件。
Coredll模块包含很多部分,比如battery、cormain等部分,这些部分都是以lib的形式提供,具体看help文档Developing an OS Design->Windows Embedded CE Moudules and Components->Common Windows Embedded CE Modules下的介绍。
WINCE有一个重要的设计思想就是所有的应用程序都不能直接与操作系统或是硬件打交道,如果应用程序需要访问WINCE提供的服务,就只能通过coredll.dll来进行,也就是说如果我们要调用system API时不能直接调用,而是先转到coredll.dll,由它帮我们去调用system API的。另外,WINCE系统除了有system API,同时也提供application API(类似于桌面windows系统的WIN32API),开发者可以通过比如是LoadLibrary(TEXT("winsock.dll"))或在sources文件的链接目标库包含winsock.lib的方式来调用这些application API,比如还有Wininet.dll、Msml.dll和Winhttp.dll等。
3.2 文件系统(filesys.dll)
Filesys.dll主要实现文件系统和存储管理
图2 filesys.dll的功能架构
3.3 GWES(gwes.dll)
WINCE把微软WIN32 应用编程接口(API)、用户接口(UI)和图形设备接口(GDI)的库整合到图形窗口和事件子系统模块(GWES)中,GWES是用户、应用程序和OS之间的接口,它支持构成WINCE用户接口的所有窗口、对话框、控件、菜单和资源,还提供了光标、位图、文字和图标信息,GWES负责加载及管理HID驱动、显示驱动和键盘驱动。
3.4 设备管理器(device.dll)
设备管理器被kernel加载并且一直运行,它负责加载、卸载和管理设备驱动及他们的接口,当设备管理器加载的时候,它同时加载I/O资源管理器来从注册表中读取可用资源列表。
4. 应用层
从系统的角度来看,每个应用程序都是WINCE中的一个单独的进程,应用程序运行在优先级较低的权限下它使用操作系统提供的Win32 API来进行系统调用基交互。