Openharmony輕量設備開發—潤和智能家居套件-編譯構建系統的使用
在上一篇帖子中,我們學習了Openharmony輕量系統的編譯構建https://ost.51cto.com/posts/25293,其中包括了子系統,組件的核心理念、編譯構建系統的配置規則等等。下面我們來學習一下編譯構建系統的使用。
案例:新增組件
1、根據功能準備開發套件
筆者使用的是潤和智能家居開發套件,連接主板和核心板。
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
2、編寫/合入組件源碼
編寫組件源碼:applications\sample\component_demo\demo.c。
1.在applications/sample下新建component_demo文件夾。
2.在component_demo文件夾下新建文件demo.c。
3.編寫如下代碼:
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
#include <stdio.h>
#include "ohos_init.h"
void entry(void)
{
printf("I am a component.\r\n");
}
SYS_RUN(entry);
其中:
- #include “ohos_init.h” 是Openharmony的特有頭文件,它在utils\native\lite\include\ohos_init.h中,在開發中,它提供了一系列入口,用于初始化服務(services)和功能(features)。
- SYS_RUN(entry) 的意思是讓entry函數以“優先級2”在系統啟動過程中的“階段4.system startup”階段執行。
3、編寫組件編譯腳本
編寫組件編譯腳本:在applications\sample\component_demo下新建BUILD.gn文件,編寫如下代碼。
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
static_library("TestComponent"){
sources = [ "demo.c" ]
include_dirs = [
"http://utils/native/lite/include",
]
}
- static_library為靜態庫,“TestComponent"是庫名稱,最終被編譯為"libTestComponent.a”。
- sources里面存放的是源文件。
- include_dirs里存放的是include目錄,包括"ohos_init.h"等頭文件。
單獨編譯目標
在組件源碼和編譯腳本完成之后,我們可以嘗試單獨編譯目標。
首先我們來看一下hb的用法:
打開虛擬機,進去Openharmony的源碼目錄,鼠標右鍵選擇在終端中打開,輸入如下命令:
hb build -h
顯示如下:
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
語法:
hb build -T 路徑:目標
在上面的例子中:
語法為:
hb build -f -T //applications/sample/component_demo:TestComponent
注意:-T是要大寫的。
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
可以看到,編譯成功完成。
4、添加組件定義
作為一個組件,必須要注冊到一個子系統中,Openharmony才會意識到你的存在。
具體內容可以看上一篇帖子:https://ost.51cto.com/posts/25293找到build\lite\components\applications.json
添加如下定義:
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
{
"component":"TestComponent",
"description":"A test component",
"optional":"true",
"dirs":[
"applications/sample/component_demo"
],
"targets":[
"http://applications/sample/component_demo:TestComponent"
],
"adapted_kernel":["liteos_m"]
},
添加的內容解釋如下:
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
5、將組件配置到產品
找到vendor\hisilicon\hispark_pegasus\config.json,添加如下配置:
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
接著我們再來單獨編譯組件,這與前面編譯目標的效果一樣(目標就是一個組件),這樣會快捷。
語法:
hb build 組件名稱
在終端中輸入如下命令
hb build -f TestComponent
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
編譯結果如上。
這樣就不用像之前那樣想要編譯一個組件,還需要它的路徑,會更快捷方便。
6、編譯產品
在輕量系統中,單獨編譯的目標或者是組件是不能夠獨立運行的,這種編譯方式適合發現編譯錯誤,但是要燒錄運行的話,我們要進行固件的全量編譯(hb build -f)。
接下來我們進行全量編譯:
執行以下命令:
hb build -f
編譯成功結果如下:
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
7、燒錄固件
下面就到了我們熟悉的地方,燒錄固件,筆者這里采用的是Hiburn燒錄工具,相關細節可以看我這篇貼子:https://ost.51cto.com/posts/25292下面給出燒錄成功之后的樣子:
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
燒錄完成后,點擊disconnect,然后關閉Hiburn燒錄工具。
8、運行
運行我們采用的是MobaXterm串口終端工具。相關細節可以看我這篇帖子:https://ost.51cto.com/posts/25292下面給出運行結果:
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區
可以看到,成功的編譯運行了剛剛的component_demo組件.總結:新增組件的案例就是按照這1-8個步驟來完成。再次附上子系統的構建模型,希望大家能有更深的理解。
【Openharmony輕量設備開發】潤和智能家居套件-編譯構建系統的使用-開源基礎軟件社區