此系列主要是记录笔者关于OpenHarmony(基于Hi3861)的学习笔记,此篇主要对鸿蒙做一个简介,并重点介绍开发环境的搭建,前面一节是对鸿蒙的一个简介,感兴趣可以看看,不感兴趣可以直接跳去第二节的环境搭建。
总有 人 说鸿蒙就是套壳安卓,是华为的商业炒作。不知道是为了流量和挣米而说还是真的不了解操作系统这个概念。不过有一点可以确定,能说出类似言论的都不是开发人员。
鸿蒙和安卓作为两个操作系统,都有linux的内核,Linux又是由Unix简化而来;而苹果生态的IOS和MacOS则是直接在Unix的基础上开发而的。
有关这几者的关系可以参照此文浅谈 UNIX、Linux、IOS、Android、鸿蒙之间的关系。
Linux系统本身也拥有多个分支,如下图所示,在OpenHarmony的学习中我们就需要借用这之中的Ubuntu系统进行编译代码。
这里可能会有小伙伴要问,你这分支图也没有安卓啊,关于这个问题,这么说吧,Linux系统包含Android系统,Android系统不是Linux系统,Android是在Linux内核基础上开发出来的系统。
我们日常生活中接触到最多的操作系统大多是Window、 Android、IOS、MACOS等,而程序开发,无论是北向还是南向的开发人员都会高频使用到另外的一个操作系统——Linux操作系统,开发者有一些项目是需要在Linux环境下下进行编译的。生活中使用的电脑、手机、智能手表等等这些物品都是由硬件和软件组成的,操作系统就是为了很好的调度这些资源,实现软件硬件资源的管理。
做北向开发的开发者开发了一个远程物联网大棚的客户端,用来监控农场大棚的温度湿度,那么远在大棚的温湿度是怎么获取到手机APP上的呢?
北向开发者在整个过程中需要调用一个温湿度的api接口,来获取到想要的参数,可事实上只需要这一个api函数就可以得到温湿度了吗?
显然不是,只凭借几行代码是不可能悬空获取温湿度这样一个实实在在的物理量。获取物理量都需要有对应的传感器来实现,而北向开发者在开发过程中是没有去对传感器部分进行操作的,所以整个项目开发过程还需要另外一伙人——南向开发者。
南向开发者需要根据需求找一款处理器以及适配的传感器,然后绘制pcb板进行硬件链接,然后编程验证,直到实现温湿度采集功能,并且还需要根据北向开发者定义的api来编写接口。
整个系统不会只有温湿度读取这样一个功能,客户端可能会有很多个功能;这就需要北向开发者和南向开发者针对需求配置自己的软件和硬件资源,众多的资源不可能同时运行和调用,于是这个时候就需要有一个操作系统来实现任务的调度,实现这些软件资源与硬件资源的合理支配。
而OpenHarmony作为一个跨平台的操作系统可以实现万物互联,能够合理地调用更多工具的跟多软硬件资源,用来实现更多功能,而他之所以可以实现万物互联其中一个原因就是它使用了分布式软总线,对于这个分布式软总线笔者的理解是类似硬件总线中的CAN、485、SPI、IIC、UART这些,有着自己需要的引脚和功能定义,只不过其采用的不再是硬件连接,而是使用无线的方式来实现,这样只要应用平台能够使用无线传输(Wifi或者蓝牙)就可以接入总线从而进行控制。
一个完整操作系统系统=内核+功能组件;鸿蒙是一个使用了Linux内核的操作系统,但是他不像安卓只有Linux内核,他还有自己的特色。可以说它们是兄弟或者姐妹的关系。
以下是关于二者的一些对比:
安卓(Android):是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。
鸿蒙(HarmonyOS):是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体娱乐等)业务能力。
安卓(Android):基于linux的宏内核设计 ,宏内核包含了操作系统绝大多数的功能和模块,而且这些功能和模块都具有最高的权限,只要一个模块出错,整个系统就会崩溃,这也是安卓系统容易崩溃的原因。系统开发难度低。
鸿蒙(HarmonyOS):基于微内核设计,微内核仅包括了操作系统必要的功能模块(任务管理、内存分配等)处在核心地位具有最高权限,其他模块不具有最高权限,也就是说其他模块出现问题,对于整个系统的运行是没有阻碍的。微内核稳定性很高。鸿蒙系统包含了两个内核:Linux内核、LiteOS内核(鸿蒙os内核Liteos起源于2012年、华为2012实验室)
内核子系统:HarmonyOS采用多内核设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。
驱动子系统:硬件驱动框架(HDF)是HarmonyOS硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。
安卓(Android):
鸿蒙(HarmonyOS):
对比来自此文。所以鸿蒙不是套克安卓,它们不一样,至于为什么他兼容安卓,是因为他有KAL的内核抽象层,用来把不同内核的接口抽象成一种通用接口,以此来调用不同的内核实现同一功能。再说鸿蒙套壳安卓就跟说你是套壳的你哥一样。
想要进一步了解鸿蒙的构架的可以参考此文。
笔者使用的Hi3861来实现OpenHarmony的南向开发。
南向开发的源码的管理和编译是在linux环境下进行的;
而源码的编辑与烧录是在windows环境下进行的。
这点与单片机和普通上位机开发中使用的IDE有很大区别,IDE是集成开发环境,可以在一个应用上完成代码编辑、编译、调试等,而OpenHarmony目前还没有集成开发环境,代码编辑和编译需要跨平台操作。所以既继续要在windows上进行环境配置又需要对Linux环境进行配置,这里借助VMware来安装Ubuntu搭建Linux的开发环境。
有关虚拟机的安装有很多优秀的教程笔者在此不做赘述,可以参考此博文——VMware虚拟机快速安装Ubuntu教程
笔者参考此博文安装的是Ubuntu 20.04.4 LTS没有什么bug。
emmmm,环境配置,对于初学者来说真的不怎么友好,笔者困扰了一天bug,首先是跟着B站传智教育的搭建, 有关的详细步骤参考此链接。 这中间没什么bug,中间的指令提示不对的话根据命令框返回的建议去输入即可。
唯一一个麻烦一点的bug就是hb-h返回如下报错:
der@der-virtual-machine:~/OpenHarmony/project$ hb -h
Traceback (most recent call last):
File "/home/der/.local/bin/hb", line 8, in <module>
sys.exit(main())
File "/home/der/.local/lib/python3.8/site-packages/hb/__main__.py", line 49, in main
topdir = find_top()
File "/home/der/.local/lib/python3.8/site-packages/hb/__main__.py", line 37, in find_top
raise Exception("Please call hb utilities inside source root directory")
Exception: Please call hb utilities inside source root directory
der@der-virtual-machine:~/OpenHarmony/project$
这个问题华为开发者平台解答有解决方案,原因是版本不对应,需要卸载重装,这里有几个点笔者在此提示一下:
首先需要cd到源码根目录
pip3 uninstall ohos-build
pip3 install build/lite
这里的源码是指genkipi的源码,根目录就是genkipi的目录如下图所示:目录里面是genkipi的源码。
在此处右击打开终端输入命令即可完美解决“hb -h”的问题。
源码的获取方法
这里有两种方案:
方法一:直接先跳过“hb- h”的问题去跟着教程继续往下操作,直到获取源码后找到上图所示目录执行两条指令即可。这种方式是可以解决的,而且git下载这个地方也没有什么问题,跟着视频搭建即可。
方法二:此法为笔者自己总结,这里直接去此链接下载genkipi的源码——传送门
提取码:jmgu
下载到自己的电脑桌面或者任何一个位置都可以,自己能够找到就行。
然后打开虚拟机,在主目录下新建一个workspace的文件夹,如下图所示:
然后把刚刚下载的genkipi压缩包拖到workspace的文件夹下,等待传输完成。
然后右键这个提取这个压缩包到此处,提取完毕后就可以看见目录下多了一个名为“genkipi”的文件夹。
进入这个文件夹可以看这些文件,然后在这个目录下参考上面的步骤右键打开终端命令,在终端命令窗口输入指令重新安装hb。
然后执行如下命令:
pip3 install build/lite
hb -h
成功返回出版本信息,到这里传智元气派的Linux开发环境就搭建好了。
注意事项:
1.按照第二种方式安装hb后,教程中的获取源码那部分可以直接跳过(也就仅仅只有获取源码不用看,其他还是得照做),不用看,直接跟着下一节编译即可。
2.需要注意的是源码必须是genkipi的源码,使用其他的源码会报错。
笔者刚开始就是用的小熊派的bearpi源码,按照这个方法处理后又出现了新问题,如下所示:
3.目录一定要保持和下图一致,不然在后面编译源码的时候会出问题。
后来笔者重新尝试了用小熊派的方式安装开发环境,社区为了方便初学者,提供了装好环境的Ubuntu,亲测好用,不想被折磨的同学直接上手。
传送门——BearPi-HM Nano 十分钟上手教程跟着配套视频,十分钟就可以搭好环境,执行编译指令“ hpm dist ”后显示编译成功
当然想尝试自己配置的同学也可以参考社区的搭建视频进行操作,笔者的Ubuntu 20.04.4 LTS是可以完全搭建成功的,亲测有效。
传送门。
这个就没啥难度了,跟着双方的的视频都可以一步到位。
元气派Linux源码编译成功效果类似下图:
使用VS Code远程访问编译成功如下图示,有关远程访问的笔者下一篇会详细介绍。
然后是下载烧录,查看串口打印"Hello world!"这些视频介绍都有,在此不再介绍。
关于开发环境的搭建就介绍到这,中间遇到了很多的bug但好在成功了,此系列主要是接着立创EDA的传智鸿蒙训练营进行记录,在此感谢立创和博学谷提供的机遇。上述有不妥之处欢迎大佬指出。
OpenHarmony学习笔记——南向开发环境搭建
OpenHarmony学习笔记——编辑器访问Linux服务器进行编译
OpenHarmony学习笔记——点亮你的LED
OpenHarmony学习笔记——多线程的创建
OpenHarmony学习笔记——I2C驱动0.96OLED屏幕
OpenHarmony学习笔记——Hi3861使用DHT11获取温湿度
OpenHarmony学习笔记——Hi3861接入OneNET
手把手教你OneNET数据可视化
OpenHarmony学习笔记——Hi386+ASR-01的语音识别助手