图片

学习微内核**资料全**,还得靠**华为**。都说华为有**爱国情怀**,这一点不假,就是要跟外国很多领域**死磕**,并且有硬实力,说干就能干出来。

本文根据我自己的理解,做一个入门讲解和代码编译运行,并附上一些学习资料。

官网文档:

https://device.harmonyos.com/cn/documentation/

代码:https://gitee.com/openharmony

  1. 简介

图片

华为鸿蒙系统(**HUAWEI Harmony OS**),是华为公司在**2019**年8月9日于东莞举行华为开发者大会(HDC.2019)上正式发布的操作系统。

华为鸿蒙系统是一款全新的面向**全场景**的分布式操作系统,创造一个超级虚拟**终端互联**的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的**多种智能终端**,实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。

1.1 抽象的艺术

图片

华为的**消费者业务**很强大,个人消费品注重**品控**,这恰恰是华为的优势,华为设备的**稳定性**和对**需求响应**速度都是很好的,这也适合做个人消费品,可以这么说帖上华为的标签,价钱就能涨一点。

但是各种设备,这里可以统称为**AIOT**物联网设备,里面运行的程序千奇百怪,维护成本很高,这么多设备,里面如果有软件共性的东西抽取出来一个**核心**,把这个核心做好,那么这些设备就不容易出问题,还容易维护,关键还能**相互通信**,因为有了共同的基础OS。那么这个核心就是**“微内核”LiteOS**,把最基础OS的组件放入LiteOS,大家共用,这其实是软件领域一种“**抽象**”的概念。

计算机科学中遇到的所有问题都可通过增加一层抽象来解决。

                                  --David Wheeler

抽象的**优点**在于它让上层**以较小的代价获得所需的功能**,并同时可以提供一些保护。但抽象同时也是一种**限制**,会丧失一些应有的**灵活性**。比如,当你在考虑在项目中应该使用哪个函数库的时候,就常常需要这方面的权衡:过多的抽象和过少的抽象自然都是不合适的。理解应用的需求也很重要。一个能合理满足应用需求的操作系统设计是操作系统设计者需要深入考虑的问题。这也是一种**权衡**,过多的服务功能和过少的服务功能自然都是不合适的。实际上,我们通过应用程序的**特征**和**需求**来判断操作系统需要什么程度的抽象和功能。

软件抽象的直接结果就是导致“**模块化**”和“**分层**”,从软件框架图里面可以看出来:

图片

LiteOS的特点:轻量级(内核小于10k)、低功耗(1节5号电池最多可以工作5年)。鸿蒙系统可以覆盖所有的设备,应用在智能设备上,比如摄像头、门铃、体温计等设备。利用软总线将各个设备连接起来。

**1.2 万法归一
**

图片

上面说了抽象出微内核,这还远远不够,不仅**底层代码**可以复用,**野心**更大一点**上层代码**也可以在不同产品上复用,真正的“**一为万物,万物归一**”,修成武林至高秘籍,站在软件的最高峰。主要由以下概括:
  • 统一OS,弹性部署 一套操作系统,满足大大小小所有设备的需求,小到耳机,大到车机,智慧屏,手机等,让不同设备使用同一语言无缝沟通。

  • 硬件互助,资源共享 搭载HarmonyOS 的每个设备都不是孤立的,在系统层让多终端融为一体,成为“超级终端”,终端之间能力互助共享,带来无缝协同体验。

  • 一次开发,多端部署 开发者基于分布式应用框架,写一次逻辑代码,就可以部署在多种终端上。

  • 应用自由跨端 HarmonyOS 原子化服务是轻量化服务的新物种,它提供了全新的服务和交互方式,可分可合,可流转,支持免安装等特性,能够让应用化繁为简,让服务触手可及。

  • 用“简单”激活你的设备智能 HarmonyOS 是新一代智能终端操作系统。为不同设备的智能化、互联与协同提供了统一的语言。设备可实现一碰入网,无屏变有屏,操作可视化,一键直达原厂服务等全新功能。通过简单而智能的服务,实现设备智能化产业升级。

    这种大一统的思想,怎么感觉这么熟悉,好像就是中国人骨子里面的“大一统”,我们要搞中央集权,要集中力量办大事,不允许分裂,吸纳包容扩大自己,看来中国人也善于干这个事情。。。

1.3 分层诞生了软总线

图片

华为提出了“**分布式软总线**”,是不是觉得这个名字很**高大上**,事实证明一个高大上的名字非常的重要,特别是需要对外宣传的东西,或者是一个老的技术在一个新领域的应用,足可以用高大上的名字去新的领域**忽悠一波**。分布式软总线的实质就是“通信”,其实就是一个**通信协议**,但是名字叫“XXX协议”,那不是烂大街了,你说很牛逼,原来就个这玩意,都没人信。

不同设备间的通信,最常见的就是**OSI七层协议**模型,学过《**计算机网络**》的都清楚。这里出现了一个不按套路出牌的,基于万物互联的需求,觉得七层太复杂了,需要简化,直接砍掉三层**七层变四层**,然后改进下适应自己的需求,也算是创新,如下图:

图片

全场景设备间可以基于软总线完成设备**虚拟化**、**跨设备**服务调用、**多屏协同**、**文件分享**等分布式业务。分布式软总线的典型**特征**:
  • 自动发现/即连即用

  • 高带宽

  • 低时延

  • 高可靠

  • 开放/标准

    将中间的四层协议栈精简为一层提升有效载荷,有效传输带宽提升20%。极简协议在传统网络协议的基础上进行增强:

  • 流式传输:基于UDP实现数据的保序和可靠传输;

  • 双轮驱动:颠覆传统TCP每包确认机制;

  • 不惧网损:摒弃传统滑动窗口机制,丢包快速恢复,避免阻塞;

  • 不惧抖动:智能感知网络变化,自适应流量控制和拥塞控制;

    总结下,就是参考《计算机组成原理》里面硬件总线的概念,受到启发,然后把《计算机网络》里面的七层模型改四层用起来,最后再根据业务需求做一些修正,满足不同的需求。看着好像简单,其实从技术创新角度已经算挺大创新了,特别是能工程应用。最近看马斯克吐槽发论文大多没用,能工程实践特别是利用基础理论,才是一种更有益的创新吧。

1.4 软件框架介绍

图片

上面放过这个图,解释鸿蒙的特性。下面具体看下:

内核层

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

驱动子系统:驱动框架(HDF)是系统硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。

系统服务层

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

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

基础软件服务子系统集:提供公共的、通用的软件服务,由事件通知、电话、多媒体、DFX(Design For X) 等子系统组成。

增强软件服务子系统集:提供针对不同设备的、差异化的能力增强型软件服务,由智慧屏专有业务、穿戴专有业务、IoT专有业务等子系统组成。

硬件服务子系统集:提供硬件服务,由位置服务、用户IAM、穿戴专有硬件服务、IoT专有硬件服务等子系统组成。

根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。

框架层

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

应用层

应用层包括系统应用和第三方非系统应用。应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成。其中,FA有UI界面,提供与用户交互的能力;而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。基于FA/PA开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。

详细介绍:

https://docs.openharmony.cn/pages/v3.1/zh-cn/OpenHarmony-Overview_zh.md/

1.5 鸿蒙微内核LiteOS介绍

图片

上面是Huawei LiteOS架构框图,操作系统是一个大的概念,其中包含了内核,**鸿蒙的内核就是LiteOS**,但是内核有时也单独叫一个操作系统,大家知道就可以。LiteOS基础内核:包括不可裁剪的极小内核和可裁剪的其他模块。极小内核包含任务管理、内存管理、中断管理、异常管理和系统时钟。可裁剪的模块包括信号量、互斥锁、队列管理、事件管理、软件定时器等。

参考:

https://support.huaweicloud.com/productdesc-LiteOS/zh-cn_topic_0145347225.html

关于微内核可以参考之前的一个文章:

seL4微内核入门-微内核介绍

对于微内核,由于用**MMU**(内存管理单元)对进程空间(内存区域)做了**隔离**保护,没有授权的进程是无法访问其他进程的空间。这就阻止了恶意程序对其他进程数据的窃取。在微内核的管理下,因为MMU的封锁过于严格,用户进程要存储一个东西,必须**请求内核**,使用内核的IPC进行进程间的通信。Linux是宏内核,大量数据处理是通过系统调用这个问题不突出,但是微内核的IPC实在是“伤不起”,就这样微内核一直被Linux这种宏内核吊打。学界想了很多办法,L4提出了一个Fast IPC的办法,只要你IPC通讯没数据,可以借用CPU核心寄存器的办法传递消息,速度大大加快。也有人想到了dIPC, **direct IPC**。用标签内存的办法进行隔离,传递数据,无需通过内核空间。大大加快了通讯速度。但标签内存不符合现在计算机体系的架构,实践中,采用的可能性较小。

上交的**陈海波**教授团队,19年想了两个办法进行**IPC**的加速。一个是**XPC**,一个是**Skybridge**。其中XPC是硬件,增加了一点点CPU硬件修改,使得IPC通讯无需内核的参与,也无需数据拷贝;Skybridge,采用的是双内核,一个RootKernel,类似type-1的虚化,专门负责IPC数据通讯,上层的Kernel为微内核。这样IPC绕过了MMU 机制,也不会对微内核之上的MMU保护机制产生破坏。在IPC通讯的时候,无内核参与,无需拷贝。

图片

再来看看Android的架构。Android因为采用了非常多的服务,不同于普通的应用,非常依赖于IPC通讯。为了提高速度,开发出了 **IPC Binder Drivers** 来加速 Linux下的IPC通讯。但效果不是太理想。XPC对Binder IPC的加速有50多倍。

SkyBridge和dIPC处于同一性能级别,XPC则更高。从论文上看,SkyBridge更实用一些,未来XPC还需要继续依赖于硬件的革新。

图片

介绍:陈海波长期从事操作系统研究,在**低时延**与**高可信**操作系统前沿研究与产业化方面取得了一系列成果。提出了低时延操作系统的关键方法,突破工业界通用操作系统的形式化验证方法,提高了工业界操作系统的性能与安全性,破解了微内核操作系统高性能、富生态与高安全难以兼得的技术难题,推动了我国操作系统的研究与大规模产业应用。关键是**82年**的,厉害,真实没有他,鸿蒙要晚几年了。有兴趣的可以**谷歌学术**搜索下他的论文。华为与上交陈海波的强强联合诞生了LiteOS。

之前一篇文章我讲过,中国人擅长做1-100的事情,但不擅长0-1的工作,

AUTOSAR入门-江湖

这其实也是一步落后,步步落后的体现,不可否认外国的技术或者说需求就是先进,谷歌的**Fuchsia**系统很早就出来了,就是想统一所有设备的OS,然后华为也**跟进**这个技术,并且做的还挺好,找了一堆牛人还能吊打Fuchsia,装机量超级高,就是这个道理。最近,马斯克收购Twitter后也开始抄微信,看来天下文章一大抄,三十年河东三十年河西,你抄我来我抄你,看谁更努力了。

1.6 风口汽车上的鸿蒙应用

图片

按照之前说的万物归一,那华为拿“**鸿蒙**”这大杀器,哪里有风口,就往哪里用啊。**特别是汽车**,简直太适合“鸿蒙”系统了,可以说比手机都适合。

车机鸿蒙 OS 对生态端和硬件端均实现极为强劲的支持。

1)鸿蒙 OS 车机系统在生态 上可以对接华为原生应用和应用商城,对车企支持仪表应用、OEM 应用等;

2)鸿蒙 OS 车机系统可以支持一芯多屏、多并发、分布式外设、车载网络&多部件协同等特性。

鸿蒙 OS 基于**微内核**,兼具 **QNX** 和**Android** 的优点,尤其国内华为服务支持在后端生 态适配上更有优势。QNX 是最为老牌的车载操作系统,作为微内核系统,QNX 提供较高的安全性、稳定性和实时性,但对生态支持较差。Andorid 与之相反,生态上 有现成的手机生态做支撑,但在安全稳定性较差,无法支持仪表。Linux 易于剪裁开发, 大众 VW.OS 和特斯拉 Version 均基于 Linux,特斯拉 Version 也直接支持使用 Linux 运行仪表软件,但 Linux 生态较弱。鸿蒙 OS 采用微内核,对于分布式产品只需要较少硬件资源就可以支持,响应速度较快,可以支持仪表等高实时稳定要求的部件工作。

2. 代码下载编译

2.1 代码下载

repo init -u https://gitee.com/openharmony/manifest.git-b master --no-repo-verify
repo sync-c
repo forall -c'git lfs pull'

具体参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/sourcecode-acquire.md#https://gitee.com/help/articles/4191

代码同步失败,执行:

repo sync -j1 --fail-fast

2.2 编译环境搭建

每次都搞编译环境,很麻烦,有个个简单的方法就是使用**Docker**,华为提供了Docker环境。Docker 是一个用于开发,交付和运行应用程序的开放平台,相当于直接拥有了别人配置好的一个环境。

Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。Docker教程:

https://www.runoob.com/docker/docker-tutorial.html

Docker工具安装

curl -fsSL https://get.docker.com
| bash -s docker --mirror Aliyun

参考:

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/gettools-acquire.md

搭建Docker环境(轻量系统和小型系统)

获取华为提供的Docker镜像

docker pull
swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0

进入源码根目录执行如下命令,从而进入Docker构建环境。ubuntu下执行:

docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0

图片

2.3 编译运行

进入Docker后,就像你拥有了一台别人已经配置好的环境的电脑。

执行如下命令进行配置:

hb set

图片

用上下箭头选择qemu_mini_system_demo并回车。

执行如下编译命令:

hb build -f

查看编译结果:

图片

运行:

./qemu-run

图片

从上面log可以看到系统启动后,会启动网络协议栈tcpio,然后进入shlll,最后自动执行了Test程序。

3. 资料

鸿蒙官网文档

https://device.harmonyos.com/cn/documentation/

LiteOS文档

https://support.huaweicloud.com/productdesc-LiteOS/zh-cn_topic_0145347225.html

代码带注释

https://gitee.com/weharmony/kernel_liteos_a_note

代码:https://gitee.com/openharmony

资料太多了,需要什么自己搜。

后记:

最近写了一系列的微内核介绍和代码下载编译,**还没有进行深入的讲解**,准备再介绍两个微内核Fuchsia和rCore,就开始回来分析这些代码,希望大家一块进行学习探讨。

啥都懂一点啥都不精通

干啥都能干干啥啥不是

专业入门劝退堪称程序员杂家”。

后续会继续更新,纯干货分析,无广告,不打赏,欢迎转载,欢迎评论交流!

“那路谈OS与SoC嵌入式软件”,欢迎关注!

个人文章汇总:https://thatway1989.github.io

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐