HDC2021技术分论坛:“积木拼装”,HarmonyOS弹性部署大揭秘!
作者:peitaiyi,华为终端OS产品交付专家
HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,实现更好的万物互联。
那么,HarmonyOS是如何用一套OS源码部署到多种终端的呢?本文将为你揭秘。
一、面临的挑战
首先,我们先简单介绍一套OS部署到多种终端面临的两大挑战。
- 传统OS能力比较单一:一套OS系统部署到多种终端,不仅要支持百KB到GB级的内存,还需支持主流CPU架构、板级的器件、各种SoC及外设模组。而传统OS大都是单设备操作系统,一套OS仅适配于一套设备,无法满足碎片化的硬件需求。
- 传统OS裁剪拼装能力差:产品形态分布于千行百业,大到汽车、电视、手机,小到手表、门铃、烤箱,不同功能的产品对OS的能力诉求不同,这要求OS可以灵活地剪和拼装。而传统OS裁剪拼装能力差,无法满足千行百业的产品。

图1 硬件和产品形态的碎片
二、HarmonyOS应对策略
基于上述的挑战,HarmonyOS应对策略是“OS可大可小,部件一次开发可在多种终端上部署”。
1. 部件介绍
部件是HarmonyOS系统能力的基本单元,具有可复用、可裁剪、可配置、可独立编译和测试的特点。以源码、配置和资源文件为划分依据,拥有独立的文件和目录,可在不同的设备上实例化为不同的库或二进制文件,图2所示。
从系统角度看,部件可视为任何能运行在HarmonyOS上的软件。从外部设备看,部件则可视为一个个按设备所需组装成OS的系统能力。

图2 HarmonyOS部件化示意图
2. 部件拼装
HarmonyOS源码由“必选部件集”和“可选部件集”组成,必选部件集具有HarmonyOS特征的必选系统能力,可选部件集则具有产品可裁剪的系统能力。被裁剪的部件只会引起对应系统能力的缺失,不会引起系统的异常。
必选部件和可选部件像“积木”一样,根据设备硬件模块(摄像头、扬声器、屏幕、网络)与内存大小灵活拼装成不同的OS软件包,并部署到不同设备。
“大设备装大系统,小设备装小系统。”无论智能设备的运存大小如何,总能找到匹配TA的那一块系统积木。

图3 积木拼装
HarmonyOS部件拼装流程如图4所示。HarmonyOS发布归一化的SDK,应用开发者使用SDK和IDE进行跨设备的应用开发,再按不同的设备类型分发应用。同时,三方的部件也可以与OS软件包一起部署到设备中。

图4 HarmonyOS部件拼装流程
至此,相信大家对部件拼装有了一定的认识。随着万物互联时代的不断发展,HarmonyOS将适配越来越多的硬件设备,这就使得部件开发将马不停蹄,以适应千行百业的硬件产品。开发者如何开发部件呢?下文将为你解答。
三、如何开发部件
我们都知道,HarmonyOS是基于开源项目OpenHarmony开发的面向多种全场景智能设备的商用版本,HarmonyOS的部件大都来自OpenHarmony,所以下文对部件开发的解答,将围绕OpenHarmony部件的开发展开。
在OpenHarmony生态中有三大类开发者:OS开发者、芯片解决方案厂商和产品解决方案厂商,如图5所示。

图5 OpenHarmony开发者
- OS开发者提供OpenHarmony所需的部件,包括内核、驱动框架、图形、媒体等基础的系统能力。
- 芯片解决方案厂商对OS的驱动和接口进行适配,形成基于开发板的完整芯片解决方案。
- 产品解决方案厂商基于OS和成熟的芯片解决方案组装产品。
1. 部件标准化
部件开发前需完备部件详细设计,在此过程中部件标准化尤为重要。
部件标准化确定了部件的名称、功能、可配置的特性、详细的规格和依赖。一个典型的部件的定义,图6所示。它包含了部件的名称、功能描述、是否系统必选、ROM/RAM、可配置特性和依赖等等。部件的依赖应尽量简单合理,杜绝循环和冗余的依赖。禁止部件直接依赖特定硬件和产品。

图6 部件定义文件
只有OS的系统能力都按部件进行标准化后,对外的系统能力才能灵活按需拼装。
2. 部件、开发板和产品严格解耦
为了保持OS可裁剪可拼装的能力,部件开发过程中,部件与开发板和产品之间应严格解耦且可独立编译。至此,我们将开发视图分为OS部件、芯片解决方案和产品解决方案,如图7所示。“OS部件”目录主要存放OS的能力集,比如内核、媒体、图形、电话、分布式软总线、安全等等。“芯片解决方案”目录主要存放芯片厂商基于某个开发板或者SoC对OS的适配。“产品解决方案”目录主要存放产品相关的配置以及厂商对OS接口的实现。

图7 OpenHarmony开发视图目录树示意图
基于OpenHarmony开发视图目录树,实现了部件、开发板和产品各自独立的开发,保障了三者良好的解耦性。
3. 全流程管控
部件在设计、开发和测试过程中,需严格管控整个流程。如图8所示,设计文档在对应PMC审核通过后方可启动部件的开发,在SIG组开发功能成熟后,再经OpenHarmony对应子系统的committer审核合入。合入后,测试团队将按部件独立测试验收,验收的范围不仅包括部件的功能和稳定性,还包括部件是否可独立编译、独立测试、依赖是否合入等等。HPM(HarmonyOS Package Manager)审核人员审核通过后,便可以申请HPM上架。

图8 HarmonyOS部件管控流程
说明:
- PMC(Projects Management Centre)是指项目管理委员会,负责OpenHarmony 社区的管理工作,拥有代码库写权限、OpenHarmony 新版本发布、Roadmap发布、新PMC/Committer等社区事务的投票权、以及新的 PMC 成员和 Committer 提名权。
- SIG(Special Interest Group)是指特别兴趣小组,SIG在PMC项目管理委员会指导下,负责OpenHarmony社区特定子领域及创新项目的架构设计、开源开发及项目维护等工作。
以上就是本期全部内容!相信大家对部件有了一定的认识,欢迎广大开发者参与到部件开发中。

扫码添加开发者小助手微信
获取更多HarmonyOS开发资源和开发者活动资讯
HDC2021技术分论坛:“积木拼装”,HarmonyOS弹性部署大揭秘!的更多相关文章
- HDC2021技术分论坛:如何高效完成HarmonyOS分布式应用测试?
作者:liuxun,HarmonyOS测试架构师 HarmonyOS是新一代的智能终端操作系统,给开发者提供了设备发现.设备连接.跨设备调用等丰富的分布式API.随着越来越多的开发者投入到Harmon ...
- HDC2021技术分论坛:组件通信、硬件池化,这些创新技术你get了吗?
作者:ligang 华为分布式硬件技术专家,sunbinxin 华为应用框架技术专家 HarmonyOS是一款全新的分布式操作系统,为开发者提供了元能力框架.事件通知.分布式硬件等分布式技术,使能开发 ...
- HDC2021技术分论坛:异构组网如何解决共享资源冲突?
作者:lijie,HarmonyOS软总线领域专家 相信大家对HarmonyOS的"超级终端"比较熟悉了.那么,您知道超级终端场景下的多种设备在不同环境下是如何组成一个网络的吗?这 ...
- HDC2021技术分论坛:进程崩溃/应用卡死,故障频频怎么办?
作者:jiwenqiang,DFX技术专家 提到开发一个产品,我们通常首先想到的是要实现什么样的功能,但是除了功能之外,非功能属性也会很大程度上影响一个产品的体验效果,比如不定时出现的应用卡死.崩溃 ...
- HDC技术分论坛:HarmonyOS新一代UI框架的全面解读
作者:yuzhiqiang,UI编程框架首席技术专家 在Harmony 3.0.0开发者预览版中,包含了新一代的声明式UI框架ArkUI 3.0.多语言跨平台编译器ArkCompiler 3.0.跨端 ...
- 使用Rainbond打包业务模块,实现业务积木式拼装
背景 每个程序员在学习开发的过程中,都知道解耦和模块化的重要性,也希望自己设计和开发的程序支持模块化,开发好的模块其他人就能快速复用,为了达成这个效果,我们学习各种模块化和解耦的技术,从面向对象的设计 ...
- 【Raspberry Pi】新入手的Raspberry Pi3拼装日志
一.概述 2016年暑假某宝入手Raspberry Pi 3,装机清单: 树莓派主板 亚克力外壳 小风扇 散热片 30G SD card 螺丝若干颗 因机型问题,可能与你的机器有微小差异 二.装机过程 ...
- Ibatis动态拼装sql,常用标签总结及举栗子。
今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ib ...
- JS 拼装代码的HTML onClick方法传递字符串
有时会在JS中拼装HTML代码,这时在HTML中出现的onClick()方法中: 1.出现传递Num型的数据,直接拼装进去即可: 2.可能会出现传递字符串的情况,处理方法比较特殊,如下: a:直接字符 ...
随机推荐
- 阿里云NAS性能测试
测试方法:根据阿里云NAS官方文档进行测试 测试对象:性能型NAS,总容量1PB,已使用27.49GB(计算吞吐量时按30GB计算) 随机读IOPS测试 测试命令 fio -numjobs=1 -io ...
- day12 form组件
day12 form组件 今日内容 form组件前戏 form组件基本定义 form组件数据校验功能 form组件渲染标签 form组件提示信息 数据校验进阶 form组件补充 form组件源码探索 ...
- Flink(四)【IDEA执行查看Web UI】
1.导入依赖 <!-- flink Web UI --> <dependency> <groupId>org.apache.flink</groupId> ...
- Flume(二)【入门】
目录 一.安装部署 1.安装地址 2.安装步骤 二.入门案例 1.官方案例(nestat->logger) 2.实时监控单个追加文件(exec->hdfs) 3.实时监控目录下多个新文件( ...
- Git的使用-一个分支完全替换另一个分支
之前公司git分支混乱,今天花时间整理了一下,在合并分支的时候遇到一个问题: 一个很久没有拉取远程代码的分支与master分支合并时,出现冲突之外,还会丢失文件,很头疼,然后找到了下面的方法,可以直接 ...
- ListView的item不能点击(焦点冲突问题)
一般这种问题就是item里面有checkbox或button之类抢占焦点的控件,解决方案有2种: 第一种:就是在checkbox或button添加android:focusable="fal ...
- redis入门到精通系列(八):redis的高可用--主从复制详解
(一)主从复制介绍 前面所讲的关于redis的操作都属于单机操作,单机操作虽然操作简单,但是处理能力有限,无法高可用.所谓高可用性,就是指当一台服务器宕机的时候,有备用的服务器能顶替上,在单机操作上这 ...
- Spring事务隔离级别和传播特性(转)
相信每个人都被问过无数次Spring声明式事务的隔离级别和传播机制吧!今天我也来说说这两个东西. 加入一个小插曲,一天电话里有人问我声明式事务隔离级别有哪几种,我就回答了7种,他问我Spring的版本 ...
- 【C/C++】C++ warning: control reaches end of non-void function return
控制到达非void函数的结尾. 一些本应带有返回值的函内数到容达结尾后可能并没有返回任何值. 这时候,最好检查一下是否每个控制流都会有返回值. 我是ostream声明的时候没有写return out; ...
- 漏洞扫描器-AWVS
目录 介绍 漏洞扫描 网络爬虫==漏洞分析.验证 主机发现 子域名探测 SQL注入 HTTP头编辑 HTTP监听 介绍 AWVS为Acunetix Web Vulnarability Scanner的 ...