学习目标

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。

OpenHarmony和HarmonyOS

HarmonyOS官方网站:https://www.harmonyos.com/

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目。
HarmonyOS是华为的商业项目,是基于OpenHarmony开发的。

OpenHarmony是由华为捐助给开放原子的。
开放原子开源基金会是致力于推动全球开源事业发展的非营利机构,于 2020 年 6 月在北京成立,由阿里巴巴、百度、华为、浪潮、360、腾讯、招商银行等多家龙头科技企业联合发起。
开放原子开源基金会本着产业公益性服务机构、开源项目管理机构、提升我国对全球开源贡献的引领者的定位,遵循共建、共治、共享原则,系统性打造开源开放框架,搭建国际开源社区,提升行业协作效率,赋能千行百业。
目前开放原子开源基金会业务范围主要包括募集资金、专项资助、宣传推广、教育培训、学术交流、国际合作、开源生态建设、咨询服务等业务。
开放原子开源基金会专注于开源软件的推广传播、法务协助、资金支持、技术支撑及开放治理等公益性事业,促进、保护、推广开源软件的发展与应用;致力于推进开源项目、开源生态的繁荣和可持续发展,提升我国对全球开源事业的贡献。
开发原子属于国家队。

系统技术架构

OpenHarmony - 图1
整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 功能/模块”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块。

内核层
  • 内核子系统:HarmonyOS采用多内核(Linux内核、HarmonyOS微内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。
  • 驱动子系统:硬件驱动框架(HDF)是HarmonyOS硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。

OpenHarmony - 图2
多内核的好处:

  • 安全: HAL层对上隔离了框架层和内核层,对下隔离了内核层和HDF,保证了上下访问间的安全性,生而安全,天生安全
  • 友好: 对于设备生产厂商而言,每家擅长的不通过,可供选择的内核越多,厂商选择性越多,支持也越多
  • 复用: 目前市面上的Linux内核已经相当成熟,配套软硬件也多,无需再去重新编写,可以直接拿来使用
  • 高效: 对于硬件资源内力不足的设备,无需部署繁重的内核,可以采用微内核LiteOS作为内核,更加精简,更加高效

鸿蒙提供的内核

  • linux
  • liteos-m 适用于MCU类L0级别设备
  • lites-a 适用于嵌入式L1级别设备
  • 鸿蒙内核,暂无提供
  • 其他内核,任何人或机构自由可扩展

    系统服务层

    OpenHarmony - 图3
    系统服务层是HarmonyOS的核心能力集合,通过框架层对应用程序提供服务。该层包含以下几个部分:

  • 系统基本能力子系统集:为分布式应用在HarmonyOS多设备上的运行、调度、迁移等操作提供了基础能力,由分布式软总线、分布式数据管理、分布式任务调度、公共基础库、多模输入、图形、安全、AI等子系统组成。

  • 基础软件服务子系统集:为HarmonyOS提供公共的、通用的软件服务,由事件通知、电话、多媒体、DFX(Design For X) 、MSDP&DV等子系统组成。
  • 增强软件服务子系统集:为HarmonyOS提供针对不同设备的、差异化的能力增强型软件服务,由智慧屏专有业务、穿戴专有业务、IoT专有业务等子系统组成。
  • 硬件服务子系统集:为HarmonyOS提供硬件服务,由位置服务、生物特征识别、穿戴专有硬件服务、IoT专有硬件服务等子系统组成。 根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。
    框架层
    框架层为HarmonyOS应用开发提供了Java/C/C++/JS等多语言的用户程序框架和Ability框架,两种UI框架(包括适用于Java语言的Java UI框架、适用于JS语言的JS UI框架),以及各种软硬件服务对外开放的多语言框架API。根据系统的组件化裁剪程度,HarmonyOS设备支持的API也会有所不同。
    应用层
    OpenHarmony - 图4
    应用层包括系统应用和第三方非系统应用。HarmonyOS的应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成。其中,FA有UI界面,提供与用户交互的能力;而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。FA在进行用户交互时所需的后台数据访问也需要由对应的PA提供支撑。基于FA/PA开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。

南向开发和北向开发

简单来说,上北下南。上层应用开发我们称之为北向开发,下层系统开发我们称之为南向开发。
南向开发需要做的是底层内核的开发,硬件驱动开发,中间件的开发。
北向开发就是开发我们熟知的APP。

对于南向开发,OpenHarmony系统分为三个版本:

类型 处理器 最小内存 能力
轻量系统
mini system
MCU类处理器(例如Arm Cortex-M、RISC-V 32位的设备) 128KiB 提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。
小型系统
small system
应用处理器(例如Arm Cortex-A的设备) 1MiB 提供更高的安全能力、标准的图形框架、视频编解码的多媒体能力。可支撑的产品如智能家居领域的IP Camera、电子猫眼、路由器以及智慧出行域的行车记录仪等。
标准系统
standard system
应用处理器(例如Arm Cortex-A的设备) 128MiB 提供增强的交互能力、3D GPU以及硬件合成能力、更多控件以及动效更丰富的图形能力、完整的应用框架。可支撑的产品如高端的冰箱显示屏。

开发环境搭建

编译环境

编译环境,采用的是Linux进行编译,为了满足编译环境,我们采用Docker容器进行编译,方便环境的轻量化。

  1. 导入提供的Docker Image

    1. docker load -i genkipi_image.tar

    054.png

  2. 运行镜像

055.png

  • 容器名称配置:根据个人需求进行配置
  • 端口映射配置:根据个人需求进行配置
  • 文件映射配置:本地部分根据个人需求进行配置。容器内的必须为:/home/openharmony
    1. docker run --cpuset-cpus=6 --cpu-shares=10240 --cpu-quota=1000000 --memory=4g -v D:\DockerWS\MyHello:/home/openharmony -p 40022:22 -it ohos_mini:v1 /usr/sbin/sshd -D

    编码环境

    采用vscode进行编码。
    插件安装
    打开vscode的插件安装条目,搜索插件Remote Development,进行安装
    vscode挂载Docker容器
  1. 打开vscode,进入到Remote Development窗口

056.png

  1. 挂载容器。选中刚刚启动的容器,鼠标右键,选择附加到容器

057.png

  1. 此时会打开新的窗体,显示正在安装,等待环境准备完成

058.png
第一次加载比较慢,请耐心等待。

  1. 加载项目目录

059.png

  • 打开资源管理器
  • 点击打开文件夹
  • 在中间会弹出框,选择打开/home/openharmony文件夹,点击确认

060.png
加载完成后,如上图。

程序编译和烧录

源码添加

将提供的source.zip解压,放到启动容器时的本地映射路径下,如下图:
061.png
观察VScode资源管理器,发现代码已经默认都加载进来了。
062.png

程序编译
  1. 在vscode中,打开命令终端,如下图:

063.png
064.png

  1. 配置开发板。在命令行中输入:

    1. hb set

    065.png
    通过上下键选中,genkipi,然后回车,这样就为操作系统配置了开发板。

  2. 编译代码。在命令行中输入:

    1. hb build

    066.png
    编译过程比较久,请耐心等待。
    067.png
    第一次编译花费的时间比较久,耐心等待。

  3. 程序烧录。本地打开hiburn,选择烧录文件,进行烧录

068.png

  • 刷新串口,选中对应的串口
  • 点击连接
  • 选择烧录文件,文件在·out/genkipi/genkipi/Hi3861_wifiiot_app_allinone.bin

070.png

  • 点击开发板的重置按钮
  • 点击sen file进行烧录
  • 等待安装完成

071.png
点击重置按钮,观察日志输出:
072.png

开发环境搭建2

  1. 导入镜像。命令行进入镜像目录,新的镜像名称为big.tar.gz

    1. docker load -i big.tar
  2. 导入后,在Docker Desktop中显示如下:

111.png

  1. 通过命令运行镜像。此处不可使用gui启动

    1. docker run -p 40022:22 -it genkipi:v1 bash
    • -p 40022:22: 40022为本机port,22为容器port。意思是将本机port和容器port进行映射。

112.png
以上错误表示,本机的端口被占用,更换本机端口即可。

  1. 通过Mobaxterm进入到容器中,进行源码编译。
  2. 将编译的输出文件拷贝到windows下,进行烧录。

    1. docker cp xxx:/home/openharmony/out/genkipi/genkipi/xxx.bin ./dst.bin
  3. 烧录程序。

    练习题

  • 搭建基于Hi3861芯片的OpenHarmony开发环境