当前位置: 首页 > backend >正文

OpenHarmony概述与使用

1. OpenHarmony Hi3861 

学习目标与任务

  • 硬件基础知识:涵盖嵌入式硬件体系架构(如 MCU 基础、硬件接口原理 )、硬件设计流程(原理图绘制、PCB Layout 规范 ),了解常见硬件外设(传感器、通信模块等)的工作逻辑与硬件适配要点。
  • 软件 + 硬件开发模式:学习嵌入式软件开发与硬件协同流程,包括硬件驱动开发(基于 Hi3861 芯片手册编写驱动代码 )、通过 SDK 实现软件对硬件资源(GPIO、定时器等)的调用,理解软硬件交互的信号流程与时序控制。
  • 软件到硬件开发逻辑:掌握从需求分析(功能定义)→ 软件架构设计(模块划分、任务调度 )→ 硬件驱动适配(寄存器操作、协议实现 )→ 联调测试(软硬件协同排障 )的完整链路,理解 “软件逻辑依赖硬件能力,硬件能力通过软件调用释放” 的核心逻辑。
  • 物联网 IOT 开发流程:基于 Hi3861 实践 “需求调研(场景定义 )→ 方案设计(硬件选型、通信协议确定 )→ 开发实现(硬件电路、软件程序 )→ 联调测试(功能、兼容性 )→ 部署上线(OTA 升级、远程管理 )” 全流程,重点学习物联网设备的组网(如 Wi-Fi 配网 )、数据上云(MQTT/CoAP 协议应用 )、边缘计算(轻量级数据处理 )等关键环节。

2. OpenHarmony 概述

基本定义与定位
  • HarmonyOS(鸿蒙系统 ):华为自主研发的商业闭源分布式操作系统,聚焦全场景智慧体验,通过 “硬件互助、资源共享”,实现手机、平板、智能穿戴、智慧屏等华为终端的无缝协同,为消费者与商业场景提供深度整合的操作系统能力。
  • OpenHarmony(开源鸿蒙 ):由开放原子开源基金会(OpenAtom Foundation )孵化、运营的开源分布式操作系统,面向全行业开放生态。以 “开源协同” 为核心,联合硬件厂商、开发者、行业伙伴,构建跨设备(IoT 终端、行业终端等 )的无缝协同体系,推动物联网时代的操作系统技术普惠与创新。
版本演进与关键特性
时间版本核心特性与支持设备
2020 年 9 月OpenHarmony 1.0聚焦 IoT 基础设备,支持 128KB - 128MB 内存 场景(如低功耗传感器、简易智能终端 ),奠定开源分布式框架雏形。
2021 年 6 月OpenHarmony 2.0全量开源 升级,扩展设备支持范围(覆盖更多行业终端、轻量级智能设备 ),强化分布式软总线能力,推动跨设备通信与协同开发生态初步构建。
2021 年 9 月OpenHarmony 3.0 LTS主打 “强分布式”,支持 标准系统设备(如智能座舱、工业平板 ),完善系统安全性(设备身份认证、数据加密 )与开发工具链,为行业应用开发提供更成熟的框架(ArkUI 界面开发、原子化服务基础能力 )。
2023 年OpenHarmony 4.0深化 AI 与分布式技术融合,强化端侧智能(设备本地 AI 推理、低功耗算力调度 ),优化分布式软总线的跨平台兼容性,推动 “设备协同智能化”(如多终端 AI 任务分工、协同推理 )。
2024 年OpenHarmony 5.1聚焦 AI 与机器人技术优化,加强对机器人操作系统(ROS )的适配,完善运动控制、环境感知等机器人专属能力,同时拓展 AI 在 IoT 场景的落地(如智能识别、自主决策 ),深化行业场景渗透。
OpenHarmony 与 HarmonyOS 体系对比
对比项OpenHarmony(开源鸿蒙)HarmonyOS(鸿蒙商业版)HarmonyOS NEXT(纯血鸿蒙)
性质开源项目,由开放原子基金会主导生态共建华为闭源商业系统,面向消费与商业市场华为闭源商业系统,聚焦 “纯血鸿蒙” 架构
技术底座微内核架构 + LiteOS/Linux 兼容(适配不同设备资源 )基于 OpenHarmony 开源基线 + AOSP(安卓兼容层 )基于 OpenHarmony 开源基线,剔除 AOSP,构建纯血微内核架构
应用生态生态分散,依赖厂商 / 开发者定制:
- 设备厂商需适配硬件、构建分发渠道;
- 应用需基于 OpenHarmony 开源 API 开发,适配多终端场景。
兼容安卓应用(通过 AOSP 层 )+ 鸿蒙原生应用,依托华为终端生态(手机、平板等 ),实现 “一次开发、多端部署”。仅支持 鸿蒙原生应用,强化系统纯净度与性能,聚焦高端旗舰设备的极致体验,推动生态向 “纯鸿蒙架构” 迁移。
典型设备IoT 终端(智能传感器、低功耗设备 )、行业终端(工业平板、智能座舱 )、边缘设备(轻量级网关 )等。华为手机、平板、智慧屏、智能穿戴等消费级终端,覆盖个人与家庭全场景。未来华为旗舰手机、高端平板等核心终端,聚焦极致性能、纯血架构体验,引领操作系统技术标杆。
补充说明
  • OpenHarmony 作为开源项目,是鸿蒙生态 “技术普惠” 的基础:通过开放代码、工具链,降低行业准入门槛,推动 IoT 设备、行业终端的智能化升级;
  • HarmonyOS 商业版则聚焦 “用户体验与商业价值”,依托华为终端生态,为消费者与企业客户提供深度整合的全场景服务;
  • HarmonyOS NEXT(纯血鸿蒙 )代表生态演进方向:剔除安卓代码依赖后,系统性能、安全性、协同效率将进一步突破,为高端设备与未来场景(如 AI 原生应用、元宇宙协同 )奠定技术底座。

3. OpenHarmony 开发环境

4. OpenHarmony 第一行代码

4.1 安装必要的开发软件

为开展 OpenHarmony(基于 Hi3861 等设备 )开发,需提前准备工具链,保障开发、调试、烧录全流程:

工具名称作用
CH340 USB 驱动实现 Windows 与 Hi3861 开发板的硬件连接,为串口通信、程序烧录提供基础
HiBurn.exe海思芯片专用烧录软件,将编译后的程序(如 .bin 文件 )烧录到开发板
UartAssist.exe串口调试工具,查看开发板运行日志、打印信息,辅助调试代码
VSCode SSH 远程链接通过 SSH 远程连接开发环境(如 Linux 服务器 ),在 VSCode 中编写、编译代码

4.2 项目结构规范

基础路径与目标

项目需在 OpenHarmony 代码仓库的指定路径创建:

/home/qf/Desktop/OpenHarmony/code-v3.0-LTS/OpenHarmony/applications/sample/wi-fi-iot/app  

在此路径下,按规则创建项目目录(如 demo01_thread ),并遵循目录命名要求

目录命名规则
  • 禁止:数字开头、中文 / 特殊符号(如 123_demo测试_dir 不合法 )
  • 要求:英文小写字母开头,可包含字母、数字、下划线(如 demo01_thread 合规 )
  • 唯一性:app 文件夹内项目名称必须唯一,避免编译冲突
项目结构示例(以 demo01_thread 为例 )

在 app 目录下创建 demo01_thread 后,完整结构(核心文件说明 ):

# 项目路径  
/home/qf/Desktop/OpenHarmony/code-v3.0-LTS/OpenHarmony/applications/sample/wi-fi-iot/app/  
└── BUILD.gn             # 在app目录下的,明确启动有哪些组件
|——demo01_thread/        # 项目目录(需符合命名规范)  ├── BUILD.gn         # 编译脚本:定义编译规则、依赖、输出产物  └── demo1.c          # 业务代码:编写功能逻辑(如线程创建、硬件控制 )  
关键文件作用
  • BUILD.gn:OpenHarmony 编译系统的配置文件,需声明:
    • 编译目标类型(如 static_library 静态库 )
    • 参与编译的源文件(如 demo1.c )
    • 头文件路径、依赖库等信息
    • 示例(简化版 ):
      static_library("demo01_thread") {  # 库名称需与目录名一致  sources = [ "demo1.c" ]       # 指定参与编译的代码文件  include_dirs = [              # 头文件搜索路径  "//utils/native/lite/include",  "//kernel/liteos_m/kal/cmsis"  ]  
      }  
      
  • demo1.c:存放具体业务代码(如线程创建、硬件初始化逻辑 ),是功能实现的核心文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 以下是需要导入的鸿蒙相关的头文件
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_timer.h"/*
【第二步,完成线程所需的任务函数】
当前函数满足 osThreadFunc_t typedef void (*osThreadFunc_t) (void *argument); 返回值类型为 void 类型,同时参数类型为 void * 类型。
*/
void thread_test(void *arg){int n = 10;while(n){/*osDelay OpenHarmony 提供的系统延时函数,单位是 10ms100 * 10ms ==> 1s*/osDelay(100);/*osThreadId_t osThreadGetId();返回当前真正运行的线程 ID 数据osThreadId_t ==> void **/printf("Thread is : %p,n = %d\n",osThreadGetId(),n);n -= 1;}
}/*
threadTestTask thread 测试任务当前函数要求无返回无参数,同时建议使用 static 修饰,有且只允许在当前文件中有效,可以调用。【threadTestTask】 用于注册线程任务到 OpenHarmony OS 中。*/
static void threadTestTask(void){/*【第一步,创建线程】*//*osThreadAttr_t OpenHarmony 提供的数据类型用于描述当前线程的相关属性重要内容1. 线程名称2. 线程占用栈区字节数3. 【线程优先级】【重点要求】  osThreadAttr_t 必须进行 memset 擦除*/osThreadAttr_t thread_attr;memset(&thread_attr,0,sizeof(osThreadAttr_t));thread_attr.name = "thread_test";thread_attr.stack_size = 1024;thread_attr.priority = osPriorityNormal;/*系统编程中的对应线程创建函数pthread_create(pthread_t &tid, attr, function, fun_arg);*//*osThreadId_t 当前 OpenHarmony 提供的数据类型,用于描述当前线程 ID真实类型为 void * 类型。【去指针化操作】typedef void *osThreadId_t;osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr);【osThreadFunc_t func】 线程任务函数 OpenHarmony 提供的数据类型typedef void (*osThreadFunc_t) (void *argument); 根据原码分析,当前任务函数要求参数为 void * 返回值为 void 【void *argument】 用于提供函数参数给当前线程任务函数【const osThreadAttr_t *attr】 用于初始化当前线程属性的结构体*/osThreadId_t thread_id = osThreadNew(thread_test,NULL,&thread_attr);if(NULL == thread_id){perror("[osThreadNew] create [thread_test] thread failed!\n");exit(1);}
}/*
【第三步,注册线程任务】
注册当前线程任务。
利用 OpenHarmony 提供的有参数宏,对当前任务线程函数 static void threadTestTask(void) 
进行系统注册,OpenHarmony APP 启动会将当前自定义组件/线程任务加入到程序中。#define APP_FEATURE_INIT(func) LAYER_INITCALL_DEF(func, app_feature, "app.feature")
*/
APP_FEATURE_INIT(threadTestTask);

项目组件 BUILD.gn 文件内容:(在app目录下的BUILD.gn)

import("//build/lite/config/component/lite_component.gni")lite_component("app") {features = ["demo01_thread",]
}

5. 编译操作

5.1 利用HiBurn 软件烧录程序到Hi3861中

        通过 hb 编译之后,对应的编译结果路径在 ~/Desktop/OpenHarmony/code-v3.0-
LTS/OpenHarmony/out/hispark_pegasus/wifiiot_hispark_pegasus ,在 Windows 中,需
要利用远程共享文件夹(知晓当前 Linux IP)方式,找到对应编译结果文件。

当前路径仅供参考:

\\192.168.25.129\qf\Desktop\OpenHarmony\code-v3.0-
LTS\OpenHarmony\out\hispark_pegasus\wifiiot_hispark_pegasus

选择编译生成的可执行文件:

烧录中:

打开串口调试助手:

https://github.com/0voice

http://www.xdnf.cn/news/17494.html

相关文章:

  • ttyd终端工具移植到OpenHarmony
  • 大模型工程问题
  • 用vscode 里docker显示不出有容器和镜像 ?
  • [Shell编程] Shell 编程之免交互
  • 华为watch5心率变异性测量法的底层逻辑
  • Docker部署MySQL完整指南:从入门到实践
  • MyBatis插件开发与扩展:从原理到实战的完整指南
  • 阿里发布数字人模型echomimic_v3,在视频合成的基础上支持prompt输入~
  • 机器学习 - Kaggle项目实践(1)Titanic
  • 人工智能-python-机器学习- 欠拟合与过拟合:岭回归与拉索回归的应用
  • 【安全发布】微软2025年07月漏洞通告
  • SharePlay确保最佳游戏体验
  • 基恩士 CA CNX10U 视觉连接器REPEATER CA CN or CV- C 日本原装进口
  • 数字IC后端层次化Hierarchical Flow子系统Sub-System模块 block partition和pin assignment细节盘点
  • istio如何采集method、url指标
  • 飞算JavaAI vs 传统开发:效率与质量的双重突破
  • conda一键配置python开发环境
  • CI/CD的持续集成和持续交付
  • 在 Rocky Linux 9.2 上使用 dnf 安装 Docker 全流程详解
  • PyCATIA深度解析:基于装配截面自动化创建参考几何平面群的专业方案
  • Redis一站式指南二:主从模式高效解决分布式系统“单点问题”
  • windows运维
  • opencv:图像轮廓检测与轮廓近似(附代码)
  • 部署一个免费开源的博客系统
  • Gin 框架错误处理机制详解
  • 【Tomcat】企业级web应用服务器
  • 如何培养自己工程化的能力(python项目)
  • (LeetCode 每日一题) 869. 重新排序得到 2 的幂 (哈希表+枚举)
  • 机器学习之K-means(K-均值)算法
  • Unity3D游戏中如何制作空气墙