物联网概论 第2版
上QQ阅读APP看书,第一时间看更新

4.4 嵌入式操作系统

嵌入式操作系统负责嵌入式系统的软硬件资源分配和任务调度,并控制和协调所有的并发活动。早期的嵌入式系统很多都不用操作系统,它们都是为了实现某些特定功能,使用一个简单的循环控制对外界的请求进行处理,不具备现代操作系统的基本特征(如进程管理、存储管理、设备管理和网络通信等)。但随着控制系统的适用性越来越复杂,应用的范围越来越广泛,缺少操作系统就造成了很大的限制。20世纪80年代以来,出现了各种各样的商用嵌入式操作系统,如TRON、μC/OS-Ⅱ、嵌入式Linux、Windows phone、iOS和Android等。除此之外,还有一些用于特定设备或行业的操作系统,如用于军事领域的VxWorks,用于PDA的Palm OS,用于路由器的IOS(思科公司)、VRP(华为公司)等,以及用于无线传感器网络中传感器结点的TinyOS等。本节重点介绍几种比较典型的嵌入式操作系统。

随着处理器的微型化和处理能力的增强,嵌入式系统与通用计算机之间的界限也越来越模糊,如智能手机已经与手持式计算机没有多大区别了,而且功能更强。嵌入式操作系统与通用操作系统之间的界限也难以区分了,Windows操作系统就是一个典型的例子。Windows XP和Windows 7是典型的通用操作系统,Windows CE和Windows Phone 7是典型的嵌入式操作系统,然而,Windows 10则是这两种操作系统的融合。

4.4.1 μC/OS-Ⅱ

μC/OS-Ⅱ是一个可裁剪、源代码开放、结构小巧、抢先式的实时嵌入式操作系统(RTOS),主要用于中小型嵌入式系统。该系统专门为计算机的嵌入式应用设计,绝大部分代码是用C语言编写的。CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到其他任何一种CPU上。

μC/OS-Ⅱ具有执行效率高、占用空间小、可移植性强、实时性能好和可扩展性强等优点,可支持多达64个任务,支持大多数的嵌入式微处理器,商业应用需要付费。

μC/OS-Ⅱ的前身是μC/OS,最早出自于1992年美国嵌入式系统专家Jean J.Labrosse在《嵌入式系统编程》杂志上的文章连载,μC/OS的源码也同时发布在该杂志的BBS上。

用户只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-Ⅱ嵌入到开发的产品中。μC/OS-Ⅱ最小内核可编译至2 KB,经测试,可被成功移植到几乎所有知名的CPU上。

严格地说,μC/OS-Ⅱ只是一个实时操作系统内核,它仅仅包含了任务调度、任务管理、时间管理、内存管理,以及任务间的通信和同步等基本功能,没有提供输入/输出管理、文件系统和网络等额外的服务。但由于 μC/OS-Ⅱ良好的可扩展性和源码开放,这些非必需的功能完全可以由用户自己根据需要分别实现。

μC/OS-Ⅱ的目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量、邮箱、消息队列、内存管理和中断管理等。

4.4.2 TRON

实时操作系统内核(TRON)是1984年由日本东京大学开发的一种开放式的实时操作系统,其目的是建立一种泛在的计算环境。泛在计算(普适计算)就是将无数嵌入式系统用开放式网络连接在一起协同工作,它是未来嵌入式技术的终极应用。TRON被广泛使用在手机、数字式照相机、传真机、汽车引擎控制和无线传感器结点等领域,成为实现普适计算环境的重要的嵌入操作系统之一。

以TRON为基础的T-Engine/T-Kernel为开发人员提供了一个嵌入式系统的开放式标准平台。T-Engine提供标准化的硬件结构,T-Kernel提供标准化的开源实时操作系统内核。

T-Engine由硬件和软件环境组成,其中软件环境包括设备驱动、中间件、开发环境和系统安全等部分,是一个完整的嵌入式计算平台。硬件环境包括4种系列产品:便携式计算机和手机;家电和计量测绘机器;照明器具、开关和锁具等所用的硬币大小的嵌入式平台;传感器结点和静止物体控制所用的单芯片平台。

T-Kernel是在T-Engine标准上运行的标准实时嵌入式操作系统软件,具有实时性高、动态资源管理等特点。

4.4.3 嵌入式Linux

嵌入式Linux是以Linux为基础的嵌入式操作系统,广泛应用于手机、个人数字助理(PDA)、媒体播放器、智能家电产品和航空航天等领域。

嵌入式Linux是将桌面Linux操作系统进行裁剪修改,使之能在嵌入式设备上运行的一种操作系统。嵌入式Linux代码开放,完全免费,有许多公开的代码可以参考和移植,移植比较容易,而且有许多应用软件的支持,产品开发周期短,新产品上市迅速。

Linux是一个跨平台的系统,适应于多种嵌入式微处理器和多种硬件平台。Linux的最小内核只有134KB左右,更新速度很快,对各种网络和TCP/IP协议提供完整的支持,能够提供很多工具供程序员使用。目前已有多种嵌入式Linux版本,如Embedix、LEM、LOAF、μCLinux、PizzaBox Linux和红旗嵌入式Linux等。

4.4.4 iOS

iOS是由苹果公司为智能便携式设备开发的操作系统,主要用于iPhone手机和iPad平板计算机等。iOS源于苹果计算机的Mac OS X操作系统,都以Darwin为基础。Darwin是由苹果公司于2000年发布的一个开源操作系统。iOS原名为iPhone OS,直到2010年6月的苹果全球开发者大会(WWDC)上才宣布改名为iOS。iOS的系统架构分为4个层次:核心操作系统层、核心服务层、媒体层和可轻触层,如图4-2所示。

核心操作系统层是iOS的最底层,iOS是基于Mac OS X开发的,两者具有很多共同点。该层包含了很多基础性的类库,如底层数据类型、Bonjour服务(Bonjour服务是指用来提供设备和计算机通信的服务)和网络套接字(套接字提供网络通信编程的接口)类库等。

图4-2 iOS技术层级结构

核心服务层为应用软件的开发提供应用程序编程接口(API)。服务层包括了Foundation(包含基础框架支持类)核心类库、CFNetwork(网络应用支持类)类库、SQLite(嵌入式设备中使用的一种轻量级数据库)访问类库、访问POSIX(可移植操作系统接口)线程类库和UNIX(一种操作系统)sockets(套接字)通信类库等。

媒体层包含了基本的类库来支持二维和三维的界面绘制、音频和视频的播放,当然也包括了较高层次的动画引擎。

可轻触层提供了面向对象的集合类、文件管理类和网络操作类等。该层中的UIKit(用户界面开发包)框架提供了可视化的编程方式,能提供一些非常实用的功能,如访问用户的通信录和照片集,支持重力感应器或其他硬件设备。

2011年,苹果推出了iOS 5操作系统,新增了200个功能,侧重于云计算和基于地理位置的服务。

4.4.5 Android

Android作为便携式移动设备的主流操作系统之一,其发展速度超过了以往任何一种移动设备操作系统。Android的最初部署目标是手机领域,包括智能手机和更廉价的翻盖手机。由于其全面的计算服务和丰富的功能支持,目前已经扩展到手机市场以外,某些智能电表、云电视和智能冰箱等采用的就是Android系统。

Android是基于Linux内核的开源嵌入式操作系统。Android系统形成一个软件栈,其软件主要分为3层:操作系统核心、中间件和应用程序。具体来说,Android体系结构从底层向上主要分为内核、实时运行库、支持库、应用程序框架和应用程序5部分。

1)Linux内核。Android基于Linux提供核心系统服务,如安全、内存管理、进程管理、网络堆栈和驱动模型。核心层也作为硬件和软件之间的抽象层,用以隐藏具体硬件细节,从而为上层提供统一的服务。

2)Android实时运行库。Android实时运行库(Runtime)包含一个核心库的集合和Dalvik虚拟机。核心库为Java语言提供核心类库中可用的功能。Dalvik虚拟机是Android应用程序的运行环境,每一个Android应用程序都是Dalvik虚拟机中的实例,运行在对应的进程中。Dalvik虚拟机的可执行文件格式是dex,该格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。大多数虚拟机包括Java虚拟机(JVM)都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多的指令,而基于寄存器的机器指令更大。Dalvik虚拟机需要依赖Linux内核提供的基本功能,如线程和底层内存管理等。

3)支持库。Android包含了一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架提供给开发者。

4)应用程序框架。通过提供开放的开发平台,Android使开发者能够编写极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势,访问位置信息,运行后台服务,设置闹钟,以及向状态栏添加通知等。开发者还可以完全使用核心应用程序所使用的框架API。应用程序框架旨在简化组件的重用,任何应用程序都能发布自己的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制),这一机制允许用户替换组件。

5)应用程序。Android装配了一组核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。