WinCE系统架构图如下所示:
嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。
1.硬件层
硬件层是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。
硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。
2.OEM层
OEM层是嵌入式硬件与Windows CE操作系统的接合层。
OEM层主要由下列模块组成:
(1)OAL(OEM Adaptation Layer,OEM适配层)
OAL是WinCE内核与目标硬件之间的一个代码层,主要用来处理WinCE内核与目标硬件设备之间的通信,其功能主要包括CPU初始化、处理中断、计时器等。
(2)启动加载程序(Boot Loader)
启动加载程序用于将WinCE操作系统内核加载到目标硬件系统的内存并开始启动操作系统的执行。
(3)配置文件
配置文件用于对WinCE操作系统的创建过程进行配置,其主要包括源代码配置文件和映像配置文件。
(4)驱动程序
这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能进行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几遍,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。
驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。
在OEM层的代码构成中,OEM层主要由CSP代码和BSP代码组成,其中CSP支持不同的微处理器体系结构,而BSP支持不同的微处理器扩展和外设,它由Boot Loader、OAL和驱动程序组成。
3.操作系统层
对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。
(1)核心
只有NK.exe为WinCE操作系统的内核。WinCE 5.0的最小内核约为250KB。NK.exe始终运行在较高的优先级和处理器优先级上,除中断例程外,一般不允许操作系统的其他线程抢占它的运行。
(2)Core DLL
最基本的操作系统模块,为其他模块提供核心功能。在绝大多数情况下,Core DLL并不完成实际操作,它只是作为应用层与操作系统层的一个桥梁。
(3)对象存储模块
理论上,对象存储是由文件系统、数据库和系统注册表三种类型的永久存储构成的。WinCE的文件系统又区分为RAM文件系统、ROM文件系统和FAT文件系统。数据的产生和访问是按照存储类型进行的,而与实际使用的物理存储设备无关。
(4)多媒体技术模块
为多媒体硬件提供了相应驱动程序接口,为多媒体应用程序提供了丰富的API,还为多媒体文件和多媒体流提供了丰富的解码与编码。
(5)图形窗口和事件系统模块
GWES集成了图形设备接口(GDI)、窗口管理器和事件管理器。
(6)设备管理器模块
体现为Device.exe进程,提供基本的设备列表管理、即插即用管理、I/O资源分配管理及驱动的加载、卸载和跟踪已经加载的驱动及其接口等,它由内核加载并连续运行,一旦运行就永不卸载。
(7)通信服务与网络模块
为操作系统提供网络驱动接口、网络通信协议及网络应用程序编程接口支持,并提供对个人网络、局域网络和广域网络以及802.1x、蓝牙和红外等无线支持,还为远程实时通信(RTC)提供强大支持。
(8)应用和服务开发模块
提供了活动模块库(ATL)、C运行库、组件服务(COM和DCOM)、消息队列(MSMQ)、微软基础类库(MFC)、标准SDK、SQL Server CE、.NET Compact Frmaework等支持。
4.应用层
相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。如果涉及 Jave方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(比如基于SIP、H.323、Astrisk)方面又较为复杂,并且有难度了。