引言
本文为鸿蒙专栏《Hi3861网络编程实验第一篇。从这个专栏的名字不难看出,有三个关键词:鸿蒙(即鸿蒙操作系统);Hi3861(海思生产的处理器);网络编程。也就是说,这个专栏是基于鸿蒙操作系统和Hi这个处理器的3861。通过本专栏,大家可以掌握鸿蒙轻量级设备的开发流程;掌握基于鸿蒙操作系统的Hi网络编程方法3861。
本文内容围绕鸿蒙,Hi3861和网络编程三个关键词逐步展开。先介绍鸿蒙操作系统;然后介绍Hi3861处理器;接下来,介绍网络编程实验;最后,介绍如何构建实验环境。
一、鸿蒙操作系统
互联网上有很多关于鸿蒙操作系统的介绍。以下主要从发展过程、意义和技术结构三个方面简要介绍鸿蒙操作系统。
1.鸿蒙操作系统的发展历程
华为最早开发了鸿蒙操作系统。可查阅:https://www.harmonyos.com/cn/information/获取华为发布鸿蒙的信息。
(1)鸿蒙操作系统的起点是于2012年开始规划自主研发的操作系统。
(2)2012~2019年,华为逐步完成了从分布式操作系统内核到完整的分布式操作系统的研发。
(3)2019年8月9日,华为正式发布鸿蒙操作系统,HarmonyOS 1.0正式亮相,应用于华为智能屏产品。
(4)2020-9-10,华为发布HarmonyOS 2.除了智能屏幕,它还应用于华为的手表、手镯和汽车。
(5)2020-12-16,华为发布HarmonyOS 2.0 手机开发者Beta版本,并开始公测。
(6)2021-06,华为开始推动升级自己的手机、平板电脑等智能终端设备HarmonyOS 2.0。
(7)2021-10-22年-22HarmonyOS 3.0 开发者预览版。
(8)2022-7-6,华为发布HarmonyOS 3.0 Beta版本
2020年9月和2021年5月,鸿蒙诞生后,华为将分两次HarmonyOS所有基本能力代码都捐赠给开放原子开源基金会(https://www.openatom.org),这是鸿蒙操作系统发展过程中非常重要的事件。此后,鸿蒙操作系统进入了人拾柴火焰高的发展阶段。所谓“基础能力代码”,应该是HarmonyOS那部分代码与华为自己的产品和商业模式无关。原子开源基金会成立于2020年,是中国第一家开源基金会。
收到华为捐赠的代码后,开放原子开源基金会遵循 Apache 许可协议开源代码,创建开源项目,并将其命名为 OpenHarmony(开源鸿蒙)。下面是OpenHarmony部分发展过程可以查阅https://gitee.com/openharmony/docs/tree/master/zh-cn/release-notes获取更详细的信息。
(1)华为首次捐赠代码后,开放原子开源基金会发布了2020-09-10OpenHarmony 1.0版本支持内存128KB~128MB的终端设备。
(2)2021-04-01~2022-02-11,OpenHarmony 1.0版本已经迭代了5次,五个长期支持版依次推出:OpenHarmony 1.1.0 LTS、OpenHarmony 1.1.1 LTS、OpenHarmony 1.1.2 LTS、OpenHarmony 1.1.3 LTS、OpenHarmony 1.1.4 LTS。
(3)华为第二次捐赠代码后,开放原子开源基金会发布了2021-06-01OpenHarmony 2.0 Canary版本,版本介绍Linux内核增加了128个内存MB支持上述智能终端设备。
(4)2021-08-04,发布OpenHarmony 2.2 Beta2.增加分布式能力和媒体产品开发能力。
(5)2021-09-30,发布OpenHarmony 3.0 LTS。
(6)2022-03-30~2022-05-31,发布OpenHarmony 3.1 Release、OpenHarmony 3.1.1 Release。
如下图所示,鸿蒙诞生于华为,华为在华为手机、手表、智能屏幕等产品中使用的鸿蒙操作系统被称为HarmonyOS,我们也可以称之为华为鸿蒙。后来,华为将HarmonyOS一些代码捐赠给开放原子开源基金会,所以有Openharmony,也就是开源鸿蒙。
OpenHarmony开放原子开源基金会负责代码的运营和维护,每个人都可以免费使用OpenHarmony包括华为在内的代码也可以贡献自己的代码。我们可以认为HarmonyOS是OpenHarmony最早的商业发行版。
在商业发行版中,通常不开源,因为涉及到自己的产品和商业模式。但在华为DevEco Marketplace在这个网站上,可以找到一些开源鸿蒙发行版。这些开源发行版主要针对特定设备(如开发板)OpenHarmony切割全量代码。例如,由于硬件资源有限,设备无法运行OpenHarmony一些功能组件在发行版中被切断;或者在本设备的应用场景中根本不需要某个功能,相应的功能组件将在发行版中切断。当我们开发鸿蒙设备时,我们可以去这个网站找到是否有合适的发行版本。该网站还支持在这些发行版本的基础上添加或删除一些功能组件,并定制发行版本。当然,你也可以在这个网站上向别人提交你自己的发行版本。注意:从DevEco Marketplace在这个网站上下载资源需要注册华为账号。
随着鸿蒙技术的发展,基于鸿蒙技术的公司和组织越来越多OpenHarmony推出了自己的鸿蒙操作系统,如:
(1)美的发布是基于2021-10-17OpenHarmony智能家居系统-美的物联网操作系统1.这是第一个基于鸿蒙的智能家居操作系统。
(2)2021-10-27,Eclipse基金会推出OpenHarmony欧洲发行版Oniro OS。
(3)基于2021-11-9,科通技术宣布推出首款OpenHarmony开发的智能BMS电池管理系统。
(4)2021-12-28 ,基于润和软件发布OpenHarmony商业发行版HiHopeOS 1.0。
以上都属于开源鸿蒙发行版,无非是商业发行版和开源发行版。相信以后会有更多的开源鸿蒙发行版,鸿蒙生态会越来越好。
综上所述,到目前为止,鸿蒙操作系统的发展可以分为两个阶段:第一阶段是华为鸿蒙HarmonyOS第二阶段是开源鸿蒙OpenHarmony以及开源鸿蒙的诞生,OpenHarmony包括华为鸿蒙HarmonyOS在内的各种OpenHarmony发行版相互促进,共同发展。
2.鸿蒙操作系统的意义
如下图所示,在鸿蒙诞生之前,我们已经有了很多可用的操作系统。
首先是计算机(PC、服务器)上的操作系统包括:像Ubuntu、红帽等以Linux内核操作系统,家喻户晓Windows操作系统,苹果MacOS操作系统;然后,随着移动互联网的兴起,在移动终端(手机、平板电脑等手持设备)上出现了操作系统,发展到今天,基本上是谷歌的安卓和苹果IOS二分天下;此外,资源相对有限的嵌入式设备中还有许多实时操作系统,如:uC/OS、FreeRTOS、RT-Thread等等,这些操作系统大多是一些操作系统的核心,不是特别完整的操作系统。
纵观这些操作系统,不难发现一个特点:它们都是专门为某种设备开发的。例如,计算机操作系统只能用于计算机,而不能用于移动终端;移动终端上的操作系统不能用于计算机。但无论如何,有这么多的操作系统。华为为什么要从事鸿蒙操作系统?只是为了取代操作系统,解决卡脖子问题吗?
个人理解:不仅要解决卡脖子问题,还要解决现有操作系统无法解决的问题。
现有操作系统无法解决的问题是什么?物联网生态的碎片化。
现在,随着技术的发展和设备成本的下降,越来越多的设备可以接入网络,尤其是类型,不仅是以前的计算机、手机、平板电脑,如手表、耳机、音响、门锁、灯、空调、冰箱、洗衣机、电饭煲、电子秤可以接入网络,我们似乎已经进入了物联网时代。当然,这些设备的接入确实给我们的生活带来了很多便利,但也存在一个很大的问题:物联网生态的碎片化。如果不解决这个问题,用户体验很难进一步提升。
那么物联网生态碎片化的原因是什么呢?
就我个人而言,主要有两个方面:客观地说,物联网时代的终端设备种类繁多,形式不同,硬件资源或多或少,应用场景不同;主观上,每个设备制造商更多地考虑自己的商业利益,做自己的一套,做自己的政治。例如,如果一个用户在A制造商购买智能扬声器,他必须在手机上安装A制造商的智能扬声器APP;如果他在B厂家买了一个电饭锅,他会在手机上安装一个B厂家的电饭锅APP;如果他买了另一个电子秤,他可能不得不安装另一个电子秤APP。最终的结果是,用户几乎每次购买设备都必须安装一个APP。这种体验肯定不是很好,不同厂家的设备不能实现互联和资源共享,更不用说设备之间的合作和互助了,不能满足用户对设备智能化的要求。
用户想要什么样的体验?
就我个人而言,以智能家居为例,用户希望获得这样的体验:首先,通过一个app就可以操控不同厂商的不同设备其次,应该尽量少地让用户去通过操作app告诉某个设备要干什么,而更多的应该是让设备之间通过互联互通、信息共享和协作互助,按照用户之前已经做过的一些设置,或者是设备通过自己学习得到的用户习惯,主动地给用户提供一些服务。
所以,我认为鸿蒙操作系统的出现,不仅仅是要解决卡脖子的问题,更重要的是,它试图在操作系统这一层面解决物联网面临的碎片化问题。就像本文前言中所说,鸿蒙操作系统是一款面向全场景、全连接(万物互联)、全智能时代的分布式操作系统,它与安卓这些操作系统完全是不同时代的产物,是新一代操作系统——物联网操作系统。鸿蒙操作系统不仅能用在像电脑、手机这样资源丰富的设备上,也能用在像智能门锁、温湿度传感器这些资源非常有限的嵌入式设备上,通过鸿蒙操作系统可以把不同类型的终端设备统一管理起来,无论设备是哪个厂商生产的,只要大家用的都是鸿蒙操作系统,就能够实现自发现、自组网、信息共享和协作互助。
3、鸿蒙操作系统的技术架构
下面,从总体上简单介绍鸿蒙操作系统的构成,参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/OpenHarmony-Overview_zh.md。鸿蒙操作系统的技术架构如下图所示:
鸿蒙操作系统在整体上遵循了分层设计的原则,从下向上依次为:内核层、系统服务层、框架层和应用层。
内核层包括两个部分,分别是内核子系统和驱动子系统。
鸿蒙操作系统采用的是多内核设计,目前支持三种内核:linux内核、LiteOS内核,LiteOS内核又分为LiteOS-A和LiteOS-M两种。开发者可以根据设备的资源去选择一个合适的内核。内核抽象层的作用是屏蔽多内核之间的差异,向上层提供统一的接口。
驱动子系统的核心是一个硬件驱动框架,这个框架能够提供统一外设访问、驱动开发和驱动管理能力,是鸿蒙硬件生态开放的基础。
系统服务层集合了鸿蒙操作系统的核心功能,它通过框架层给应用程序提供服务。主要包括四个子系统集:系统基本能力子系统集、基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集。
框架层为应用开发提供了C/C++/JS等多语言的用户程序框架和Ability框架,适用于JS语言的ArkUI框架,以及各种软硬件服务对外开放的多语言框架API。根据系统的组件化裁剪程度,设备支持的API也会有所不同。
也可以把系统服务层和框架层合称为系统层。从横向来看,系统层是按照“系统(子系统集) > 子系统(Subsystem) > 组件/功能模块(Component)”逐级展开。也就是说,整个系统层是由若干个子系统集组成的,每个子系统集里又包含了若干个子系统,每个子系统又是由若干个组件/功能模块构成的。根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。
应用层里就是应用程序,主要包括:系统应用和第三方的非系统应用。比如:手机里面的设置、时钟、日历就属于系统应用,也就是系统自带的应用;百度地图就属于第三方的非系统应用。
鸿蒙操作系统上的应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成。其中,FA有UI界面,提供与用户交互的能力;而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。
前面提到,鸿蒙操作系统的功能是按照“系统(子系统集) > 子系统(Subsystem) > 组件/功能模块(Component)”逐级展开的,支持根据实际的需求和运行环境裁剪某些非必要的子系统或组件。为此,根据所采用的操作系统内核、所要求的设备最小内存,以及所适用的处理器,OpenHarmony定义了以下三种系统量级(系统类型):
- 轻量系统(mini system)
采用LiteOS-A内核;支持设备最小内存128KB;面向MCU类(如:Arm Cortex-M、RISC-V 32位)处理器。
- 小型系统(small system)
采用LiteOS-A内核或Linux内核;支持设备最小内存1MB;面向应用类(如:Arm Cortex-A)处理器。
- 标准系统(standard system)
采用Linux内核;支持设备最小内存128MB;面向应用类(如:Arm Cortex-A)处理器。
4、鸿蒙官网
华为鸿蒙HarmonyOS:https://www.harmonyos.com/
华为鸿蒙HarmonyOS设备开发:https://device.harmonyos.com
华为鸿蒙HarmonyOS应用开发:https://developer.harmonyos.com
开源鸿蒙OpenHarmony官网:https://www.openharmony.cn
开源鸿蒙OpenHarmony仓库:https://gitee.com/openharmony
在以上这些网站中,有学习鸿蒙操作系统最基本、最原始、最重要的资料,希望大家认真挖掘,我在之后的文章中也会根据具体的内容给出更具体的网址链接。
二、Hi3861处理器
Hi3861是海思(www.hisilicon.com)生产的带MCU的2.4GHz WiFi芯片,有两个型号: Hi3861V100、 Hi3861LV100。Hi3861LV100是Hi3861的低功耗版本。
Hi3861V100适用于家电、电工照明等常电类物联网智能产品、Hi3861LV100,适用于智能门锁、智能猫眼等低功耗物联网智能产品。
Hi3861V100主要集成了IEEE 802.11b/g/n基带和RF电路,以及一个高性能的RISC-V 32bit的MCU(最大工作频率160MHz); 有丰富的外设接口,包括:SPI、UART、I2C、PWM、GPIO、ADC、I2S接口、SDIO接口,芯片内置 352KB SRAM、2MB Flash和288KB ROM。
Hi3861V100是最早适配鸿蒙操作系统的三款处理器之一,支持鸿蒙轻量系统。
关于Hi3861更详细的内容,去阅读它的数据手册。
三、网络编程实验
这部分简单介绍本专栏要完成的实验。
介绍Wifiservice、Netif模块的API;WiFi模块的Station模式编程;WiFi模块的AP模式编程。
介绍UDP/TCP协议、调试工具、LwIP的Socket接口;基于Socket编程实现 UDP Client/Server;基于Socket编程实现 TCP Client/Server。
介绍MQTT协议、调试工具、Paho MQTT C/C++ client library;基于Paha MQTT的MQTT客户端编程。
JSON简介、C语言JSON解析器——cJSON;基于cJSON模块的JSON数据串的构建与解析。
阿里云物联网平台的使用以及平台侧的开发;Hi3861的MQTT客户端编程;移动端(手机)APP开发。最终实现Hi3861、云平台和手机三方互联。
四、搭建实验环境
本专栏中的实验采用的编程语言:C语言。
按照以下步骤搭建实验环境:
1、准备一台开发主机(可以是虚拟机),在开发主机上安装 Ubuntu 20.04 操作系统。
参考文章:
《在Win10中安装虚拟机:VMware Workstation Player+Ubuntu20.04》
《在Win10中安装虚拟机:VMware Workstation Pro16+Ubuntu20.04》
《在Ubuntu20.04中安装中文输入法》
2、搭建鸿蒙集成开发环境。
参考文章:
《搭建鸿蒙设备开发环境:Ubuntu20.04+DevEco Device Tool Release 3.0》
《用Visual Studio Code编辑鸿蒙源码时,为什么没有跳转选项?》
3、下载OpenHarmony源码,创建一个项目。
参考文章:
《获取OpenHarmony源码:从DevEco Marketplace获取(1)》
《获取OpenHarmony源码:从DevEco Marketplace获取(2)》
《鸿蒙设备开发之Hello World 》
PS:这个专栏也录制了相应的视频《鸿蒙系列课程:Hi3861网络编程实验》,想看视频的朋友可点击以下链接:
https://download.csdn.net/learn/36850/568611?spm=1003.2001.3001.4143
本文在CSDN、公众号、头条号和知乎同步发布,感谢关注。