2.4 主要的嵌入式操作系统
迄今为止,世界上到底有多少种嵌入式操作系统呢?有人统计是200多种,有人统计是400多种,还有人统计是500多种。实际上这个问题已经不重要了。这几个数字共同说明了一个问题,那就是嵌入式操作系统的数目很多,已经多到了不太好统计的地步。但是在众多的嵌入式操作系统中,有一些经常使用,而另一些却很少用到。所以如果有人问常用的嵌入式操作系统有多少种,可以粗略地回答,最常用的嵌入式操作系统不过10余种,比较常用的也不超过100种。当然这个数字也远比通用操作系统的种类多很多。本节中将介绍一些主要的嵌入式操作系统。
2.4.1 一些有典型特色的嵌入式操作系统
不同的嵌入式操作系统在功能和应用领域等方面有比较大的差异,每种系统都有自己的特点。下面从几个不同的角度出发,介绍一些比较有代表性的嵌入式操作系统。
1. 最早的嵌入式操作系统
VRTX和pSOS是早期嵌入式操作系统的典型代表。VRTX的研发者是Microtec Research公司,一般认为它是世界上第一个商用嵌入式操作系统。pSOS的开发者是Integrated Systems公司。它也是最早问世的嵌入式操作系统之一,同时也是最早进入中国市场的嵌入式操作系统。Integrated Systems公司在2000年2月被WindRiver Systems公司兼并,所以pSOS的所有权现在属于WindRiver公司。
2. 最小的嵌入式操作系统
就代码的精简程度而言OSE是一个典型的代表。该操作系统的开发者是美国ENEA公司。OSE的代码大约只有5KB,被认为是最小的嵌入式操作系统之一。除此之外,一些专门为无线传感网开发的嵌入式操作系统也非常小。
3. 典型微内核结构的嵌入式操作系统
QNX是微内核结构嵌入式操作系统的一个典型代表。该操作系统的开发者是加拿大的QNX Software Systems公司。QNX的内核非常小巧。例如,QNX4.x的内核大约只有1.2KB。
4. 开源的嵌入式操作系统
有相当多的嵌入式操作系统都对外开放源代码。嵌入式Linux、μC/OS、eCOS、Nucleus、RTEMS是其中的典型代表。
嵌入式Linux是经裁减后,可执行代码只有几十千字节或几百千字节的Linux系统。嵌入式Linux的应用日益广泛,是一种很有前途的嵌入式操作系统。
μC/OS是一个结构精炼、应用范围很广的嵌入式操作系统。它可以在从8位到64位的40多种不同架构上的微处理器上运行。
eCOS(embedded Configuration Operating System)的最初开发者是美国的Cygnus Solutions公司。它的特点是代码精炼(内核可精简至约10KB)、结构模块化、内核可配置性强。
Nucleus的开发者是Accelerated Technology公司。它虽然可以向用户提供源代码,但要收取一定的费用。
RTEMS(Real Time Executive for Multiprocessor Systems)是美国军方开发的一个实时嵌入式操作系统。该操作系统在航空、航天和军工领域使用较多。
开源嵌入式操作系统多数使用GPL许可证对外发布,但也有使用其他开源软件许可证的情况。开源软件的许可证主要有GPL许可证、MPL许可证、Apache许可证和BSD许可证等几种。这些许可证向开源软件的使用者赋予了不同的权利。下面简要介绍。
GPL(General Public License)的意思是GNU通用公共许可证。GNU通用公共许可证与GNU计划有密切的历史渊源。GNU计划又称革奴计划,是一项在1983年9月27日开始实施的计划。该计划的目标是开发一个完全自由的操作系统,包括可以自由使用、复制和修改。为此,GNU计划规定,在计划范围内开发的所有软件都要遵守一项授予所有权利给其他任何人的协议。由此就产生了GNU通用公共许可证。按照GPL许可证的要求,许可证的被授权者如果如对软件进行了修订和扩充,那么修订和扩充部分也必须同样以GPL许可证进行发布,以便其他人自由使用、复制和修改这些内容。可以看出,GPL许可证有着强烈的反版权性质。1991年,Linux操作系统问世并采用GPL许可证发布后取得了巨大的成功,因此以后有很多的开源软件都采用了GPL许可证进行发布。
MPL(Mozilla Public License)最初是1998年Netscape公司的Mozilla项目组用于发布其开源软件的许可证。同样作为开源软件的许可证,GPL和MPL的条款虽然在许多地方很相似,但也有显著的区别。最主要的区别是:如果许可证的被授权者对源代码进行了修改,MPL虽然也要求对修改部分必须同样以MPL进行发布,以保证其他人可以在MPL条款下共享这些修改的内容,但MPL允许许可证的被授权者可以把自己开发的源代码包装在源代码库之中,并给源代码库加一个接口,除了接口程序的源代码以MPL许可证对外发布外,源代码库中的源代码就可以不再用MPL许可证对外发布了。这样,就为利用开源软件开发商用软件留下了一条途径。
Apache许可证是Apache软件基金会发布自由软件时使用的一种许可证。此外,许多非Apache基金会发布的软件也在使用这种许可证。Apache许可证不是一个完全反版权的许可证。按照它的规定,许可证的被授权者如果如对软件进行了修改和扩充,可以对修改和扩充部分做出保留版权的声明。
BSD(Berkly Software Distribution)许可证最初是美国加州大学伯克利分校在发布其开源软件时使用的许可证。BSD许可证的条款很宽松,许可证的被授权者享有很大的自由。
5. 国内自主开发的嵌入式操作系统
国内自主开发的嵌入式操作系统指包括操作系统内核在内的整个系统都是重新设计和开发的嵌入式操作系统。不包括在开源软件基础上进行定制、修改和扩充而形成的嵌入式操作系统。Hopen、DeltaOS、和欣是这一类嵌入式操作系统的典型代表。
Hopen的开发者是凯思昊鹏公司。它是一个嵌入式操作系统的大家族,Hopen双内核操作系统、Hopen-RT实时操作系统都是其中的成员。目前Hopen操作系统已经在智能手机、数字电视、网络计算机等产品上得到了很好的应用。截至2006年,仅在智能手机上就已安装100余万套。
DeltaOS的开发者是科银京城公司。该嵌入式操作系统已经在航空、航天等领域得到了成功应用。
和欣的英文名称为Zyco。它是科泰世纪公司研发的一个采用组件技术的32位嵌入式操作系统。它的最大特点是采用了组件化编程模型,包括它本身在内的模块都为组件形态。
6. 用于智能手机的嵌入式操作系统
Symbian、Windows Mobile、Android、iPhoneOS、PalmOS是在智能手机领域中使用最广泛的几个嵌入式操作系统。它们共同占据了这一领域的大部分市场份额。
Symbian的前身是EPOC,其开发者是Psion公司。EPOC(Electronic Piece of Cheese)意为“使用电子产品时可以像吃乳酪一样简单”,这是该嵌入式操作系统在设计时所坚持的理念。1998年诺基亚、爱立信、摩托罗拉、三菱、Psion等公司联手成立了专门研发智能手机的Symbi-an公司。该公司选用了EPOC作为操作系统平台,并将其更名为Symbian。
Windows Mobile是微软公司专门为移动终端设备开发的一个嵌入式操作系统。除Win-dows Mobile之外,微软公司还有Windows CE、Windows NT Embedded、Windows XP Embedded等一些嵌入式操作系统产品。
Android是以做搜索引擎著名的Google公司开发的一个嵌入式操作系统。它的基础是Linux内核,属于嵌入式Linux中的一种。
iPhoneOS是苹果公司开发的一个嵌入式操作系统。它主要使用在苹果公司的iTouch和iPhone产品上。iTouch是一款集媒体播放器和上网装置为一体的电子产品。iPhone则在iTouch的基础上进一步集成了移动电话功能。
PalmOS的开发者是Palm Computing公司。它主要用在PDA上,并曾经在PDA上占有主导地位。
7. 用于汽车电子的嵌入式操作系统
在汽车电子领域,嵌入式系统经常用于控制汽车发动机、ABS和安全气囊。因此用于这一领域的嵌入式操作系统有很强的实时性,可靠性要求也相对很高。
OSEK/VDX是汽车电子领域的一个重要技术标准(OSEK是德语“用于汽车电子的、带有接口的开放式系统”的缩写,VDX是Vehicle Distributed eXecutive的缩写)。其制定者是欧洲的一些汽车制造商。目前国际标准化组织已经将其接纳为国际标准(ISO 17356)。OSEK/VDX不仅与操作系统有关,它还涉及通信(COM)、网络管理(NM)和实现语言(OIL)等方面的内容。
在具体产品方面,已经出现了一些遵循OSEK/VDX标准的嵌入式操作系统。例如,Metrowerks公司的OSEKturbo、WindRiver公司的OSEKworks、3SOFT公司的proOSEK、西曼自动化技术公司的PowerOSEK等。
8. 用于无线传感网的嵌入式操作系统
无线传感网中的网络结点硬件资源极其有限,相对于其他的嵌入式系统,它的存储器更小,处理器的处理能力更弱。专门用于无线传感网的嵌入式操作系统必须适应这一特点。如果把一般的嵌入式操作系统用在无线传感网中是不可行的。
目前已经出现了一些适用于微传感器上的嵌入式操作系统。如TinyOS、Coniki、MANTIS、SOS、SenSpire等。它们的一个共同特点是,可以在资源极其受限的条件下运行。但这些操作系统的功能都比较有限,如多数都不能支持多线程(除MANTIS之外)。
2.4.2 VxWorks
VxWorks是WindRiver公司开发的一个实时嵌入式操作系统。它可以在ARM、PowerPC、SPARC、x86、MIPS等多种处理器上运行,是目前控制领域中应用最广泛的嵌入式操作系统之一。VxWorks的一个显著特点是它有很好的集成软件开发环境,开发者可以使用界面友好、功能丰富的开发工具进行应用软件的开发。
如图2.44所示,VxWorks主要由与硬件无关的实时操作系统内核(Wind)、输入/输出系统、文件系统、网络系统、实用库和与硬件相关的板级支持包等部分组成。
1. 实时操作系统内核
VxWorks的内核称为Wind。Wind里面包含任务管理与调度(采用抢占式最高优先级优先调度算法)、任务通信、中断管理、看门狗和内存管理等功能。它提供了一个多任务环境,任何程序都可以作为单独的任务运行,拥有自己的上下文和堆栈。任务之间通过任务通信功能进行同步,协调相互的行为。通过Wind任务管理功能可以建立任务、删除任务、阻塞任务、唤醒任务、使任务睡眠或改变任务的优先级。
Wind主要通过信号量进行任务间的同步和互斥。在Wind中有互斥信号量、二进制信号量、计数信号量和POSIX信号量等几种类型的信号量。这些信号量既可以被应用在操作系统内部,也可以被应用在VxWorks的应用程序中。除信号量之外,Wind还支持队列、管道、事件和条件变量等任务通信功能。
图2.44 VxWorks实时嵌入式操作系统的结构
2. 输入/输出系统
输入/输出系统的作用是实现对输入/输出设备的管理。VxWorks将所有的输入/输出设备都看成是文件,采用与文件操作一致的方法对输入/输出设备进行操作。管理输入/输出设备离不开设备驱动程序,设备驱动程序虽然是硬件相关软件,但它们与输入/输出系统有很密切的关系,甚至可以认为是输入/输出系统的一部分。VxWorks提供的设备驱动程序包括:网络驱动、RAMDISK驱动、SCSI驱动、键盘驱动、显示驱动、磁盘驱动、串/并口驱动等。
3. 文件系统
VxWorks对磁盘、磁带、闪存、CD-ROM等各种常用的存储设备都支持一种适用的文件系统。它能够支持的文件系统包括以下6种。
① DOSFS:一种与MS-DOS操作系统兼容的文件系统。
② RT11FS:一种与RT11操作系统兼容的文件系统。
③ RawFS:一种适用于磁盘设备的文件系统。
④ TapeFS:一种适用于磁带设备的文件系统。
⑤ TrueFFS:一种适用于闪存的文件系统。
⑥ CDROMFS:一种适用于CD-ROM的文件系统。
4. 网络系统
VxWorks的网络系统实现完整的TCP/IP协议族,支持与BSD Socket兼容的网络编程接口。除此之外,VxWorks还支持许多其他的网络协议和功能。
5. 实用库
实用库扩展了VxWorks的系统调用,它向应用程序开发者提供中断处理、看门狗、内存分配、缓冲区管理、链表管理等方面的功能。
6. 板级支持包
板级支持包屏蔽了不同硬件的特征,向VxWorks硬件无关软件提供一个统一的接口。它所包含的功能有硬件初始化、中断的产生和处理、实时时钟和定时器/计数器管理、内存地址映射、内存分配等。
2.4.3 嵌入式Linux
嵌入式Linux是经过裁减后,可以被装入到几十千字节或几百千字节的存储器中的Linux系统。它的特点是不需要硬盘,也不需要键盘和鼠标等外部设备,并且可以适应于某种特定的硬件环境。
1. Linux的嵌入式化
将普通的Linux操作系统改造为嵌入式操作系统的时候需要遵循一个原则,同时有两个重点工作。一个原则是在建立嵌入式Linux操作系统时,不应刻意去增强Linux操作系统的功能。恰恰相反,考虑到实际应用的单一性,往往要删繁就简。两个重点工作是:一要设法提高Linux的实时处理能力;二要想办法降低Linux的文件系统所占的存储空间。
(1)提高实时处理能力的措施
影响Linux的实时处理能力的因素很多,最主要的是任务调度算法和内存管理机制。因此,在采取提高实时处理能力的措施时应把重点放在这两个方面。
Linux内核一般采用“先来先服务”和“轮转”两种调度算法。这两种算法对实时任务的实时性都没有给予足够的考虑。为提高嵌入式Linux的实时处理能力必须采用“先来先服务”和“轮转”之外的调度算法,如采取抢占式最高优先级优先调度算法,保证总是选取优先级最高的任务来运行。
采用虚拟存储技术之外的内存管理技术是提高Linux实时性能的另一个方法。Linux操作系统使用虚拟存储技术的目的是为了增加可供任务使用的内存,使得系统中可以同时运行更多的任务。但是,同时运行的任务越多,每个任务所能分配到的CPU时间片就越短。操作系统的理论证明:CPU控制权的切换越快,资源的使用效率就越低,而且存储页面的换入与换出也会使任务的执行时间变得难以确定,所以去掉虚拟内存管理机制最能改善Linux的实时性能。
(2)降低文件系统所占存储空间的措施
Linux上的标准文件系统是EXT2。这个文件系统有功能强、性能优、易扩充的特点,但结构比较繁琐,文件系统本身所占用的空间过大。如果去掉EXT2文件系统,采用专门为嵌入式系统设计的文件系统,如CRAMFS、ROMFS、JFFS,会节省一定的存储空间。
图2.45 嵌入式Linux的结构
2. 嵌入式Linux的结构
嵌入式Linux没有采用微内核结构,它是一个单块结构的嵌入式操作系统。如图2.45所示,嵌入式Linux的内核中一般有以下几个部分:任务管理(包括任务通信)、内存管理、中断管理、文件管理。在最简单的系统中,还可将文件管理部分去掉。
从图2.45中可以看出,应用程序通过系统调用或者库函数来访问Linux内核资源。内核又可通过设备驱动程序来完成必要的工作。
3. 典型的嵌入式Linux
目前可供用户选择的嵌入式Linux操作系统已经很多。这些系统分为收费型和免费型两类。虽然嵌入式Linux系统是一种开源的自由软件,不收取版权费,但用户在使用某些嵌入式Linux时需要向提供商支付一定的服务费。
收费型的嵌入式Linux系统一般都针对某些嵌入式处理器做了专门的优化设计,能支持多种半导体厂家的开发评估板和丰富的设备驱动程序,并提供技术支持和培训服务。除了国内的一些产品外,收费型嵌入式Linux系统的价格目前还很昂贵。根据配置和服务的不同,在几千到几万美元之间。但收费型嵌入式Linux的开发工具相对于Windows CE和VxWork来说,在易用性和丰富性方面还有待提高和改进。
此外,还有一部分嵌入式Linux系统可以免费获得。使用免费型嵌入式Linux,无法得到服务商的技术支持,所以对用户有比较高的要求。
BlueCat Linux、Embedix、MontaVista Linux、μClinux、RT-Linux、XLinux、红旗嵌入式Linux等一些系统是嵌入式Linux操作系统的典型代表。它们有收费型的也有免费型的。
BlueCat Linux的开发者是LynuxWorks公司。它是一个收费型系统。它的实时性虽然不很强,但它与LynuxWorks公司的实时嵌入式操作系统LynxOS有很好的兼容性,基于BlueCat Linux开发的应用软件只需略加修改就可以在LynxOS上运行。
Embedix的开发者是Lineo公司。它像Lineo公司的其他Linux版本一样,可以免费获得。Embedix是根据嵌入式系统的特点重新设计的一个操作系统,有比较强的功能,但整个系统所占的存储空间较大,最小需要8MB RAM,3MB ROM。
MontaVista Linux开发者是MontaVista公司。它是一个收费型系统,能支持较多种的开发评估板和设备驱动程序。
μClinux是在GNU计划的推动下,专门为微型系统(μ表示Micro)开发的一个Linux操作系统。它可以在没有内存管理单元(MMU)的微控制器上运行。目前μClinux是应用最广泛的免费型嵌入式操作系统之一。
RT-Linux的开发者是美国新墨西哥理工学院。它有很强的实时性,可以满足硬实时要求。它可以免费获得,并将其用于科研目的。
XLinux的开发者是美国的网虎公司。它的内核只有143KB,是存储空间最小的嵌入式Linux系统之一。
红旗嵌入式Linux的开发者是中科红旗公司。它是一个收费型嵌入式操作系统,是该公司Linux系列产品中的一员。