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

    浏览量

    47394
  • hdc
    hdc
    +关注

    关注

    1

    文章

    40

    浏览量

    3463
  • AIoT芯片
    +关注

    关注

    0

    文章

    31

    浏览量

    3758

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    python软件怎么运行代码

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

    python如何换行而不运行代码

    和可读性。 在Python中,可以使用两个主要的方法进行换行:使用反斜杠()和使用圆括号(())。 第一种方式是使用反斜杠()来表示换行。在Python中,反斜杠是一个转义字符,它可以用于将一行代码分成多行来书写。当编译器遇到反斜杠时,它
    的头像 发表于 11-24 09:50 1312次阅读

    python怎样运行代码

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

    如何在虚拟机上运行c源代码

    。安装和设置过程会有很多指导,按照指示完成设置。 安装C编译器 在虚拟机上运行C源代码,首先需要安装一个C编译器。通常使用的C编译器有GCC
    的头像 发表于 11-17 10:16 1557次阅读

    linux虚拟机怎么运行代码

    运行代码是Linux虚拟机中的常见操作,本文将详细介绍如何运行代码。 首先,要运行代码,你需要先
    的头像 发表于 11-17 10:12 2160次阅读

    互锁正反转电路运行原理讲解

    这是我们经常看到的互锁正反转电路,今天给大家讲解一下它的运行原理。
    的头像 发表于 11-08 17:35 890次阅读
    互锁正反转电路<b class='flag-5'>运行</b>原理<b class='flag-5'>讲解</b>

    讲解MATLAB/Simulink HDL使用入门

    我们将使用实例讲解MATLAB / Simulink HDL 使用入门
    的头像 发表于 11-06 09:12 613次阅读
    <b class='flag-5'>讲解</b>MATLAB/Simulink HDL使用<b class='flag-5'>入门</b>

    C语言的编译链接过程

      C语言的编译链接过程要把我们编写的一个C程序源代码转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。
    的头像 发表于 08-21 10:06 1612次阅读
    C语言的<b class='flag-5'>编译</b>链接过程

    HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

    更复杂应用开发。首先HarmonyOS支持大型应用模块化开发,并且支持通过轻量化应用组件,减少运行资源占用。同时,通过ArkUI跨平台框架的能力,可以实现一次开发, 多平台运行,高度复用代码
    发表于 08-14 15:08

    C语言的编译过程

    C语言的编译链接过程要把我们编写的一个C程序源代码,转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。过程图解如下。
    发表于 06-25 10:36 285次阅读
    C语言的<b class='flag-5'>编译</b>过程

    Linux内核的编译运行

    想让Linux内核代码跑起来,得先搭建编译运行代码的环境。
    发表于 06-23 11:56 353次阅读
    Linux内核的<b class='flag-5'>编译</b>和<b class='flag-5'>运行</b>

    HarmonyOS元服务端云一体化开发快速入门(上)

    大小不能超过10MB。 三、配置工程信息 1.在工程配置界面,配置工程的基本信息。 点击“Next”,开始关联云开发资源。 *附件:HarmonyOS元服务端云一体化开发快速入门(上).docx
    发表于 06-14 17:10

    CA850 Ver.3.20 C编译运行

    CA850 Ver.3.20 C编译运行
    发表于 05-04 19:03 0次下载
    CA850 Ver.3.20 C<b class='flag-5'>编译</b>器<b class='flag-5'>运行</b>包

    CC78K0R Ver.2.00 C编译运行

    CC78K0R Ver.2.00 C编译运行
    发表于 04-28 19:11 0次下载
    CC78K0R Ver.2.00 C<b class='flag-5'>编译</b>器<b class='flag-5'>运行</b>