Chapter1 第1章
认识嵌入式操作系统
操作系统和物联网是今天大众熟悉的二个专业技术词汇。人们拿起智能手机就想到绿色小机器人—谷歌的Android操作系统;使用电脑的时候就想到了Windows操作系统;当人们驾驶汽车时,使用ETC可以自动交费通过高速路的收费站;人们使用小米手环每天记录自己的运动步数,到了晚上,微信运动应用会自动将这些数据同步到云端,运动爱好者们在那里一决胜负。这些都是物联网应用。但是对于嵌入式系统和嵌入式操作系统的认识,人们的观点是不一致的。
什么是嵌入式系统
到底什么是嵌入式系统?什么又是嵌入式操作系统?这些概念不为大众所深入了解。既使我们这些专业人士对于嵌入式系统定义的理解也不尽相同,但概括起来,嵌入式系统的定义应该是这样两种:第一,嵌入式系统是专用的计算机系统,比如有这样的定义,以应用为中心,以计算机技术为基础,软件硬件可裁剪,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统;第二,嵌入式系统是软件和硬件的综合体,最经典的解释出自美国CMP Books出版的Embedded Systems Dictionary的中译本的定义,嵌入式系统是一种计算机硬件和软件的组合,也许还有机械装置或其他部件,用于实现一个特定功能。在某些情况下,嵌入式系统是一个大系统或产品的一部分,例如汽车中的防抱死制动系统。简练一点的定义还有IEEE的定义:嵌入式系统是软件和硬件的综合体,可以涵盖机电等附属装置。从以上的定义我们不难看出,嵌入式系统具备两个最显著的特点:一个是软硬结合;一个是计算功能。因此最近Intel和微软公司也把嵌入式系统称为智能系统,这样的说法也有其道理。
今天,嵌入式系统无处不在,从厨房里的电饭煲、冰箱,到我们每天使用的智能手机、智能手环和手表,它们都是嵌入式系统。还有我们驾驶的汽车和乘坐的高铁、飞机,里面含有许多嵌入式处理器和系统设备;保证我们互联网通信的网络中也有许多路由器、交换机和网关,它们都是嵌入式系统设备。
什么是嵌入式操作系统
每一个嵌入式系统至少有一个嵌入式微处理器(或微控制器和DSP),运行在这些嵌入式微处理器中的软件就称为嵌入式软件,也称为固件(firmware)。初期这些软件都不是很复杂。随着嵌入式微处理器和微控制器从8位发展到16位和32位,整个嵌入式计算机系统也变得越来越庞大和复杂,这就需要有一个操作系统对微处理器进行管理和提供应用编程接口(API)。于是,实时多任务内核(real-time
kernel)在20世纪70年代末应运而生。进入20世纪80年代,嵌入式系统应用开始变得更加复杂,仅仅只有实时多任务内核的嵌入式操作系统已无法满足以通信设备为代表的嵌入式开发需求。最初的实时多任务内核开始发展成一个包括网络、文件、开发和调试环境的完整的实时多任务操作系统(称为RTOS)。到了20世纪90年代,嵌入式微处理器技术已经成熟,除了传统的x86处理器,以ARM7/9为代表的嵌入式处理器开始流行起来,这也让以Linux为代表的通用操作系统进入了嵌入式系统应用这个领域,一些针对资源受限硬件的Linux发行版本开始出现,也就是我们所说的嵌入式Linux。进入2000年以后,Android开始被广泛地应用在具有人机界面的嵌入式设备中。近来,物联网操作系统又以崭新的面貌进入了人们的视野。
所有可用于嵌入式系统的操作系统都可以称为嵌入式操作系统(国外称为Embedded Operating System或者Embedded OS,中文简称为嵌入式OS)。既然它是一个操作系统,那就必须具备操作系统的功能—任务(进程)、通信、调度和内存管理等内核功能,还需要具备内核之外的文件、网络、设备等服务能力。为了适应技术发展,嵌入式操作系统还应具备多核、虚拟化和安全的机制,以及完善的开发环境和生态系统。嵌入式OS必须能支持嵌入式系统特殊性的需求,如实时性、可靠性、可裁剪和固化(嵌入)等特点。这里不一一细说。
Labrosse和Noergaard在《Embedded Software》中的“Embedded Operating System”一章中对嵌入式操作系统有这样的描述:每一种嵌入式操作系统所包含的组件可能有所不同,但至少都要有一个内核,这个内核应具备操作系统的基本功能。嵌入式操作系统可以运行在任何移植好的CPU上,可以在设备驱动程序之上运行,也可以通过BSP(板支持软件包)来支持操作系统运行。
20世纪70年代末,嵌入式操作系统的商业产品开始在北美出现。进入20世纪90年代,嵌入式操作系统的数量呈井喷式增加,最鼎盛的时候有数百种之多,经过30多年的市场发展和淘汰,如今依然有数十种。但是,真正在市场上具有影响力并有一定的客户数量和成功的应用产品的嵌入式操作系统并不多,常见的有:eCos、C/OS-II和III、VxWorks、pSOS、Nucleus、ThreadX、Rtems、QNX、INTEGRITY、OSE、C Executive、CMX、SMX、emOS、Chrous、VRTX、RTX、FreeRTOS、LynxOS、ITRON、Symbian、RT-thread,以及Linux家族的各种版本,比如Clinux、Android和Meego等,还有微软家族的WinCE、Windows Embedded、Windows Mobile等。其中有些产品已经因为公司被收购而消失,比如pSOS、VRTX和Chrous等;还有的开源嵌入式操作系统因为缺少维护而逐渐被放弃,比如eCos和Meego等。关于这些操作系统的情况,本书后面的章节将会有更多的介绍。
嵌入式操作系统分类
通用的操作系统按照应用可分成桌面和服务器两种版本,近年随着智能终端(手机和平板电脑)的兴起,又增加了一个移动版本,而服务器版本随着云计算的发展,又出现了云操作系统这一“新贵”。但是,嵌入式操作系统分类却是一件很困难的事情。原因是什么呢?因为嵌入式系统没有一个标准的平台。从实时性角度看,嵌入式操作系统可分为硬实时和软实时,RTOS是硬实时操作系统,而Linux是软实时的操作系统;从商业模式看可分为开源和闭源(私有);从应用角度看可分为通用的嵌入式操作系统和专用的嵌入式操作系统。比如,VxWorks就是硬实时、私有和专用的操作系统,而嵌入式Linux就是软实时、开源和通用的嵌入式操作系统。Android是一个有趣的例子,它主要应用在智能手机和平板电脑中,不是一个典型的嵌入式操作系统。但是最近几年,它也开始广泛应用在消费电子产品中,比如智能电视、智能手表,甚至是工业电子应用中,这说明它正在逐渐变成为一个嵌入式操作系统。
从内核技术看,嵌入式操作系统有3种架构:单片(monolithic)、分层(layer)和微内核(microkernel)。单片架构是将设备驱动、中间件和内核功能模块集成在一起。单片架构的操作系统因为结构上很难裁剪和调试,后期发展成模块化单片架构,典型的单片架构的操作系统有C/OS-II和Linux等。分层架构是指操作系统分成不同级别的层,上层的功能依赖底层提供的服务。这种架构的好处是易于开发和维护,但是每层都有自己的API,所带来的附加开销会使操作系统的尺寸增加和性能降低,VRTX32是一个典型分层架构的嵌入式操作系统。模块化的进一步发展,最小内核功能压缩成只有存储和进程管理,设备驱动变成一个更小内核模块的操作系统,称为微内核操作系统。这个操作系统的附件模块因为可以动态地加载,使得系统的可伸缩和可调试性更强,独立的内存空间又使得系统的安全性更好,模块化的架构更容易移植到不同的处理器上。比较前面两种架构,微内核的操作系统的整体开销更大,性能和效率要低。目前商业的嵌入式操作系统多数都是微内核架构,比如CMX-RTX、VxWorks、Nucleus plus、QNX和VRTXsa。
嵌入式操作系统的应用
可以说,哪里有嵌入式的应用,哪里就有嵌入式操作系统的身影。今天的嵌入式应用已经无处不在,嵌入式操作系统更是随处可见。但是必须强调,嵌入式操作系统对于系统的处理器和其他资源均有一定要求和占用,商业嵌入式操作系统要收取一定的开发和使用费用,即使是开源的嵌入式操作系统,你在开发中也或许要向商业公司购买技术服务。这些都将是最终的电子产品的成本因素,如果你想降低成本,对于那些开发者不多且易于维护的简单应用,就可以选择不使用操作系统。哪些应用适合而且必须使用嵌入式操作系统呢?笔者根据自己20多年的实践经验,认为下面所列出的各项是市场上嵌入式操作系统应用的热点。
无线通信产品:比如手机、基站和无线交换机等无线通信设备大量使用嵌入式操作系统和中间件(通信协议等)。
网络产品:比如路由器、交换机、接入设备和信息安全产品等大量使用RTOS和开源的Linux。
智能家电:比如智能电视、IP机顶盒、智能冰箱等产品大量使用包括Android在内的嵌入式操作系统。
航空航天和军事装备:包括飞机、宇航器、舰船和武器装备等在内,都在使用经过认证的RTOS,这个领域也是嵌入式操作系统最早开发的市场之一。
汽车电子:现代汽车和运输工具大量使用嵌入式处理器技术,正在从采用私有的RTOS转向采用标准和开放的RTOS和通用的嵌入式操作系统技术。随着智能交通和车联网的发展,汽车电子将给嵌入式操作系统发展带来一个新的春天。
物联网应用:物联网和云计算是IT产业技术发展的两大推手,其中物联网的发展对嵌入式操作系统的需要和影响更大。物联网应用需要嵌入式操作系统来支持低功耗无线网络技术、物联网网关、物联网安全,以及动态的升级和维护功能。