学习目标
- 了解Openharmony
- 理解Openharmony的开发框架
- 能够搭建开发环境
学习内容
OpenHarmony介绍
官方网址: https://www.openharmony.cn/mainPlay
开源项目地址:https://gitee.com/openharmony
OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。
OpenHarmony和HarmonyOS
HarmonyOS官方网站:https://www.harmonyos.com/
OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目。
HarmonyOS是华为的商业项目,是基于OpenHarmony开发的。
OpenHarmony是由华为捐助给开放原子的。
开放原子开源基金会是致力于推动全球开源事业发展的非营利机构,于 2020 年 6 月在北京成立,由阿里巴巴、百度、华为、浪潮、360、腾讯、招商银行等多家龙头科技企业联合发起。
开放原子开源基金会本着产业公益性服务机构、开源项目管理机构、提升我国对全球开源贡献的引领者的定位,遵循共建、共治、共享原则,系统性打造开源开放框架,搭建国际开源社区,提升行业协作效率,赋能千行百业。
目前开放原子开源基金会业务范围主要包括募集资金、专项资助、宣传推广、教育培训、学术交流、国际合作、开源生态建设、咨询服务等业务。
开放原子开源基金会专注于开源软件的推广传播、法务协助、资金支持、技术支撑及开放治理等公益性事业,促进、保护、推广开源软件的发展与应用;致力于推进开源项目、开源生态的繁荣和可持续发展,提升我国对全球开源事业的贡献。
开发原子属于国家队。
系统技术架构
整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 功能/模块”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块。
内核层
- 内核子系统:HarmonyOS采用多内核(Linux内核、HarmonyOS微内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。
- 驱动子系统:硬件驱动框架(HDF)是HarmonyOS硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。
多内核的好处:
- 安全: HAL层对上隔离了框架层和内核层,对下隔离了内核层和HDF,保证了上下访问间的安全性,生而安全,天生安全
- 友好: 对于设备生产厂商而言,每家擅长的不通过,可供选择的内核越多,厂商选择性越多,支持也越多
- 复用: 目前市面上的Linux内核已经相当成熟,配套软硬件也多,无需再去重新编写,可以直接拿来使用
- 高效: 对于硬件资源内力不足的设备,无需部署繁重的内核,可以采用微内核LiteOS作为内核,更加精简,更加高效
鸿蒙提供的内核
- linux
- liteos-m 适用于MCU类L0级别设备
- lites-a 适用于嵌入式L1级别设备
- 鸿蒙内核,暂无提供
-
系统服务层
系统服务层是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也会有所不同。应用层
应用层包括系统应用和第三方非系统应用。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容器进行编译,方便环境的轻量化。
导入提供的Docker Image
docker load -i genkipi_image.tar
运行镜像
- 容器名称配置:根据个人需求进行配置
- 端口映射配置:根据个人需求进行配置
- 文件映射配置:本地部分根据个人需求进行配置。容器内的必须为:
/home/openharmony
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容器
- 打开vscode,进入到
Remote Development
窗口
- 挂载容器。选中刚刚启动的容器,鼠标右键,选择
附加到容器
- 此时会打开新的窗体,显示正在安装,等待环境准备完成
第一次加载比较慢,请耐心等待。
- 加载项目目录
- 打开资源管理器
- 点击打开文件夹
- 在中间会弹出框,选择打开
/home/openharmony
文件夹,点击确认
加载完成后,如上图。
程序编译和烧录
源码添加
将提供的source.zip
解压,放到启动容器时的本地映射路径下,如下图:
观察VScode资源管理器,发现代码已经默认都加载进来了。
程序编译
- 在vscode中,打开命令终端,如下图:
配置开发板。在命令行中输入:
hb set
通过上下键选中,genkipi,然后回车,这样就为操作系统配置了开发板。编译代码。在命令行中输入:
hb build
编译过程比较久,请耐心等待。
第一次编译花费的时间比较久,耐心等待。程序烧录。本地打开
hiburn
,选择烧录文件,进行烧录
- 刷新串口,选中对应的串口
- 点击连接
- 选择烧录文件,文件在·
out/genkipi/genkipi/Hi3861_wifiiot_app_allinone.bin
- 点击开发板的重置按钮
- 点击sen file进行烧录
- 等待安装完成
点击重置按钮,观察日志输出:
开发环境搭建2
导入镜像。命令行进入镜像目录,新的镜像名称为
big.tar.gz
docker load -i big.tar
导入后,在
Docker Desktop
中显示如下:
通过命令运行镜像。此处不可使用gui启动
docker run -p 40022:22 -it genkipi:v1 bash
-p 40022:22
: 40022为本机port,22为容器port。意思是将本机port和容器port进行映射。
以上错误表示,本机的端口被占用,更换本机端口即可。
- 通过Mobaxterm进入到容器中,进行源码编译。
将编译的输出文件拷贝到windows下,进行烧录。
docker cp xxx:/home/openharmony/out/genkipi/genkipi/xxx.bin ./dst.bin
-
练习题
- 搭建基于Hi3861芯片的OpenHarmony开发环境