0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS入门讲解和代码编译运行

yzcdx 来源:OS与AUTOSAR研究 作者:thatway 2022-11-15 09:40 次阅读

简介

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

1.1 抽象的艺术

b6e30f4c-6475-11ed-8abf-dac502259ad0.png

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

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

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

抽象的优点在于它让上层以较小的代价获得所需的功能,并同时可以提供一些保护。但抽象同时也是一种限制,会丧失一些应有的灵活性

比如,当你在考虑在项目中应该使用哪个函数库的时候,就常常需要这方面的权衡:过多的抽象和过少的抽象自然都是不合适的。理解应用的需求也很重要。

一个能合理满足应用需求的操作系统设计是操作系统设计者需要深入考虑的问题。这也是一种权衡,过多的服务功能和过少的服务功能自然都是不合适的。实际上,我们通过应用程序的特征需求来判断操作系统需要什么程度的抽象和功能。

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

b71c06f8-6475-11ed-8abf-dac502259ad0.png

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

1.2 万法归一

上面说了抽象出微内核,这还远远不够,不仅底层代码可以复用,野心更大一点上层代码也可以在不同产品上复用,真正的“一为万物,万物归一”,修成武林至高秘籍,站在软件的最高峰。主要由以下概括:

统一OS,弹性部署 一套操作系统,满足大大小小所有设备的需求,小到耳机,大到车机,智慧屏,手机等,让不同设备使用同一语言无缝沟通。

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

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

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

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

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

1.3 分层诞生了软总线

b78ad916-6475-11ed-8abf-dac502259ad0.png

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

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

b7af4134-6475-11ed-8abf-dac502259ad0.png

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

自动发现/即连即用

高带宽

低时延

高可靠

开放/标准

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

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

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

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

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

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

1.4 软件框架介绍

b7d63866-6475-11ed-8abf-dac502259ad0.png

上面放过这个图,解释鸿蒙的特性。下面具体看下: 内核层 内核子系统:采用多内核(Linux内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,KernelAbstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。

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

系统服务层

系统服务层是OpenHarmony的核心能力集合,通过框架层对应用程序提供服务。该层包含以下几个部分: 系统基本能力子系统集:为分布式应用在多设备上的运行、调度、迁移等操作提供了基础能力,由分布式软总线、分布式数据管理、分布式任务调度、公共基础库、多模输入、图形、安全、AI等子系统组成。

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

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

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

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

框架层

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

应用层

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

1.5 鸿蒙微内核LiteOS介绍

b80a4bba-6475-11ed-8abf-dac502259ad0.png

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

对于微内核,由于用MMU(内存管理单元)对进程空间(内存区域)做了隔离保护,没有授权的进程是无法访问其他进程的空间。这就阻止了恶意程序对其他进程数据的窃取。在微内核的管理下,因为MMU的封锁过于严格,用户进程要存储一个东西,必须请求内核,使用内核的IPC进行进程间的通信。

Linux是宏内核,大量数据处理是通过系统调用这个问题不突出,但是微内核的IPC实在是“伤不起”,就这样微内核一直被Linux这种宏内核吊打。学界想了很多办法,L4提出了一个Fast IPC的办法,只要你IPC通讯没数据,可以借用CPU核心寄存器的办法传递消息,速度大大加快。也有人想到了dIPC, directIPC

用标签内存的办法进行隔离,传递数据,无需通过内核空间。大大加快了通讯速度。但标签内存不符合现在计算机体系的架构,实践中,采用的可能性较小。

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

b836ff8e-6475-11ed-8abf-dac502259ad0.png

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

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

1.6 风口汽车上的鸿蒙应用

b896f358-6475-11ed-8abf-dac502259ad0.png

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

车机鸿蒙 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'
repo sync -j1 --fail-fast
2.2 编译环境搭建

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

Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。

通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
curl -fsSL https://get.docker.com
| bash -s docker --mirror Aliyun
docker pull
swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0

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

dockerrun-it-v$(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
b8d3a686-6475-11ed-8abf-dac502259ad0.png

2.3 编译运行

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

执行如下命令进行配置:
hb set
b8f9ce1a-6475-11ed-8abf-dac502259ad0.png

用上下箭头选择qemu_mini_system_demo并回车。 执行如下编译命令:
hb build -f
查看编译结果:

b921d068-6475-11ed-8abf-dac502259ad0.png

运行:

./qemu-run

b957797a-6475-11ed-8abf-dac502259ad0.png

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






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Liteos
    +关注

    关注

    10

    文章

    32

    浏览量

    47533
  • hdc
    hdc
    +关注

    关注

    1

    文章

    44

    浏览量

    3576
  • AIoT芯片
    +关注

    关注

    0

    文章

    31

    浏览量

    3823

原文标题:HarmonyOS入门-简介和代码编译

文章出处:【微信号:OS与AUTOSAR研究,微信公众号:OS与AUTOSAR研究】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    UART串口通信示例:开启通信宝藏之门的定位模组LuatOS入门

    今天我们要讲解的是UART串口通信示例,关于Air201资产定位模组LuatOS入门,我会从搭建环境、代码烧录、示例效果等来细说:
    的头像 发表于 11-03 19:55 764次阅读
    UART串口通信示例:开启通信宝藏之门的定位模组LuatOS<b class='flag-5'>入门</b>

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 315次阅读
    Keil<b class='flag-5'>编译</b>器优化方法

    java反编译能拿到源码吗

    在语法和风格上有所不同的代码,因为它们主要关注于恢复代码的逻辑结构,而不是精确复制原始代码的每个细节。 1. 反编译的基本原理 Java程序在编译
    的头像 发表于 09-02 11:03 691次阅读

    java反编译代码可以修改么

    Java反编译是一种将编译后的Java字节码(.class文件)转换回源代码的过程。反编译后的代码可以进行修改,但是需要注意,反
    的头像 发表于 09-02 11:00 493次阅读

    ida反编译出来代码能直接用吗

    IDA反编译出来的代码通常 不能直接使用 ,这主要基于以下几个方面的原因: 一、代码的不完整性 IDA反编译生成的代码可能缺少原始源
    的头像 发表于 09-02 10:55 498次阅读

    HarmonyOS NEXT Developer Beta1最新术语表

    A abc文件 方舟字节码(ArkCompiler Bytecode)文件,是ArkCompiler的编译工具链以源代码作为输入编译生成的产物,其文件后缀名为.abc。在发布态,abc文件会被打包到
    发表于 06-27 16:16

    为什么我的项目Debug运行没问题,编译成Release包就报错?

    ,导致此问题出现的可能原因及解决办法。 一、Debug与Release编译的基本差异 1. 编译配置 · 优化级别: Release模式通常启用更高级别的编译优化,包括代码内联、循环展
    的头像 发表于 06-12 11:18 800次阅读
    为什么我的项目Debug<b class='flag-5'>运行</b>没问题,<b class='flag-5'>编译</b>成Release包就报错?

    可以编译运行的工程代码中不存在.ioc文件有办法生产.ioc吗?

    可以编译运行的工程代码中不存在.ioc文件,有办法生产.ioc吗?
    发表于 03-26 08:00

    鸿蒙开发【编译构建】讲解

    编译构建是将应用/服务的源代码、资源、第三方库等,通过编译工具转换为可直接在硬件设备上运行的二进制机器码,然后再将二进制机器码封装为HAP/APP软件包,并为HAP/APP包进行签名的
    发表于 02-27 17:41

    【AWTK开源智能串口屏方案】MCU SDK使用与编译运行

    代码智能串口屏方案,本系列文章介绍如何从零开发HMI程序,包括搭建开发环境、创建HMI运行时工程、修改应用界面以及开发MCU程序。MCU端简介相对于HMI端(串口
    的头像 发表于 02-19 12:11 1122次阅读
    【AWTK开源智能串口屏方案】MCU SDK使用与<b class='flag-5'>编译</b><b class='flag-5'>运行</b>

    Zephyr RTOS简介及代码下载编译运行

    说起来RTOS,第一印象就是单片机程序、ARM M核、微控制器低频运行处理程序,甚至其不能算一个真正的OS。但是随着时代发展,这些单片机程序在有限的硬件机制下非常接近像Linux这种的巨无霸OS了
    的头像 发表于 01-10 09:12 5686次阅读
    Zephyr RTOS简介及<b class='flag-5'>代码</b>下载<b class='flag-5'>编译</b><b class='flag-5'>运行</b>

    python软件怎么运行代码

    Python是一种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需要一个Python解释器,它可以将您的代码翻译成计算机可以
    的头像 发表于 11-28 16:02 854次阅读

    编译器的优化选项

    这一点,需要了解编译器的能力和限制;第三,要了解硬件的运行方式,针对硬件特性进行优化。本文着重展开第二点和第三点。 简单认识编译器 要写出高性能的代码,首先需要对
    的头像 发表于 11-24 15:37 852次阅读
    <b class='flag-5'>编译</b>器的优化选项

    python代码写完后点哪个运行

    当你完成了编写Python代码后,你可以选择多种方式来运行它。下面是几种常见的运行代码的方式: Python解释器:Python是一种解释型语言,你可以直接使用Python解释器来
    的头像 发表于 11-24 09:28 5136次阅读

    python怎样运行代码

    讨论Python代码运行方式,包括解释器、交互式环境和命令行。 Python代码可以通过两种主要的方式运行:解释执行和编译执行。解释执行是
    的头像 发表于 11-22 10:31 1157次阅读