鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

一、前言

前一段時間,我寫過一篇關於LiteOS-A開發環境搭建的文章(實際上是將其作為獨立的RTOS來開發的),今天正式講一講LiteOS作為鴻蒙核心子系統該如何開發。

對於HarmonyOS,開發工作大致可以分為南向開發(核心、驅動)和北向開發(App應用)。我們主講南向開發。在目前的鴻蒙2。0版本下,南向輕核心開發的資料相對更加完善,主要是針對LiteOS核心。講到這裡,能完整編譯到手機上執行的鴻蒙映象,可能大家還要再等一等了(筆者也很期待)。

二、概述

為了幫大家理清楚鴻蒙開發的套路,我們從頭再梳理一遍相關的脈絡。併為大家總結一些重點性的內容。在介紹OpenHarmony特性前,需要大家先明確以下兩個基本概念:

子系統

OpenHarmony整體遵從分層設計,從下向上依次為:核心層、系統服務層、框架層和應用層。系統功能按照“系統 > 子系統 > 元件”逐級展開。子系統是一個邏輯概念,它具體由對應的元件構成。我們這一系列文章主講的南向輕核心開發,就屬於核心子系統的開發。

元件

對子系統的進一步拆分,可複用的軟體單元,它包含原始碼、配置檔案、資原始檔和編譯指令碼;能獨立構建,以二進位制方式整合,具備獨立驗證能力的二進位制單元。

1。 整體介紹

OpenHarmony是由開放原子開源基金會(OpenAtom Foundation)孵化及運營的開源專案,目標是面向全場景、全連線、全智慧時代,基於開源的方式,搭建一個智慧終端裝置作業系統的框架和平臺,促進萬物互聯產業的繁榮發展。

重點一:開放原子開源基金會是由國家主導的。

2。 技術架構

OpenHarmony整體遵從分層設計,從下向上依次為:核心層、系統服務層、框架層和應用層。系統功能按照“系統 > 子系統 > 元件”逐級展開,在多裝置部署場景下,支援根據實際需求裁剪某些非必要的元件。OpenHarmony技術架構如下所示:

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

在這裡插入圖片描述

重點二:可裁剪,靈活性高,適應碎片化複雜化的物聯網場景。

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

三、搭建開發環境

對於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/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

安裝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/repochmod a+x /usr/local/bin/repopip3 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

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

除了官方介紹的,也可以自行搭建開發環境,具體需要安裝如下工具:

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盤。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

2。開啟VMware Workstation工具

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

3。選擇第1步解壓的Ubuntu18。4映象OVF資料夾中,點選開啟

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

4。匯入映象到本地磁碟(選擇一個磁碟空間大小≥ 10G的盤),點選匯入。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

5。點選開啟此虛擬機器,來開啟虛擬機器電源

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

6。此時虛擬機器進入登入介面,點選HarmonyOS

7。輸入密碼:bearpi,然後點選登入

8。進入桌面後,點選桌面空白處右鍵,點選開啟終端(E)

9。在終端中輸入ifconfig,然後點選回車,除lo外,另外一個就是你的網絡卡資訊,記錄你獲取到的IP地址。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

10。最小化VMware Workstation,回到Windows桌面上。

注意:如果連不上網路(如果主機網路需要撥號,如校園網路、ADSL撥號等)在VMware Workstation中,點選虛擬機器>> 設定

然後在網路介面卡中,改成NAT 模式,點選確定

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

然後再回復步驟8。

2。 部署windows環境

1。開啟MobaXterm工具,並依次點選:Session,SSH 按鈕。輸入連線資訊,遠端地址,並點選OK

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

2。輸入賬號:bearpi,點選回車

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

3。輸入密碼:bearpi,注意,輸入密碼的時候螢幕不會顯示,輸完之後點選回車

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

4。在彈出的介面上,點選Yes儲存賬號資訊,以免下次輸入

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

3。 對映linux檔案到window

這裡可以使用VMWare自帶的虛擬磁碟對映服務,也可以使用RaiDrive。

1。安裝RaiDrive軟體,預設安裝即可

2。新增連結資訊

SFTP://______ (這個輸入獲取到的IP地址),賬戶:賬號和密碼皆為 bearpi,其他預設,點選確定

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

檢視本地對映的ubuntu檔案路徑

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

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字樣,說明編譯成功。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

2。檢視編譯出的韌體位置

當編譯完後,在Windows中可以直接檢視到最終編譯的韌體,具體路徑在:

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

6。 連線開發板

1。透過TypeC資料線,把電腦與BearPi-HM Nano連線。

2。安裝CH340驅動。

下載地址:http://www。wch。cn/search?q=ch340g&t=downloads

一般電腦自帶CH340的驅動。

3。關閉虛擬機器捕獲USB功能。(有很多開發者都是因為虛擬機器捕獲了USB裝置,導致本機Windows電腦看不到串列埠)

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

如果上面操作不行,直接關閉VMware Workstation,選擇掛起,然後再重新插拔USB。

7。 燒錄程式

1。在Windows開啟Hiburn工具,並點選Refresh,會檢索出來COM號,如果你的電腦連線了多個串列埠,需要你在裝置管理器中檢視具體的串列埠號是哪一個。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

2。然後點選Setting,並選擇 Com settings,

在Com settings中設定Baud為:921600,點選確定

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

3。點選 Hiburn工具中的Select file按鈕,在彈出的檔案框中,選擇對應的路徑,並選中:Hi3861_wifiiot_app_allinone。bin 檔案。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

4。勾選Auto burn複選框,然後點選Connect

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

此時Connect按鈕變成Disconnect,等待下載,這一步要有耐心,不要著急。

5。復位開發板RESET按鍵,開始下載程式

直到出現Execution Successful字樣,程式下載完成。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

下載完後,點選Disconnect按鈕,便於後面調測使用。

8。 檢視串列埠列印日誌

1。開啟MobaXterm,

點選:Session、Serial按鈕;設定Seral port為 Hiburn 同一個串列埠;設定Speed為 115200;點選OK。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

2。如果顯示Unable to open。。。等字樣,需要看一下Hiburn的連結狀態是否為關閉。

3。復位開發板,此時COM打印出對應日誌資訊。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

4。開發板現象:

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

9。 分析程式碼

1。在windows下開啟vscode

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

注意:看個人需要,再決定是否安裝官方提供的HUAWEI DevEco Device Tool,因為這個外掛比較大,VsCode啟動以後,要花一定的時間載入它。所以這裡我沒有裝,只是把vscode當作一個程式碼編輯器。

2。我們看核心啟動後的第一個入口函式。

程式碼路徑如下:

vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main。c

app_main函式,首先會打SDK的版本號,在完成外設的基本初始化,最後呼叫HOS_SystemInit函式進行鴻蒙系統的初始化。

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

3。按下

F12

跳轉到HOS_SystemInit函式,具體程式碼路徑如下:

base\startup\services\bootstrap_lite\source\system_init。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();}

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

這個函式,完成了系統的基本初始化,並指向我們業務邏輯程式碼。

10。 小結

總的來說,構建這樣一個環境,還是相對比較繁瑣的。但是鴻蒙能夠在短時間內做到這種程度,是非常值得我們肯定的。

再補充一些東西:

1。鴻蒙使用Ninja來組織程式碼進行編譯,相比Makefile+Kconfig 的形式,要快很多,這也是Ninja誕生的意義。

2。南向開發,相比北向開發,更加碎片化,也更加複雜和繁瑣。對比一下工具鏈就知道了,那麼長。。。。

3。官方給出了比較詳細的教程,但是方法太多,結構太散,需要自己仔細閱讀和甄別。本文相當於幫大家梳理了一番,具體細節還得個人好好把握。

4。配置開發環境,是一項體力活,技術含量不大,但是特別磨人,不過邁出了這一步,接下來的就輕鬆啦!

鴻蒙-南向輕核心開發實戰系列(一)基於小熊派鴻蒙季環境搭建

文中環境,後臺回覆:鴻蒙,既可以獲取