作者:hejishan
转自:http://blog.csdn.net/hejishan/article/details/2170343
这个帖子试着解答一些希望学习Windows CE的初学者经常问到的问题,欢迎提出不同看法。
Q:什么是嵌入式系统?
国际电气和电子工程师协会(IEEE)对嵌入式系统的定义是这样的:嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
但是这个定义非常的难于理解——句子的主干:“嵌入式系统是装置”——并且不太会被计算机行业的人士接受,为什么呢?因为做出这个定义的组织是IEEE,是搞电子的一群人,在他们眼里,当然是Device比较重要。Google一下,还可以找到另外一个定义,我觉得这个定义是比较不错的:
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。
这样句子的主干就成了“嵌入式系统是计算机系统”。我们可以通过上面的定义,挖掘嵌入式系统的三个特点:
(1) 嵌入性:由于是嵌入到对象系统中,必须满足对象系统的环境要求,如物理环境(小型)、电气/气氛环境(可靠)、成本(价廉)等要求。通俗一点说,嵌入式系统通常需要与某些特定的应用领域紧密结合。
(2) 专用性:软、硬件的裁剪性;满足对象要求的最小软、硬件配置等。一般而言,当嵌入式系统开发结束之后,它的用途也就被定下来了,一般不会改变。例如,我们不可能用投影仪去听mp3,虽然投影仪上的硬件足以应付对mp3的处理。
(3) 计算机系统:嵌入式系统必须是能满足对象系统控制要求的计算机系统。与上两个特点相呼应,这样的计算机必须配置有与对象系统相适应的接口电路。
总之,嵌入式系统与我们平时接触的桌面PC还有企业后台服务器的差别还是比较明显的。这些差别会随着大家的学习而越来越深刻的体会到。
随着互联网技术和消费类电子产品的高速发展,嵌入式系统近年来也得到了飞速发展,近年流行的一个概念,叫“泛嵌入式系统”。意思是嵌入式系统原本的概念早就被延伸了。随着PDA,智能手机等新兴的设备加入到嵌入式的阵营,为PDA、智能手机开发应用程序从广泛意义上来说也可以算得上是嵌入式开发,而为此类设备开发应用程序与为桌面设备开发应用程序的差别不大,因此,嵌入式开发与桌面开发之间的界限越来越模糊了。
Q:什么是Windows CE?
Windows CE是微软公司开发的一个32位、多任务、多线程的嵌入式操作系统。它可以用在手机、机顶盒、智能手持设备、网关、数字媒体设备、工业控制等多种场合。Windows CE支持X86、ARM、MIPS和SH四种处理器架构。并支持WiFi,USB 2.0等新型设备,并具有强大的多媒体功能。
Windows CE操作系统是模块化设计的,整个系统被划分为数百个模块,嵌入式系统开发人员可以根据系统的需要,来选择自己需要的模块,从而达到减小系统体积目的。一个最小的Windows CE可运行内核只需要几百KB。而一个功能完备的Windows CE映像也不会超过64MB。此外,微软开放了部分Windows CE的源代码,并且允许开发人员对这部分源代码进行修改。
Windows CE自1996年发布了第一个版本,目前最新的版本是5.0。它的6.0版本会在2007年发布。
Q:Windows CE与微软其他Windows版本之间的关系怎么样?
目前,微软的操作系统基本可以分为三大领域:桌面OS、服务器OS和嵌入式OS。桌面OS也就是我们熟悉的Windows XP,Windows 9x等。服务器OS包括Server系列,像Windows 2000 Server和Windows Server 2003。这里就不再详细介绍了。
嵌入式OS也分为两类,一类是Windows XP Embedded,基本上就是把桌面版本的XP做了组件化。另一类就是Windows CE。Windows CE和Windows XPE统称Windows Embedded。
Q:什么是Windows Embedded?什么是Windows Mobile?什么是Windows Automotive?
Windows Embedded是基于Windows的嵌入式操作系统的统称。目前Windows Embedded家族包含两款产品:Windows CE和Windows XP Embedded。
Windows Mobile是搭建在Windows CE之上的针对移动领域的家族产品集合。也就是说Windows Mobile的内核还是Windows CE,只不过在Windows CE之上搭建了一些针对这个领域一些特有的行业应用组件,例如手机图形界面,短信息应用等。目前Windows Mobile包含Pocket PC和Smartphone两款产品。Pocket PC针对PDA设计。Smartphone针对智能手机设计。
Windows Automotive也是搭建在Windows CE之上的针对汽车电子领域的产品。包含了一些汽车电子上比较常用的组件,例如导航系统。
Q:Windows CE与嵌入式Linux等其他嵌入式操作系统如何比较?
由于嵌入式系统的特点而决定的,在嵌入式领域不可能有一款嵌入式操作系统可以一统嵌入式OS的天下。不同的嵌入式操作系统有不同的优缺点。嵌入式开发人员可以根据应用的具体需要进行选择。
与其他嵌入式操作系统相比,Windows CE的优点有如下几点:
学习 / 使用简单:微软提供了方便的IDE和开发工具,对于OS的定制、裁减、交叉编译等都相对简单。此外,Windows CE的应用程序开发接口也是Win32 API,与桌面Windows的基本一致。这也方便了桌面Windows开发人员向Windows CE嵌入式开发过渡。
图形界面优秀:这个理由或许是许多人员选用Windows CE的主要原因。Windows CE的图形和多媒体能力是非常优秀的,可以方便的支持多种视频音频格式。此外还支持DirectX多媒体接口,这对于开发多媒体应用(例如电子地图导航、多媒体播放器等)非常方便。
应用集成度高:Windows CE自带了很多应用程序,例如Web浏览器,多媒体播放器,Office文件察看器等。这对于快速的开发一款产品相当有用。此外,互联网上有数以万计的为Windows CE开发的应用程序。
与其他嵌入式操作系统相比,Windows CE可能有如下缺点:
对硬件要求高:Windows CE要求硬件必须有32位的CPU和MMU,和数MB的RAM,虽然Windows CE可以裁减到几百K,但是对于一些小型的设备(例如一些航天设备只有64KB的ROM和几百KB的RAM),Windows CE依然不适合这类的领域。
实时性和可靠性:虽然Windows CE在实时性上下了非常大的功夫,并且实时性与桌面Windows相比已经有了质的提高,但是在一些实时性和高可靠性的场合,Windows CE可能依然不适合。
授权费用:Windows CE是按照license方式来收钱的,根据用户选择的组件不同,每个Windows CE的license可能要到十几美元左右。
Q:学习Windows CE的方向有哪些?
与桌面操作系统和服务器操作系统下的软件开发不同,为嵌入式操作系统开发软件可不只是写写应用程序那么简单。我们常常要深入到内核,甚至要深入到硬件。根据不同的开发层面,我们把Windows CE 下的嵌入式软件开发者分为下面三类:
第一类我们称之为应用程序开发者。此类开发人员与传统的通用操作系统下的应用开发人员比较相似。他们通常是利用操作系统提供的API(Application Programming Interface,应用程序编写接口),应用程序库(例如C 运行时库,Visual Basic 运行时库)或应用开发框架(例如J2EE 与.NET Framework)来编写代码。他们开发的代码通常运行在用户态,无需直接对硬件进行操作。他们所关注的是通常是应用功能和业务逻辑的实现。此外,他们的程序通常是直接与最终用户打交道的。
第二类是操作系统平台的提供者。此类开发人员的主要职责是针对具体的应用环境,对嵌入式操作系统进行裁减,向第一类开发人员提供应用程序运行的平台。他们通常要对所裁减的操作系统的各个模块的功能了如指掌,这样才可以针对具体的应用环境,搭建出合适的平台,使资源达到最节省。例如,一个运行在自动取款机上的嵌入式操作系统应不应该加入MPEG4 播放模块,管理数码相机的嵌入式操作系统中“蓝牙”网络协议栈是否必要……。此外,为了满足应用需求,他们有可能还需要对所裁减的嵌入式操作系统进行一些扩充,增加嵌入式操作系统所不支持的功能,编写一些比较上层的驱动程序通常是必要的。例如,用于视频会议的嵌入式系统要用到USB 摄像头的支持,如果该嵌入式系统没有提供USB 摄像头的驱动程序,就需要此类开发者来提供。在现实的世界中,除了微软向外界提供Windows Mobile和Windows Automotive,还没有发现有公司专门定制操作系统。一般这类角色通常都由第一类或第三类开发人员兼任。
第三类是内核/驱动开发者。嵌入式操作系统与通用操作系统最显著的区别之一是它的可移植性。一款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。为了使嵌入式操作系统可以在某块具体的开发板上运行,嵌入式操作系统的编写者通常无法一次性完成整个操作系统的代码,而把一部份与具体硬件设备相关的代码作为抽象的接口保留出来,给提供硬件的OEM 厂商来完成。这样才可以保证整个操作系统的可移植性。这些代码通常是BSP(Board Support Package,板级支持包)的一部分。例如,不同的处理器和开发板通常都会提供时钟支持,用来得到当前的时间日期,但是时钟的实现方式却不胜枚举,如何告诉嵌入式操作系统当前的时间,就是此类开发人员要解决的任务。这一类开发人员不但要对嵌入式操作系统提供的硬件接口了如指掌,还要对操作系统运行的硬件有极为深入的了解。有可能此类开发人员会同时身兼软件工程师和硬件工程师双种身份——让嵌入式操作系统在自己设计的硬件平台上运行起来。
通常第一类软件开发者的数目最多,第三类软件开发者的数目最为稀少。从软件角度来看,一般把应用开发称作上层开发,而把驱动等系统开发称作底层开发。所以,这三类软件开发者的结构通常呈现出“倒三角型”。
就目前国内市场上来看,无论是应用开发还是内核/驱动开发都有良好的前途(钱途)。国内基于Windows CE的应用程序开发主要集中在Windows Mobile这一块,也就是给Pocket PC和Smartphone开发应用程序。此外,还会有一些公司需要开发Windows CE的BSP和驱动程序。从报酬来看自然是后者要高于前者,这个与开发难度是成正比的。
但是应用开发与内核/驱动开发都有自己的知识体系,而且它们的交集并不多。如果两者兼顾可能需要花费大量的时间与精力。建议学习Windows CE的人根据自己的喜好对这两者进行选择,对自己的能力有12分自信的则可以“通吃”。
Q:学习Windows CE需要哪些基础知识?
根据学习方向的不同,基础知识的要求也不同。
如果立志做一个优秀的Windows CE下的应用开发人员,则不需要了解太多的硬件,关键是要对应用程序开发接口,包含Win32 API,.NET Compact Framework等有详尽的了解。因此,如果有桌面Windows开发的经验自然是最好的。例如C / C++语言,Windows程序设计经验。.NET开发经验等等。
如果要做一个内核/驱动开发人员,则一方面需要了解操作系统的基本原理,另一方面需要了解一些硬件的工作原理等知识。因为无论是编写BSP还是编写驱动程序,都需要直接对硬件打交道。具体而言,可能有如下一些知识:汇编语言(ARM,X86)。微机原理,组成原理,操作系统……
Q:目前有哪些比较好的参考书?
由于Windows CE最近几年才开始流行,所以市场上的参考书并不是很多,最好的资料还是Windows CE自带的帮助文档。下面几本书可以读一下:
《Windows CE内核定制及应用程序开发》:以Windows CE 4.2为蓝本,基本上是一本platform builder的用户手册。可以熟悉PB,对熟悉内核和驱动帮助不大。
《Windows CE嵌入式开发入门--基于Xscale架构》:看目录非常不错,但是我没有看过书的具体内容。
《WINDOWS CE实用开发技术》:作者是北京交通大学的张冬全老师,张老师在国内Win CE培训方面很有名气,可惜我也没有读过这本书,看目录很好。
《Windows CE.NET系统分析及实验教程》陈向群老师的作品,主要是分析Windows CE开放的部分的源代码,适合想知道CE底层的人阅读。