电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
鸿蒙-南向轻内核开发实战系列(一)基于小熊派鸿蒙季开发板环境搭建
分 享
扫描二维码分享
鸿蒙-南向轻内核开发实战系列(一)基于小熊派鸿蒙季开发板环境搭建
鸿蒙
小熊派
一口Linux
关注
发布时间: 2021-06-08
丨
阅读: 755
![ ](https://img-blog.csdnimg.cn/20210607210954711.png) ## 一、前言 前一段时间,我写过一篇关于LiteOS-A开发环境搭建的文章(实际上是将其作为独立的RTOS来开发的),今天正式讲一讲LiteOS作为鸿蒙内核子系统该如何开发。 对于HarmonyOS,开发工作大致可以分为南向开发(内核、驱动)和北向开发(App应用)。我们主讲南向开发。在目前的鸿蒙2.0版本下,南向轻内核开发的资料相对更加完善,主要是针对LiteOS内核。讲到这里,能完整编译到手机上运行的鸿蒙镜像,可能大家还要再等一等了(笔者也很期待)。 ## 二、概述 为了帮大家理清楚鸿蒙开发的套路,我们从头再梳理一遍相关的脉络。并为大家总结一些重点性的内容。在介绍OpenHarmony特性前,需要大家先明确以下两个基本概念: **子系统** OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开。子系统是一个逻辑概念,它具体由对应的组件构成。我们这一系列文章主讲的南向轻内核开发,就属于内核子系统的开发。 **组件** 对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。 ### 1. 整体介绍 OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。 > **重点一:开放原子开源基金会是由国家主导的。** ### 2. 技术架构 OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件。OpenHarmony技术架构如下所示: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210604194832358.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2NTU2Nzky,size_16,color_FFFFFF,t_70) > **重点二:可裁剪,灵活性高,适应碎片化复杂化的物联网场景。** #### 1) 内核层 内核子系统:采用多内核(Linux内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。 驱动子系统:驱动框架(HDF)是系统硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。 > **重点三:内核多样化,适配不同资源的硬件平台,HDF框架,提供统一的生态接口。** #### 系统服务层 系统服务层是OpenHarmony的核心能力集合,通过框架层对应用程序提供服务。该层包含以下几个部分: 系统基本能力子系统集:为分布式应用在多设备上的运行、调度、迁移等操作提供了基础能力,由分布式软总线、分布式数据管理、分布式任务调度、公共基础库、多模输入、图形、安全、AI等子系统组成。 基础软件服务子系统集:提供公共的、通用的软件服务,由事件通知、电话、多媒体、DFX(Design For X) 等子系统组成。 增强软件服务子系统集:提供针对不同设备的、差异化的能力增强型软件服务,由智慧屏专有业务、穿戴专有业务、IoT专有业务等子系统组成。 硬件服务子系统集:提供硬件服务,由位置服务、生物特征识别、穿戴专有硬件服务、IoT专有硬件服务等子系统组成。 根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。 > **重点四:深入细分到功能粒度级的可裁剪性。** #### 2) 框架层 框架层为应用开发提供了C/C++/JS等多语言的用户程序框架和Ability框架,适用于JS语言的JS UI框架,以及各种软硬件服务对外开放的多语言框架API。根据系统的组件化裁剪程度,设备支持的API也会有所不同。 > **重点五:多语言框架、Ability框架、UI框架的丰富框架。** #### 3) 应用层 应用层包括系统应用和第三方非系统应用。应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成。其中,FA有UI界面,提供与用户交互的能力;而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。基于FA/PA开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。 > **重点六:FA和PA对应用进行抽象和归类,以提供跨设备调度与分发的能力。** #### 4) 技术特性 总结起来,主要有以下特点: * 硬件互助,资源共享 * 一次开发,多端部署 * 统一OS,弹性部署 那么实现出来的效果,就和鸿蒙2.0发布会上面展现的差不多:更低的延时、终端更智能化且更加贴合自身的场景、每个设备的自身优势被无限放大、数据的可流转性。 ### 3. 系统特征 OpenHarmony支持如下几种系统类型: #### 1) 轻量系统(mini system) 面向MCU类处理器例如Arm Cortex-M、RISC-V 32位的设备,硬件资源极其有限,支持的设备最小内存为128KiB,可以提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。 #### 2) 小型系统(small system) 面向应用处理器例如Arm Cortex-A的设备,支持的设备最小内存为1MiB,可以提供更高的安全能力、标准的图形框架、视频编解码的多媒体能力。可支撑的产品如智能家居领域的IP Camera、电子猫眼、路由器以及智慧出行域的行车记录仪等。 #### 3) 标准系统(standard system) 面向应用处理器例如Arm Cortex-A的设备,支持的设备最小内存为128MiB,可以提供增强的交互能力、3D GPU以及硬件合成能力、更多控件以及动效更丰富的图形能力、完整的应用框架。可支撑的产品如高端的冰箱显示屏。 ### 小结 目前鸿蒙OS的代码仓库主要发布在gitee上的开放原子开源基金会中。其他平台的代码,是作为分发编译源码使用的,比如hpm仓库,下文我们将详细讲述。 你可以点击下面的链接,跳转到鸿蒙的代码仓库,阅读核心源代码。 [开放原子开源基金会Gitee仓库](https://gitee.com/openharmony) https://gitee.com/openharmony ## 三、搭建开发环境 对于LiteOS内核开发,官方给出了非常详细的教程,但是内容很多,且平台复杂,工具链较长。在这里我会为大家做一下梳理,然后提供每一种开发环境的官方教程链接,同时提供完整的编译链工具下载地址。在最后,我会采用小熊派·鸿蒙季开发板,搭建一个完整的开发环境,供大家参考。 ### 1. 源码获取 一共有三种方法,我简要列出来给大家看看。你可以通过下面的小结,跳转到官方给出的教程,进行详细阅读。 #### 1) 镜像站下载 从镜像站点下载归档后的发行版压缩文件。如果要获取旧版本的源码,也可通过此方式获取。 > [示例:LTS版本源码 -Hi3861(二进制 )](https://repo.huaweicloud.com/harmonyos/os/1.1.0/ipcamera_hi3518ev300-1.1.0.tar.gz) > https://repo.huaweicloud.com/harmonyos/os/1.1.0/ipcamera_hi3518ev300-1.1.0.tar.gz > [示例:编译工具链](https://repo.huaweicloud.com/harmonyos/os/2.0/tool_chain/) https://repo.huaweicloud.com/harmonyos/os/2.0/tool_chain/ #### 2) HPM包拉取 通过HPM包管理器获取。在HPM网站,查找满足需求的开源发行版,直接下载(或者定制后下载),再通过hpm-cli命令工具将所需的组件及工具链下载、安装到本地。 需要安装的工具有: |工具名称| 用途 | |--|--| |Node.js | 提供前置环境 | |hpm|获取源码的工具| 下文将采用小熊派开发板来具体演示HPM包管理器获取源码,这里暂且不表。 #### 3) 代码仓库克隆 从代码仓库获取。通过repo或git工具从代码仓库中下载。 首先注册码云gitee账号。再注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4181)。 https://gitee.com/help/articles/4181 安装git客户端和git-lfs并配置用户信息。 ``` git config --global user.name "yourname" git config --global user.email "your-email-address" git config --global credential.helper store ``` 安装码云repo工具,可以执行如下命令。 ``` curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo chmod a+x /usr/local/bin/repo pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests ``` #### 4)小结 关于获取鸿蒙源码,为了便于后续开发,选择一种适合自己的方法最好。 [三种获取源码的官方教程链接](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96.md) https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96.md ### 2. 工具链获取 官方提供了两个开发环境,两个开发工具。开发环境主要指:基于HPM的Docker环境和独立的Docker环境;开发工具主要指:设备开发工具(南向)和应用开发工具(北向)。 > 基于HPM的Docker环境:适用于使用HPM工具进行发行版编译的场景。 > 基于独立Docker环境:适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。 > 设备开发工具(HUAWEI DevEco Device Tool),支持linux 和windows [点击我跳转获取工具链的详细教程](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/%E8%8E%B7%E5%8F%96%E5%B7%A5%E5%85%B7.md#section2452141120244) https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/%E8%8E%B7%E5%8F%96%E5%B7%A5%E5%85%B7.md#section2452141120244 除了官方介绍的,也可以自行搭建开发环境,具体需要安装如下工具: **Linux部分:** > Ubuntu16.04及以上64位系统版本,Shell使用bash |开发工具 | 用途 | |--|--| |gcc_riscv32 |交叉编译工具 | | Python3.7+(64 bit) | 编译构建工具 | | SCons3.0.4+ | 编译构建工具 | |bash|命令处理器 | |build-essential| 编译依赖的基础软件包| |gn|产生ninja编译脚本 | |ninja|执行ninja编译脚本 | |Visual Studio Code(可选)| 代码编辑器 | 其中 gn 和ninja 由于在国外,比较难安装,可能需要翻墙。 **Windows部分** > 64位Windows工作台(主机电脑) |开发工具 | 用途 | |--|--| |Visual Studio Code(可选)| 代码编辑器 | | MobaXterm、PuTTY(可替换) | 提供SSH链接和串口连接 | | Hiburn |代码烧录工具 | | VMware(可选)|虚拟机 | 但是大家放心,我已经将所有的工具链都打包好了,可以直接下载,后台回复`鸿蒙OS`,即可获得完整的工具包,其中我提供的linux镜像包含完整的工具链,可以直接使用。 ## 四、Demo演示 ### 1. 部署Linux环境 1.解压百度云下载的HarmonyOSUbuntu18.4镜像OVF.zip文件到某个目录,建议不要放到在C盘。 ![ ](https://img-blog.csdnimg.cn/2021060422111571.png) 2.打开VMware Workstation工具 ![](https://img-blog.csdnimg.cn/20210604221433539.png) 3.选择第1步解压的Ubuntu18.4镜像OVF文件夹中,点击打开 ![](https://img-blog.csdnimg.cn/20210604221517525.png) 4.导入镜像到本地磁盘(选择一个磁盘空间大小≥ 10G的盘),点击导入。 ![](https://img-blog.csdnimg.cn/20210604221529107.png) 5.点击开启此虚拟机,来开启虚拟机电源 ![](https://img-blog.csdnimg.cn/20210604221554577.png) 6.此时虚拟机进入登录界面,点击HarmonyOS 7.输入密码:bearpi,然后点击登录 8.进入桌面后,点击桌面空白处右键,点击打开终端(E) 9.在终端中输入ifconfig,然后点击回车,除lo外,另外一个就是你的网卡信息,记录你获取到的IP地址。 ![](https://img-blog.csdnimg.cn/20210604221714324.png) 10.最小化VMware Workstation,回到Windows桌面上。 **注意:如果连不上网络(如果主机网络需要拨号,如校园网络、ADSL拨号等)在VMware Workstation中,点击虚拟机>> 设置** 然后在网络适配器中,改成NAT 模式,点击确定 ![](https://img-blog.csdnimg.cn/20210604221853921.png) 然后再回复步骤8。 ### 2. 部署windows环境 1.打开MobaXterm工具,并依次点击:Session,SSH 按钮。输入连接信息,远程地址,并点击OK ![](https://img-blog.csdnimg.cn/20210604222214309.png) 2.输入账号:bearpi,点击回车 ![](https://img-blog.csdnimg.cn/20210604222225400.png) 3.输入密码:bearpi,注意,输入密码的时候屏幕不会显示,输完之后点击回车 ![](https://img-blog.csdnimg.cn/20210604222232425.png) 4.在弹出的界面上,点击Yes保存账号信息,以免下次输入 ![](https://img-blog.csdnimg.cn/20210604222253578.png) ### 3. 映射linux文件到window 这里可以使用VMWare自带的虚拟磁盘映射服务,也可以使用RaiDrive。 1.安装RaiDrive软件,默认安装即可 2.添加链接信息 SFTP://______ (这个输入获取到的IP地址),账户:账号和密码皆为 bearpi,其他默认,点击确定 ![](https://img-blog.csdnimg.cn/20210604223405657.png) 查看本地映射的ubuntu文件路径 ![ ](https://img-blog.csdnimg.cn/20210604223452664.png) ### 4. 获取源码 1.切换到MobaXterm 2.在MobaXterm中输入以下内容,并回车: ``` cd /home/bearpi ``` 3.在MobaXterm中输入以下内容,并回车: ``` mkdir project && cd project ``` 4.在MobaXterm中输入以下内容,并回车: ``` hpm init -t default ``` 5.在MobaXterm中输入以下内容,并回车: ``` hpm i @bearpi/bearpi_hm_nano ``` 等待1-3分钟(根据不同网速),当屏幕中出现Installed.意味着代码获取完成如果卡死不动了,就ctrl+c 退出,重新输入一遍并回车。 ### 5. 编译代码 1.在MobaXterm中输入以下内容,并回车: ``` hpm dist ``` 等待直到屏幕出现:BUILD SUCCESS字样,说明编译成功。 ![](https://img-blog.csdnimg.cn/20210604224012411.png) 2.查看编译出的固件位置 当编译完后,在Windows中可以直接查看到最终编译的固件,具体路径在: ![](https://img-blog.csdnimg.cn/20210604224258573.png) ### 6. 连接开发板 1.通过TypeC数据线,把电脑与BearPi-HM Nano连接。 2.安装CH340驱动。 > 下载地址:http://www.wch.cn/search?q=ch340g&t=downloads 一般电脑自带CH340的驱动。 3.关闭虚拟机捕获USB功能。(有很多开发者都是因为虚拟机捕获了USB设备,导致本机Windows电脑看不到串口) ![ ](https://img-blog.csdnimg.cn/20210604224429851.png) 如果上面操作不行,直接关闭VMware Workstation,选择挂起,然后再重新插拔USB。 ### 7. 烧录程序 1.在Windows打开Hiburn工具,并点击Refresh,会检索出来COM号,如果你的电脑连接了多个串口,需要你在设备管理器中查看具体的串口号是哪一个。 ![ ](https://img-blog.csdnimg.cn/20210604224626688.png) 2.然后点击Setting,并选择 Com settings, 在Com settings中设置Baud为:921600,点击确定![](https://img-blog.csdnimg.cn/20210604224701185.png) 3.点击 Hiburn工具中的Select file按钮,在弹出的文件框中,选择对应的路径,并选中:Hi3861_wifiiot_app_allinone.bin 文件。 ![](https://img-blog.csdnimg.cn/20210604224741739.png) 4.勾选Auto burn复选框,然后点击Connect ![](https://img-blog.csdnimg.cn/20210604224756729.png) 此时Connect按钮变成Disconnect,等待下载,这一步要有耐心,不要着急。 5.复位开发板RESET按键,开始下载程序 直到出现Execution Successful字样,程序下载完成。 ![](https://img-blog.csdnimg.cn/20210604224911382.png) 下载完后,点击Disconnect按钮,便于后面调测使用。 ### 8. 查看串口打印日志 1.打开MobaXterm, 点击:Session、Serial按钮;设置Seral port为 Hiburn 同一个串口;设置Speed为 115200;点击OK。 ![](https://img-blog.csdnimg.cn/20210604225019557.png) 2.如果显示Unable to open...等字样,需要看一下Hiburn的链接状态是否为关闭。 3.复位开发板,此时COM打印出对应日志信息。 ![](https://img-blog.csdnimg.cn/20210604225048303.png) 4.开发板现象: ![](https://img-blog.csdnimg.cn/20210604225442985.jpg) ### 9. 分析代码 1.在windows下打开vscode ![](https://img-blog.csdnimg.cn/20210604230841455.png) 注意:看个人需要,再决定是否安装官方提供的HUAWEI DevEco Device Tool,因为这个插件比较大,VsCode启动以后,要花一定的时间加载它。所以这里我没有装,只是把vscode当作一个代码编辑器。 2.我们看内核启动后的第一个入口函数。 代码路径如下: ``` vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main.c ``` app_main函数,首先会打SDK的版本号,在完成外设的基本初始化,最后调用HOS_SystemInit函数进行鸿蒙系统的初始化。 ![](https://img-blog.csdnimg.cn/20210604232011510.png) 3.按下`F12`跳转到HOS_SystemInit函数,具体代码路径如下: ``` base\startup\services\bootstrap_lite\source\system_init.c ``` 同时,这个函数是一个虚函数,用户可以根据自己需要来初始化鸿蒙系统。如果用户不定义此函数,那么将运行系统默认的函数(即原函数),原函数具体代码和截图如下: ```C void HOS_SystemInit(void) { MODULE_INIT(bsp); // 初始化BSP板极支持包 MODULE_INIT(device); // 初始化系统设备 MODULE_INIT(core); // 初始化系统核心 SYS_INIT(service); // 初始化系统服务 SYS_INIT(feature); // 初始化系统特征段 MODULE_INIT(run); //调用所有 RUN段的代码 SAMGR_Bootstrap(); } ``` ![](https://img-blog.csdnimg.cn/2021060423251985.png) 这个函数,完成了系统的基本初始化,并指向我们业务逻辑代码。 ### 10. 小结 总的来说,构建这样一个环境,还是相对比较繁琐的。但是鸿蒙能够在短时间内做到这种程度,是非常值得我们肯定的。 再补充一些东西: 1.鸿蒙使用Ninja来组织代码进行编译,相比Makefile+Kconfig 的形式,要快很多,这也是Ninja诞生的意义。 2.南向开发,相比北向开发,更加碎片化,也更加复杂和繁琐。对比一下工具链就知道了,那么长.... 3.官方给出了比较详细的教程,但是方法太多,结构太散,需要自己仔细阅读和甄别。本文相当于帮大家梳理了一番,具体细节还得个人好好把握。 4.配置开发环境,是一项体力活,技术含量不大,但是特别磨人,不过迈出了这一步,接下来的就轻松啦! ![ ](https://img-blog.csdnimg.cn/20210607205051818.png) 文中环境,关注:一口Linux,后台回复:鸿蒙,既可以获取
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
一口Linux
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交