偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

子系統(tǒng),部件,模塊編譯構(gòu)建全實(shí)踐

系統(tǒng) OpenHarmony
本篇文章要分享的是OpenHarmony的一個(gè)編譯構(gòu)建實(shí)踐,隨著版本更新,OpenHarmony的編譯方式也會(huì)出現(xiàn)一些小變化,這次將以O(shè)penHarmony-3.2-Beta版本為例,使用九聯(lián)UnionPi-Tiger開發(fā)板,介紹下子系統(tǒng),部件,模塊的配置規(guī)則以及編譯構(gòu)建實(shí)踐。

??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

前言

大家好,前段時(shí)間學(xué)業(yè)比較忙,已經(jīng)有挺長一段時(shí)間沒有更新博客了,這段時(shí)間開始實(shí)習(xí)生活,會(huì)將更多的精力投入到開源鴻蒙的研究學(xué)習(xí)中,會(huì)盡量多更新實(shí)習(xí)期間的所學(xué)所得,分享給大家,一起學(xué)習(xí)進(jìn)步!
本篇文章要分享的是OpenHarmony的一個(gè)編譯構(gòu)建實(shí)踐,隨著版本更新,OpenHarmony的編譯方式也會(huì)出現(xiàn)一些小變化,這次將以O(shè)penHarmony-3.2-Beta版本為例,使用九聯(lián)UnionPi-Tiger開發(fā)板,介紹下子系統(tǒng),部件,模塊的配置規(guī)則以及編譯構(gòu)建實(shí)踐。

概述

OpenHarmony整體遵從分層設(shè)計(jì),從下向上依次為:內(nèi)核層、系統(tǒng)服務(wù)層、框架層和應(yīng)用層。系統(tǒng)功能按照“系統(tǒng) > 子系統(tǒng) > 部件”逐級(jí)展開,在多設(shè)備部署場(chǎng)景下,支持根據(jù)實(shí)際需求裁剪某些非必要的子系統(tǒng)或部件。

  • 子系統(tǒng):子系統(tǒng)是一個(gè)邏輯概念,它具體由對(duì)應(yīng)的部件構(gòu)成。
  • 部件:對(duì)子系統(tǒng)的進(jìn)一步拆分,可復(fù)用的軟件單元,它包含源碼、配置文件、資源文件和編譯腳本;能獨(dú)立構(gòu)建,以二進(jìn)制方式集成,具備獨(dú)立驗(yàn)證能力的二進(jìn)制單元。需要注意的是下文中的芯片解決方案本質(zhì)是一種特殊的部件。
  • 模塊:模塊就是編譯子系統(tǒng)的一個(gè)編譯目標(biāo),部件也可以是編譯目標(biāo)。
  • 特性(feature):特性是部件用于體現(xiàn)不同產(chǎn)品之間的差異。
  • #創(chuàng)作者激勵(lì)# 【FFH】子系統(tǒng),部件,模塊編譯構(gòu)建全實(shí)踐-開源基礎(chǔ)軟件社區(qū)

上圖編譯子系統(tǒng)的各部分關(guān)系,主要體現(xiàn)為:

  • 子系統(tǒng)是某個(gè)路徑下所有部件的集合,一個(gè)部件只能屬于一個(gè)子系統(tǒng)。
  • 部件是模塊的集合,一個(gè)模塊只能歸屬于一個(gè)部件。
  • 通過產(chǎn)品配置文件配置一個(gè)產(chǎn)品包含的部件列表,部件不同的產(chǎn)品配置可以復(fù)用。
  • 部件可以在不同的產(chǎn)品中實(shí)現(xiàn)有差異,通過變體或者特性feature實(shí)現(xiàn)。
  • 模塊就是編譯子系統(tǒng)的一個(gè)編譯目標(biāo),部件也可以是編譯目標(biāo)。

環(huán)境

  • OpenHarmony-3.2-Beta5
  • 九聯(lián)UnionPi-Tiger開發(fā)板
  • USB_Burning_Tool燒錄工具
  • 串口調(diào)試助手

參考

??編譯構(gòu)建指導(dǎo)??NAPI框架生成代碼集成到OpenHarmony的方法

一、子系統(tǒng)配置

通過build倉下的subsystem\_config.json可以查看所有子系統(tǒng)的配置規(guī)則。子系統(tǒng)的配置規(guī)則主要是在build/subsystem_config.json中指定子系統(tǒng)的路徑和子系統(tǒng)名稱。

#創(chuàng)作者激勵(lì)# 【FFH】子系統(tǒng),部件,模塊編譯構(gòu)建全實(shí)踐-開源基礎(chǔ)軟件社區(qū)

注意:在已有子系統(tǒng)的目錄下再創(chuàng)建子系統(tǒng)會(huì)導(dǎo)致重復(fù)獲取到部件配置文件而導(dǎo)致報(bào)錯(cuò)。(血淚教訓(xùn))

二、部件配置

bundle.json與ohos.build

配置完子系統(tǒng)后,系統(tǒng)會(huì)自動(dòng)識(shí)別該目錄下的所有部件配置文件,新增部件的方式有兩種,分別為增加ohos.build文件方式和增加bundle.json文件方式,各自的配置方法如下。

1、ohos.build配置格式

{
"subsystem": "mysubsys" # mysubsys所屬子系統(tǒng)的名字
"parts": {
"ohos_build_test": { # ohos_build_test為部件名稱
"module_list": [
"http://mysubsys/ohos_build_test:mygroup" # 部件編譯入口
]
"test_list": []
}
}
}

2、bundle.json配置格式

{
"name": "@ohos/sensor_lite", # HPM部件英文名稱,格式"@組織/部件名稱"
"description": "Sensor services", # 部件功能一句話描述
"version": "3.1", # 版本號(hào),版本號(hào)與OpenHarmony版本號(hào)一致
"license": "MIT", # 部件License
"publishAs": "code-segment", # HPM包的發(fā)布方式,當(dāng)前默認(rèn)都為code-segment
"segment": {
"destPath": ""
}, # 發(fā)布類型為code-segment時(shí)為必填項(xiàng),定義發(fā)布類型code-segment的代碼還原路徑(源碼路徑)
"dirs": {"base/sensors/sensor_lite"}, # HPM包的目錄結(jié)構(gòu),字段必填內(nèi)容可以留空
"scripts": {}, # HPM包定義需要執(zhí)行的腳本,字段必填,值非必填
"licensePath": "COPYING",
"readmePath": {
"en": "README.rst"
},
"component": { # 部件屬性
"name": "sensor_lite", # 部件名稱
"subsystem": "", # 部件所屬子系統(tǒng)
"syscap": [], # 部件為應(yīng)用提供的系統(tǒng)能力
"features": [], # 部件對(duì)外的可配置特性列表,一般與build中的sub_component對(duì)應(yīng),可供產(chǎn)品配置
"adapted_system_type": [], # 輕量(mini)小型(small)和標(biāo)準(zhǔn)(standard),可以是多個(gè)
"rom": "92KB", # 部件ROM值
"ram": "~200KB", # 部件RAM估值
"deps": {
"components": [ # 部件依賴的其他部件
"samgr_lite",
"ipc_lite"
],
"third_party": [ # 部件依賴的三方開源軟件
"bounds_checking_function"
]
}
"build": { # 編譯相關(guān)配置
"sub_component": [
""//base/sensors/sensor_lite/services:sensor_service"", # 部件編譯入口
], # 部件編譯入口,模塊在此處配置
"inner_kits": [], # 部件間接口
"test": [] # 部件測(cè)試用例編譯入口
}
}
}
  • 部件配置中需要配置部件的名稱、源碼路徑、功能簡(jiǎn)介、是否必選、編譯目標(biāo)、RAM、ROM、編譯輸出、已適配的內(nèi)核、可配置的特性和依賴等屬性定義。

使用場(chǎng)景對(duì)比

兩種集成方式使用場(chǎng)景說明:
ohos.build方式集成:適合3.0前版本使用。
bundle.json方式集成:兼容ohos.build方式,但3.1及以后版本建議使用此種方式集成,更好兼容HPM。

三. 模塊配置

具體參考??模塊配置規(guī)則??。
編譯子系統(tǒng)通過模塊、部件和產(chǎn)品三層配置來實(shí)現(xiàn)編譯和打包。模塊就是編譯子系統(tǒng)的一個(gè)目標(biāo),包括(動(dòng)態(tài)庫、靜態(tài)庫、配置文件、預(yù)編譯模塊等)。模塊要定義屬于哪個(gè)部件,一個(gè)模塊只能歸屬于一個(gè)部件。OpenHarmony使用定制化的Gn模板來配置模塊規(guī)則。
以下是常用的模塊配置規(guī)則:

# C/C++模板
ohos_shared_library
ohos_static_library
ohos_executable
ohos_source_set

# 預(yù)編譯模板:
ohos_prebuilt_executable
ohos_prebuilt_shared_library
ohos_prebuilt_static_library

#hap模板
ohos_hap
ohos_app_scope
ohos_js_assets
ohos_resources

#其他常用模板
#配置文件
ohos_prebuilt_etc

#sa配置
ohos_sa_profile

ohos開頭的模板對(duì)應(yīng)的.gni文件路徑在:openharmony/build/templates/cxx/cxx.gni。
這里以ohos_executable為例,配置規(guī)則如下:

import("http://build/ohos.gni")
ohos_executable("helloworld") {
configs = [] # 配置
part_name = [string] # 部件名稱
subsystem_name = [string] # 子系統(tǒng)名稱
deps = [] # 部件內(nèi)模塊依賴

external_deps = [ # 跨部件模塊依賴定義,
"part_name:module_name", # 定義格式為 "部件名:模塊名稱"
] # 這里依賴的模塊必須是依賴的部件聲明在inner_kits中的模塊
ohos_test = []
test_output_dir = []

# Sanitizer配置,每項(xiàng)都是可選的,默認(rèn)為false/
sanitize = {
# 各個(gè)Sanitizer開關(guān)
cfi = [boolean] # 控制流完整性檢測(cè)
cfi_cross_dso = [boolean] # 開啟跨so調(diào)用的控制流完整性檢測(cè)
integer_overflow = [boolean] # 整數(shù)溢出檢測(cè)
boundary_sanitize = [boolean] # 邊界檢測(cè)
ubsan = [boolean] # 部分ubsan選項(xiàng)
all_ubsan = [boolean] # 全量ubsan選項(xiàng)
...

debug = [boolean] # 調(diào)測(cè)模式
blocklist = [string] # 屏蔽名單路徑
}

testonly = [boolean]
license_as_sources = []
license_file = [] # 后綴名是.txt的文件
remove_configs = []
static_link = []
install_images = []
module_install_dir = [] # 模塊安裝路徑,從system/,vendor/后開始指定
relative_install_dir = []
symlink_target_name = []
output_dir = [directory] # 存放輸出文件的目錄
install_enable = [boolean]
version_script = []
use_exceptions = []
}

四、編譯構(gòu)建全實(shí)踐

1、添加子系統(tǒng)mysubsys

在子系統(tǒng)下新建一個(gè)屬于自己的名為mysubsys子系統(tǒng),并在源碼下建立相應(yīng)的mysubsys目錄。

"mysubsys": {
"path": "mysubsys",
"name": "mysubsys"
}

在mysubsys新建兩個(gè)部件,分別用來測(cè)試bundle.json以及ohos.build配置部件的實(shí)現(xiàn)結(jié)果。注意ohos.build或者bundle.json文件均在對(duì)應(yīng)子系統(tǒng)所在文件夾下,BUILD.gn文件位置可以根據(jù)需要指定,整體目錄結(jié)構(gòu)如下:

mysubsys
├── bundle_json_test
├── BUILD.gn
├── bundle.json
└── test
├── BUILD.gn
└── test.c
└── ohos_build_test
├── BUILD.gn
├── ohos.build
└── test
├── BUILD.gn
└── test.c

2、為子系統(tǒng)配置部件及模塊

(1)添加ohos.build測(cè)試部件及模塊

mysubsys下新建一個(gè)ohos.build文件,根據(jù)ohos.build配置規(guī)則進(jìn)行配置。同目錄下建立BUILD.gn編譯腳本,用于指定部件下模塊編譯入口,然后新建文件夾test作為測(cè)試模塊,里面在新建test.c源文件以及BUILD.gn文件,生成可執(zhí)行文件安裝到開發(fā)板bin目錄下,可執(zhí)行文件名為mysubsys_test_ohos。編譯構(gòu)建關(guān)系如下圖所示:

#創(chuàng)作者激勵(lì)# 【FFH】子系統(tǒng),部件,模塊編譯構(gòu)建全實(shí)踐-開源基礎(chǔ)軟件社區(qū)

用于測(cè)試的源文件test.c:

#include "stdio.h"

int main()
{
printf("test mysubsys for ohos.build\r\n");
return 0;
}

(2)添加bundle.json測(cè)試部件及模塊

mysubsys下新建一個(gè)bundle.json文件,根據(jù)obundle.json配置規(guī)則進(jìn)行配置。同目錄下建立BUILD.gn編譯腳本,用于指定部件下模塊編譯入口,然后新建文件夾test作為測(cè)試模塊,里面在新建test.c源文件以及BUILD.gn文件,生成可執(zhí)行文件安裝到開發(fā)板bin目錄下,可執(zhí)行文件名為mysubsys_test_bundle。編譯構(gòu)建關(guān)系如下圖所示:

#創(chuàng)作者激勵(lì)# 【FFH】子系統(tǒng),部件,模塊編譯構(gòu)建全實(shí)踐-開源基礎(chǔ)軟件社區(qū)

#include "stdio.h"

int main()
{
printf("test mysubsys for bundle.json\r\n");
return 0;
}

上述兩個(gè)實(shí)例可以直接在"module_list"或者"sub_component"里面直接將編譯入口設(shè)置為你的模塊目標(biāo)(動(dòng)態(tài)庫、靜態(tài)庫、配置文件、預(yù)編譯模塊等),不過在學(xué)習(xí)過程中,發(fā)現(xiàn)OpenHarmony源碼里面關(guān)于部件模塊的寫法(例如third_party),發(fā)現(xiàn)很多都會(huì)額外寫一個(gè)BUILD.gn來新建一個(gè)group,用來包含一個(gè)或多個(gè)目標(biāo)的虛節(jié)點(diǎn),這里我也習(xí)慣這么寫了。

3、產(chǎn)品配置中添加相應(yīng)子系統(tǒng)及部件

在vendor/unionman/unionpi_tiger/config.json文件添加如下配置:

#創(chuàng)作者激勵(lì)# 【FFH】子系統(tǒng),部件,模塊編譯構(gòu)建全實(shí)踐-開源基礎(chǔ)軟件社區(qū)

4、編譯燒錄運(yùn)行

操作流程具體參考https://gitee.com/openharmony/device_board_unionman/blob/master/unionpi_tiger/README_zh.md,這里不多贅述。

./build.sh --product-name unionpi_tiger    #編譯
./device/board/unionman/unionpi_tiger/common/tools/packer-unionpi.sh # 鏡像打包

#創(chuàng)作者激勵(lì)# 【FFH】子系統(tǒng),部件,模塊編譯構(gòu)建全實(shí)踐-開源基礎(chǔ)軟件社區(qū)

電腦連接開發(fā)板debug口,打開串口工具,生成的可執(zhí)行文件mysubsys_test_ohos,mysubsys_test_bundle都可以在bin目錄找到,在終端執(zhí)行執(zhí)行:

mysubsys_test_ohos
mysubsys_test_bundle

結(jié)果:

#創(chuàng)作者激勵(lì)# 【FFH】子系統(tǒng),部件,模塊編譯構(gòu)建全實(shí)踐-開源基礎(chǔ)軟件社區(qū)

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載:

 ?https://ost.51cto.com/resource/2564。??

??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2023-06-12 15:43:44

鴻蒙智能家居開發(fā)

2021-08-17 14:39:00

鴻蒙HarmonyOS應(yīng)用

2022-01-26 15:16:24

utilsOpenHarmon鴻蒙

2009-10-21 17:29:34

Oracle管理系統(tǒng)

2023-07-17 16:13:21

組件模塊開發(fā)的鴻蒙

2016-09-28 22:04:01

GNUAutotoolLinux

2022-01-25 17:12:36

startup子系統(tǒng)syspara系統(tǒng)鴻蒙

2023-09-04 07:03:35

2023-09-08 10:13:35

存儲(chǔ)EC系統(tǒng)

2022-05-30 15:08:33

包管理子系統(tǒng)包安裝模塊

2018-09-17 08:36:59

機(jī)房監(jiān)控配電

2019-07-15 08:30:06

Linux 系統(tǒng) 數(shù)據(jù)

2022-02-21 14:49:26

OpenHarmon操作系統(tǒng)鴻蒙

2021-05-24 15:48:38

高德打車系統(tǒng)可觀測(cè)性

2024-07-26 16:39:33

鴻蒙系統(tǒng)開源構(gòu)建系統(tǒng)

2013-01-06 13:06:02

2019-04-04 09:19:08

日志京東流式計(jì)算

2023-06-28 15:00:02

開源鴻蒙輸入系統(tǒng)架構(gòu)

2022-06-10 14:37:24

鴻蒙操作系統(tǒng)

2022-05-12 12:47:07

SPI主設(shè)備通信
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)