第
5
章
操作系统软件框架
当前常常在操作系统内核上加一层软件框架,从而形成功能更加丰富并且
便于开发的整套操作系统软件框架平台,如华为公司的鸿蒙系统、Google公司
的Android系统和机器人操作系统(ROS)都是这种结构,本章主要对这3种系
统展开介绍。
..5.1 
Android系统

Andriol从2008 年发布Andod1.直到

od系统由Goge公司开发, ri0系统, 
2021 年Android12 系统的发布,已为手机、电视、平板计算机、手表等数十亿设
备提供平台支持,使得Android成为全球主要的移动操作系统。

在嵌入式Linux操作系统基础上添加了Android软件框架,俗称Android 
操作系统,也是当前比较主流的一款操作系统,主要解决了前几年至今人机交
互的应用需求,从而主要用于手机以及平板计算机等人机交互的应用场景。由
于需要在这些设备上运行越来越多的智能算法,因此很多公司也提供了
Android系统的软件库版本。虽然Android系统建立于Linux系统之上,但结
构相对Linux系统更加复杂。由于要考虑手机或平板计算机厂商的商业问题, 
在已有需要开源的Linux驱动程序层次上提出了HAL 层,在此层次上厂商可
以对各自设备特有的驱动程序进行保护,所以Android系统比Linux系统更加
复杂,同时开源性也比不上Linux。Android系统的设计目标是方便各个手机
厂商适配使用此系统,因此整体采用了更加商用友好的ApacheSoftware 
License。与GPL(GNUPublicLicense)相比,ApacheSoftwareLicense不要求
使用并修改源码的使用者重新开放源码,而只是需要在每个修改的文件中保留
License并说明所修改的内容。

Android系统架构主要应用于ARM 平台,但不仅限于ARM,通过编译控
制,在xri1

86 等体系结构的机器上同样可以运行。Andod系统主要架构如图5.
所示。
Android系统主要架构包括如下组件。

1. 
硬件抽象层
硬件抽象层(HardwareAbstractionLayer,HAL)提供标准界面,向更高级


第5章操作系统软件框架87
图5.d系统主要架构

1 
Androi

别的JavaAPI 框架显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定
类型的硬件组件实现一个界面,例如相机或蓝牙模块。当框架API 要求访问设备硬件
时,Android系统将为该硬件组件加载库模块。

2.Android运行环境
由于Android应用的主要开发语言是Java语言,所生成的目标文件为中间字节代
码,因此需要一个运行时环境将应用从字节码转化为可执行的机器码。其中Android版
本5.API 级别21) 采用的是Dalvik虚拟机的形式,通过解释执行与JIT(Just-in

0(之前, 
0(Time)编译的方式运行,因此带来性能与功耗的损失。而Android5.API 级别21)及以
后的版本引入了Android运行环境(AndroidRuntime,ART)和预先编译机制,将Java代
码预编译为二进制可执行代码,从而避免运行时的编译开销。


88 
智能系统及其应用

3. 
原生C/C++库
许多核心Android系统组件和服务(例如ART 和HAL)构建自原生代码,需要以C 
和C++编写的原生库(NativeC/C+
+ 
Libraries)。Android平台提供Java框架API 以向
应用显示其中部分原生库的功能。例如,可以通过Android框架的JavaOpenGLAPI 访
问OpenGLES,以支持在应用中绘制、操作2D 和3D 图形。如果开发的是需要C或C+
+ 
代码的应用,可以使用AndroidNDK 直接从原生代码访问某些原生平台库。

AndroidNDK 是能将C或C++(原生代码)嵌入到Android应用中的工具,其中,原
生共享库是NDK 从源代码编译构建出动态库(.o文件); 原生静态库是NDK 编译构建

s
出静态库(a文件);aa原生接口(是Jv+ 
组件用于相互通信的接口;

JvJNI) aa和C+应用
二进制接口(A(.) BI), 可以非常精确地定义应用的机器代码在运行时应该如何与系统交
互,NDK 根据这些定义构建.o文件,不同的ABI 对应不同的架构,NDK 为32 位

sARM 、AArch64 、x86 及x86-64 提供ABI 支持。

4.JavaAPI 
框架
可通过以Java语言编写的API 使用AndroidOS 的整个功能集。这些API 形成创
建Android应用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用,包
括以下组件和服务。

(1)丰富、可扩展的视图系统,可用以构建应用的UI,包括列表、网格、文本框、按钮
甚至可嵌入的网络浏览器。视图布局中的所有元素均使用View和ViewGroup对象的
层次结构进行构建,View通常用于绘制用户可看到并与之交互的内容,ViewGroup则是
不可见的容器,用于定义Viw和其他ViwGop对象的布局结构,2所示。
eeru如图5.


图5.界面布局

2 

Android系统通过在XML 中声明界面,从而可以将应用外观代码与控制其行为的
代码分开。

(2)资源管理器,用于访问非代码资源,如本地化的字符串、图形和布局文件。例如, 
各类资源放入项目res/目录的特定子目录中,3所示。
如图5.
res


此示例中,/目录包含以下资源(在子目录中): 一个图像资源、两个布局资源、启
动器图标的mipmap/目录以及一个字符串资源文件。

(3)通知管理器,可让所有应用在状态栏中显示自定义提醒。通知是指Android在

第5章操作系统软件框架89
图5.3资源管理
应用的界面之外显示的消息,旨在向用户提供提醒、来自他人的
通信信息或应用中的其他实时信息。用户可以点按通知来打开
应用,或直接从通知中执行操作。
(4)Activity管理器,用于管理应用的生命周期,提供常见的
导航返回栈。在Android平台上,Activity充当用户与应用互动
的入口点,同时也决定了用户在应用内部或应用之间导航的方
式,前者如“返回”按钮,后者如“最近使用的应用”按钮。
Activity类是Android应用的关键组件,而Activity的启动
和组合方式则是该平台应用模型的基本组成部分。在编程范式
中,应用是通过main() 方法启动的,而Android系统与此不同, 
它会调用与其生命周期特定阶段相对应的特定回调方法来启动Activity实例中的代码。
Activity提供窗口供应用在其中绘制界面。此窗口通常会填满屏幕,但也可能比屏
幕小,并浮动在其他窗口上面。大多数应用包含多个屏幕,这意味着它们包含多个
Activity。通常,应用中的一个Activity会被指定为主Activity,这是用户启动应用时出
现的第一个屏幕。然后,每个Activity可以启动另一个Activity,以执行不同的操作。在
应用中使用Activity,需要在应用的清单中注册关于Activity的信息,并且必须适当地管
理Activity的生命周期。
5.Linux 
内核
Android平台的基础是Linux内核(LinuxKernel)。例如,AndroidRuntime(ART) 
依靠Linux内核来执行底层功能,如线程和低层内存管理。开发设备驱动程序与开发典
型的Linux设备驱动程序类似。Android使用的Linux内核版本包含一些特殊的补充功
能,例如低内存终止守护进程(一个内存管理系统,可更主动地保留内存)、唤醒锁定(一种
PowerManager系统服务)、BinderIPC 驱动程序,以及对移动嵌入式平台来说非常重要
的其他功能。这些补充功能主要用于增强系统功能,不会影响驱动程序开发。

6.BinderIPC 

dr进程间通信(机制允许应用框架跨越进程边界并调用Andod系统服务
代码,这使得高级框架API 能与Android系统服务进行交互。在应用框架级别,开发者
无法看到此类通信的过程,但一切似乎都在“按部就班地运行”。

Android的内核基于Linux内核,但在进程间通信并没有直接利用Linux内核间的
通信,而是采用了Binder方式。只需要复制一次Binder数据,而管道、消息队列、Socket 
都需要复制两次,但共享内存方式一次内存复制都不需要;从性能角度看,Binder性能仅
次于共享内存。而从稳定性上来说,Binder是基于C/S架构的,架构清晰明朗优越于共
享内存。Binder符合面向对象的思想,将进程间通信转化为通过对某个Binder对象的引
用调用该对象的方法,而其独特之处在于Binder对象是一个可以跨进程引用的对象,它
的实体位于一个进程中,而它的引用却遍布于系统的各个进程之中,Android是基于Java 
语言(面向对象的语句)的特性。

BineIPC) ri


90智能系统及其应用
..5.2鸿蒙系统
华为鸿蒙系统是华为公司2019 年8月9日在华为开发者大会上正式发布的操作系
统。华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端
互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智
能终端实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。
5.2.1鸿蒙系统架构介绍
HarmonyOS 具备分布式软总线、分布式数据管理和分布式安全三大核心能力。其
中,分布式软总线让多设备融合为一个设备,带来设备内和设备间高吞吐、低时延、高可靠
的流畅连接体验。分布式数据管理让跨设备数据访问如同访问本地,大大提升跨设备数
据远程读写和检索性能等。分布式安全能够把手机的内核级安全能力扩展到其他终端, 
进而提升全场景设备的安全性,通过设备能力互助,共同抵御攻击,保障智能家居网络安
全;HarmonyOS 通过定义数据和设备的安全级别,对数据和设备都进行分类分级保护, 
确保数据流通安全可信。
HarmonyOS 是华为公司基于开源项目OpenHarmony开发的面向多种全场景智能
设备的商用版本。华为已于2020 年、2021 年分两次把鸿蒙操作系统的基础能力全部捐
献给开放原子开源基金会。OpenHarmony是由开放原子开源基金会孵化及运营的开源
enHarmonache2.

项目,由基金会的Opy项目群工作委员会负责运作,遵循Ap0等开源
协议,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备
操作系统的框架和平台。

OpenHarmony整体遵从分层设计,从下向上依次为内核层、系统服务层、框架层和
应用层。整个硬件架构如图5.

4所示。


图5.y架构

4 
OpenHarmon


第5章操作系统软件框架91 

1.内核层
内核层主要包括内核子系统和驱动子系统。

1)内核子系统

采用多内核设计,包括Linux、LiteOS-M和LiteOS-A3种内核,支持在128KB到
xGBRAM资源的设备上运行系统组件。OpenHarmony针对不同量级的系统,分别使

用了不同形态的内核,分别为LiteOS和Linux。在轻量系统、小型系统上可以选用
LiteOS;在小型系统和标准系统上可以选用Linux。

(1)LiteOS 。
OpenHarmonyLiteOS内核主要包括进程和线程调度、内存管理、IPC机制、timer管
理等内核基本功能。

OpenHarmonyLiteOS内核的源代码分为kernel_liteos_a和kernel_liteos_m这两
个代码仓库。其中,kernelliteos_a主要针对小型系统(SmalSystem)和标准系统
(StandardSystem),而kernel_(_) liteos_m则主要针对轻量系统(MiniSystem )。

LiteOS-M用于轻量系统,面向MCU类处理器,例如ARMCortex-M、RISC-V32位
的设备,硬件资源极其有限,支持的设备最小内存为128KB,可以提供多种轻量级网络协
议,轻量级的图形框架,以及丰富的IoT总线读写部件等。可支撑的产品如智能家居领
域的连接类模组、传感器设备、穿戴类设备等。

LiteOS-A用于小型系统,面向应用处理器,例如ARMCortex-A的设备,支持的设
备最小内存为1MB,可以提供更高的安全能力、标准的图形框架、视频编解码的多媒体能
力。可支撑的产品如智能家居领域的IPCamera、电子猫眼、路由器以及智慧出行领域的
行车记录仪等。

(2)Linux。

Linux用于标准系统,面向应用处理器,例如ARMCortex-A的设备,支持的设备最
小内存为128MB,可以提供增强的交互能力、3DGPU以及硬件合成能力、更多控件以及
动效更丰富的图形能力、完整的应用框架。可支撑的产品如智能手机等。OpenHarmony
中Linux内核从LTS版本中选择合适的版本作为内核的基础版本,目前已完成对Linux

4.19及Linx5.ac在编译构建流程中,
u-10的适配及支持。内核的Pth组成模块, 针对具
体芯片平台,合入对应的架构驱动代码,进行编译对应的内核镜像。所有补丁来源均遵守
GPL-0协议。

2.2)驱动子系统
驱动框架(HardwareDriverFoundation,HDF)为驱动开发者提供驱动框架能力,包
括驱动加载、驱动服务管理和驱动消息机制。HDF类似于Android系统中的HAL层, 
支持以下关键特性。

(1)弹性化的框架能力。在传统的驱动框架能力的基础上,OpenHarmony驱动子系
统通过构建弹性化的框架能力,可支持千字节级别到兆字节级容量的终端产品形态部署。
(2)规范化的驱动接口。定义了常见驱动接口,为驱动开发者和使用者提供丰富、稳
定接口,并和未来开放的面向手机、平板、智慧屏等设备驱动接口保持API兼容性。

92智能系统及其应用
(3)组件化的驱动模型。支持组件化的驱动模型,为开发者提供更精细化的驱动管
理,开发者可以对驱动进行组件化拆分,使得驱动开发者可以更多关注驱动与硬件交互部
分。同时系统也预置了部分模板化的驱动模型组件,如网络设备模型等。
(4)归一化的配置界面。提供统一的配置界面,构建跨平台的配置转换和生成工具, 
实现跨平台的无缝切换。为了方便驱动开发者更易于开发OpenHarmony驱动程序, 
OpenHarmony驱动子系统在DevEco集成了驱动开发套件工具,支持驱动工程管理、驱
动模板生成、配置管理等界面化的操作。
开发者基于HDF驱动框架开发的驱动主要包含三部分。
(1)驱动程序部分———完成驱动的功能逻辑。
(2)驱动配置信息———指示驱动的加载信息内容。
(3)驱动资源配置———配置驱动的硬件配置信息。
OpenHarmony驱动主要部署在内核态,当前主要采用静态连接方式,随内核子系统
编译和系统镜像打包。
2.系统服务层
系统服务层是OpenHarmony的核心能力集合,通过框架层对应用程序提供服务。
该层包含以下5部分。
1)分布式软总线
分布式软总线是多设备终端的统一基座,为设备间的无缝互连提供了统一的分布式
通信能力,能够快速发现并连接设备,高效地传输任务和数据。

分布式软总线子系统旨在为OpenHarmony系统提供通信相关的能力,包括WLAN 
服务能力、蓝牙服务能力、软总线、进程间通信RPC(RemoteProcedureCal)等通信能力。
(1)WLAN服务。为用户提供WLAN基础功能、P2P(Per-to-Per)功能和WLAN 

消息通知的相应服务,让应用可以通过WLAN和其他设备互联互通。

(2)蓝牙服务。为应用提供传统蓝牙以及低功耗蓝牙相关功能和服务。
(3)软总线。为应用和系统提供近场设备间分布式通信的能力,提供不区分通信方
式的设备发现、连接、组网和传输功能。
(4)进程间通信。提供不区分设备内或设备间的进程间通信能力。
2)分布式数据管理
分布式数据管理子系统支持单设备的各种结构化数据的持久化,以及跨设备之间数
据的同步、共享功能。开发者通过分布式数据管理子系统,能够方便地完成应用程序数据
在不同终端设备间的无缝衔接,满足用户跨设备使用数据的一致性体验。

(1)本地数据管理。提供单设备上结构化数据的存储和访问能力。使用SQLite作
为持久化存储引擎,提供了多种类型的本地数据库,分别是关系数据库(Relational 
Database,RDB)和轻量级偏好数据库(Preferences),用以满足使用不同数据模型对应用
数据进行持久化和访问的需求。
(2)分布式数据服务。分布式数据服务支持数据跨设备相互同步,为用户提供在多
种终端设备上一致的数据访问体验。通过结合账号、应用和数据库三元组,分布式数据服

第5章操作系统软件框架93
务对数据进行隔离。在通过可信认证的设备间,分布式数据服务支持数据相互同步,提供
跨设备的数据访问。
3)分布式任务调度
分布式任务调度基于分布式软总线、分布式数据管理、分布式Profile等技术特性,构
建统一的分布式服务管理(发现、同步、注册、调用)机制,支持对跨设备的应用进行远程启
动、远程调用、绑定/解绑,以及迁移等操作,能够根据不同设备的能力、位置、业务运行状
态、资源使用情况并结合用户的习惯和意图,选择最合适的设备运行分布式任务。主要功
能如下。
(1)远程启动元能力。跨设备拉起远端设备上的指定元能力。
(2)远程迁移元能力。将元能力跨设备迁移到远端设备。
(3)远程绑定元能力。跨设备绑定远端设备上的指定元能力。
(4)系统服务管理。提供系统服务的本地启动、注册、查询等功能;提供系统服务的
跨设备查询功能。
4)公共基础库子系统
公共基础库子系统提供了一些常用的C、C++开发增强API 。C++部分:文件、路
径、字符串相关操作的能力增强接口;读写锁、信号量、定时器、线程增强及线程池等接口; 
安全数据容器、数据序列化等接口;各子系统的错误码相关定义;C语言安全函数接口。
C部分:简易的数据存取接口kvstore;标准文件相关操作HAL 接口;其他一些内部功
_

能,如定时器等。
5)方舟多语言运行时子系统
方舟多语言运行时子系统提供了JavaScript、C/C+
+ 
语言程序的编译、执行环境,提

供支撑运行时的基础库,以及关联的API 接口、编译器和配套工具。当前支持的编程语
言包括JavaScript、C/C++。子系统中的组件划分也是基于编程语言维度,每个组件支持
单独编译,可以基于场景进行组合和分离。

3. 
框架层
框架层为应用开发提供了C/C++/JavaScript等多语言的用户程序框架和Ability框
架,适用于JavaScript语言的JavaScriptUI 框架,以及各种软硬件服务对外开放的多语
言框架API 。根据系统的组件化裁减程度,设备支持的API 也会有所不同。

1)UI 框架
使用基于JavaScript扩展的类Web开发范式的方舟开发框架,包括应用层
(Application)、前端框架层(Framework)、引擎层(Engine)和平台适配层(Portingr)。Laye(1)应用层表示开发者开发的FA 应用,这里的FA 应用特指JavaScriptFA 应用。

(2)前端框架层主要完成前端页面解析,以及提供MVVM(Model-View-View-
Model)开发模式、页面路由机制和自定义组件等能力。
(3)引擎层主要提供动画解析、DOM(DocumentObjectModel)树构建、布局计算、
渲染命令构建与绘制、事件管理等能力。

94智能系统及其应用
(4)适配层主要完成对平台层进行抽象,提供抽象接口,可以对接到系统平台,比如
事件对接、渲染管线对接和系统生命周期对接等。
2)用户程序框架
用户程序框架子系统是OpenHarmony为开发者提供的一套开发OpenHarmony应
用程序的框架,包含以下模块。
(1)AppKit。是用户程序框架提供给开发者的开发包,开发者基于该开发包可以开
发出基于Ability组件的应用。
(2)AppManagerService。应用管理服务,用于管理应用运行关系、调度应用进程生
命周期及状态的系统服务。
(3)BundleManagerService。是负责管理安装包的系统服务,常见的如包安装、更新、
卸载和包信息查询等,运行在Foundation进程。
3)Ability框架
(1)PageAbility介绍。
PageAbility(见图5.5)是主要负责页面交互的,那么就可以理解为Android的
Activity。类似于Activity有生命周期,同样PageAbility也是有
生命周期的,生命周期分别是onStart() 、onActive() 、onInactive() 、
onBackground() 、onForeground() 、onStop() 。
Ability是应用所具备能力的抽象,也是应用程序的重要组成
部分。一个应用可以具备多种能力(即可以包含多个Ability), 
HarmonyOS 支持应用以Ability为单位进行部署。Ability可以
分为FA(FeatureAbility)和PA(ParticleAbility)两种类型,每种
类型为开发者提供了不同的模板,以便实现不同的业务功能。FA 图5.5 
PageAbility多
支持PageAbility(页面能力), 用于提供与用户交互的能力。一个页面示意图
Page可以由一个或多个AbilitySlice构成,AbilitySlice是指应用
的单个页面及其控制逻辑的总和。一个Page可以包含多个AbilitySlice,但是Page进入
前台时界面默认只展示一个AbilitySlice。

(2)ServiceAbility介绍。
Service也是一种Ability,Ability为Service提供了以下生命周期方法,开发者可以
重写这些方法,来添加其他Ability请求与ServiceAbility交互时的处理方法。

如果Service需要与PageAbility或其他应用的ServiceAbility进行交互,则须创建
用于连接的Connection。Service支持其他Ability通过connectAbility() 方法与其进行
连接。

如果Service需要与PageAbility或其他应用的ServiceAbility进行跨设备交互,则
须创建用于连接的Connection。Service支持其他Ability通过connectAbility() 方法与
其进行跨设备连接。

(3)DataAbility介绍。
通过Ability派生出的DataAbility类,有助于应用管理其自身和其他应用存储数据
的访问,并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的数据共


第5章操作系统软件框架95
享,也支持跨设备不同应用的数据共享。
4.应用层
应用层包括系统应用和第三方非系统应用。应用由一个或多个FA(Feature 
Ability)或PA(ParticleAbility)组成。其中,FA 有UI 界面,提供与用户交互的能力;而
PA 无UI 界面,提供后台运行任务的能力以及统一的数据访问抽象。基于FA/PA 开发
的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用
体验。根
据图5.4,OpenHarmony框架在应用框架层和系统服务层之间提供了系统基本能
力子系统集、基础软件服务子系统集、增强软件服务子系统集和硬件服务子系统集。除了
框架层和系统服务层本身已有的模块外,还有如下模块。
在系统基本能力子系统集中有如下模块。
(1)多模输入子系统。OpenHarmony旨在为开发者提供NUI(NaturalUser 
Interface)的交互方式,有别于传统操作系统的输入,在OpenHarmony上,将多种维度的
输入整合在一起,开发者可以借助应用程序框架、系统自带的UI 组件或API 接口轻松地
实现具有多维、自然交互特点的应用程序。多模输入子系统目前支持传统的输入交互方
式,例如按键、触控等。
(2)图形子系统。图形子系统主要包括UI 组件、布局、动画、字体、输入事件、窗口管
理、渲染绘制等模块,构建基于轻量OS 应用框架满足硬件资源较小的物联网设备或者构
建基于标准OS 的应用框架满足富设备(如平板计算机和轻智能机等)的OpenHarmony
系统应用开发。

(3)安全子系统。安全子系统包括系统安全、数据安全、应用安全等功能,为
OpenHarmony提供有效保护应用和用户数据的能力。安全子系统当前开源的功能,包
括应用完整性保护、应用权限管理、设备认证、密钥管理服务、数据分级保护。
(4)AI 子系统。AI 业务子系统是OpenHarmony提供原生的分布式AI 能力的子系
统。本次开源范围是提供了统一的AI 引擎框架,实现算法能力快速插件化集成。框架
中主要包含插件管理、模块管理和通信管理等模块,对AI 算法能力进行生命周期管理和
按需部署。后续,会逐步定义统一的AI 能力接口,便于AI 能力的分布式调用。同时,提
供适配不同推理框架层级的统一推理接口。

在基础软件服务子系统集有如下模块。

(1)事件通知子系统。OpenHarmony通过公共事件服务(CommonEventService, 
CES)为应用程序提供订阅、发布、退订公共事件的能力。
公共事件可分为系统公共事件和自定义公共事件。
系统公共事件:系统将收集到的事件信息,根据系统策略发送给订阅该事件的用户

程序。例如,系统关键服务发布的系统事件(例如hap安装、更新、卸载等)。
自定义公共事件:应用自定义一些公共事件用来实现跨应用的事件通信能力。
每个应用都可以按需订阅公共事件,订阅成功且公共事件发布,系统会把其发送给应

用。这些公共事件可能来自系统、其他应用和应用自身。