> 文档中心 > 专栏推介:《Hi3861网络编程实验》

专栏推介:《Hi3861网络编程实验》


引言

本文是鸿蒙专栏《Hi3861网络编程实验》中的第一篇。从这个专栏的名称不难看出,这里面有三个关键词:鸿蒙(即:鸿蒙操作系统);Hi3861(海思生产的一款处理器);网络编程。也就是说,这个专栏就是带着大家做一些网络编程实验,实验代码是基于鸿蒙操作系统和Hi3861这款处理器的。通过本专栏,大家可以掌握鸿蒙轻量级设备的开发流程;掌握基于鸿蒙操作系统的Hi3861网络编程方法。

本文的内容围绕鸿蒙、Hi3861和网络编程这三个关键词逐次展开。首先,介绍鸿蒙操作系统;然后,介绍Hi3861处理器;接下来,介绍要做哪些网络编程实验;最后,介绍如何搭建实验环境。

一、鸿蒙操作系统

网上已经有很多关于鸿蒙操作系统的介绍了。下面主要从发展历程、意义和技术架构这三个方面简单介绍一下鸿蒙操作系统。

1、鸿蒙操作系统的发展历程

鸿蒙操作系统最早是由华为自主研发出来的。可查阅:https://www.harmonyos.com/cn/information/获取华为发布鸿蒙的信息。

(1)2012年,开始规划自研操作系统,这是鸿蒙操作系统的起点。

(2)2012~2019年,华为逐步完成了从分布式操作系统内核到完整的分布式操作系统的研发。

(3)2019-8-09,华为正式发布鸿蒙操作系统,HarmonyOS 1.0正式亮相,并在华为智慧屏产品中得到应用。

(4)2020-9-10,华为发布HarmonyOS 2.0,除了智慧屏之外,在华为的手表、手环、车机中也得到了应用。

(5)2020-12-16,华为发布HarmonyOS 2.0 手机开发者Beta版本,并开始公测。

(6)2021-06,华为开始陆续向自家的手机、平板等智能终端设备推送升级HarmonyOS 2.0。

(7)2021-10-22,华为发布HarmonyOS 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-10,在华为第一次捐赠代码之后,开放原子开源基金会发布了OpenHarmony 1.0版本,该版本支持内存为128KB~128MB的终端设备。

(2)2021-04-01~2022-02-11,OpenHarmony 1.0版本共进行了5次迭代,依次推出了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-01,在华为第二次捐赠代码之后,开放原子开源基金会发布了OpenHarmony 2.0 Canary版本,该版本引入了Linux内核,增加了对内存为128MB以上的智能终端设备的支持。

(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-17,美的发布了基于OpenHarmony的智能家居系统——美的物联网操作系统1.0,这是第一个基于鸿蒙的智能家居操作系统。

(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。鸿蒙操作系统的技术架构如下图所示:

在这里插入图片描述

鸿蒙操作系统在整体上遵循了分层设计的原则,从下向上依次为:内核层、系统服务层、框架层和应用层。

(1)内核层

内核层包括两个部分,分别是内核子系统和驱动子系统。

鸿蒙操作系统采用的是多内核设计,目前支持三种内核:linux内核、LiteOS内核,LiteOS内核又分为LiteOS-A和LiteOS-M两种。开发者可以根据设备的资源去选择一个合适的内核。内核抽象层的作用是屏蔽多内核之间的差异,向上层提供统一的接口。

驱动子系统的核心是一个硬件驱动框架,这个框架能够提供统一外设访问、驱动开发和驱动管理能力,是鸿蒙硬件生态开放的基础。

(2)系统服务层

系统服务层集合了鸿蒙操作系统的核心功能,它通过框架层给应用程序提供服务。主要包括四个子系统集:系统基本能力子系统集、基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集。

(3)框架层

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

也可以把系统服务层和框架层合称为系统层。从横向来看,系统层是按照“系统(子系统集) > 子系统(Subsystem) > 组件/功能模块(Component)”逐级展开。也就是说,整个系统层是由若干个子系统集组成的,每个子系统集里又包含了若干个子系统,每个子系统又是由若干个组件/功能模块构成的。根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。

(4)应用层

应用层里就是应用程序,主要包括:系统应用和第三方的非系统应用。比如:手机里面的设置、时钟、日历就属于系统应用,也就是系统自带的应用;百度地图就属于第三方的非系统应用。

鸿蒙操作系统上的应用由一个或多个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更详细的内容,去阅读它的数据手册。

三、网络编程实验

这部分简单介绍本专栏要完成的实验。

1、WiFi实验

介绍Wifiservice、Netif模块的API;WiFi模块的Station模式编程;WiFi模块的AP模式编程。

2、UDP/TCP实验

介绍UDP/TCP协议、调试工具、LwIP的Socket接口;基于Socket编程实现 UDP Client/Server;基于Socket编程实现 TCP Client/Server。

3、MQTT实验

介绍MQTT协议、调试工具、Paho MQTT C/C++ client library;基于Paha MQTT的MQTT客户端编程。

4、cJSON实验

JSON简介、C语言JSON解析器——cJSON;基于cJSON模块的JSON数据串的构建与解析。

5、物联网云平台实验

阿里云物联网平台的使用以及平台侧的开发;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、公众号、头条号和知乎同步发布,感谢关注。