HarmonyOS入门-简介和代码编译
学习微内核**资料全**还得靠**华为**。都说华为有**爱国情怀**这一点不假就是要跟外国很多领域**死磕**并且有硬实力说干就能干出来。 本文根据我自己的理解做一个入门讲解和代码编译运行并附上一些学习资料。官网文档https://device.harmonyos.com/cn/documentation/代码https://gitee.com/openharmony简介华为鸿蒙系统**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内核。内核抽象层KALKernel Abstract Layer通过屏蔽多内核差异对上层提供基础的内核能力包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。驱动子系统驱动框架HDF是系统硬件生态开放的基础提供统一外设访问能力和驱动开发、管理框架。系统服务层系统服务层是OpenHarmony的核心能力集合通过框架层对应用程序提供服务。该层包含以下几个部分系统基本能力子系统集为分布式应用在多设备上的运行、调度、迁移等操作提供了基础能力由分布式软总线、分布式数据管理、分布式任务调度、公共基础库、多模输入、图形、安全、AI等子系统组成。基础软件服务子系统集提供公共的、通用的软件服务由事件通知、电话、多媒体、DFXDesign For X 等子系统组成。增强软件服务子系统集提供针对不同设备的、差异化的能力增强型软件服务由智慧屏专有业务、穿戴专有业务、IoT专有业务等子系统组成。硬件服务子系统集提供硬件服务由位置服务、用户IAM、穿戴专有硬件服务、IoT专有硬件服务等子系统组成。根据不同设备形态的部署环境基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪每个子系统内部又可以按功能粒度裁剪。框架层框架层为应用开发提供了C/C/JS等多语言的用户程序框架和Ability框架适用于JS语言的ArkUI框架以及各种软硬件服务对外开放的多语言框架API。根据系统的组件化裁剪程度设备支持的API也会有所不同。应用层应用层包括系统应用和第三方非系统应用。应用由一个或多个FAFeature Ability或PAParticle 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 -cgit 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-fast2.2 编译环境搭建每次都搞编译环境很麻烦有个个简单的方法就是使用**Docker**华为提供了Docker环境。Docker 是一个用于开发交付和运行应用程序的开放平台相当于直接拥有了别人配置好的一个环境。 Docker 使您能够将应用程序与基础架构分开从而可以快速交付软件。借助 Docker您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付测试和部署代码您可以大大减少编写代码和在生产环境中运行代码之间的延迟。Docker教程https://www.runoob.com/docker/docker-tutorial.htmlDocker工具安装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.02.3 编译运行进入Docker后就像你拥有了一台别人已经配置好的环境的电脑。执行如下命令进行配置hbset用上下箭头选择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