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