子系统 部件 模块编译构建全实践
子系统,部件,模块编译构建全实践
作者:FFH杞人 2023-03-09 15:15:21系统 OpenHarmony 本篇文章要分享的是OpenHarmony的一个编译构建实践,随着版本更新,OpenHarmony的编译方式也会出现一些小变化,这次将以OpenHarmony-3.2-Beta版本为例,使用九联UnionPi-Tiger开发板,介绍下子系统,部件,模块的配置规则以及编译构建实践。想了解更多关于开源的内容,请访问:
51CTO开源基础软件社区
https://ost.51cto.com
前言
大家好,前段时间学业比较忙,已经有挺长一段时间没有更新博客了,这段时间开始实习生活,会将更多的精力投入到开源鸿蒙的研究学习中,会尽量多更新实习期间的所学所得,分享给大家,一起学习进步!本篇文章要分享的是OpenHarmony的一个编译构建实践,随着版本更新,OpenHarmony的编译方式也会出现一些小变化,这次将以OpenHarmony-3.2-Beta版本为例,使用九联UnionPi-Tiger开发板,介绍下子系统,部件,模块的配置规则以及编译构建实践。
概述
OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 >部件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或部件。
子系统:子系统是一个逻辑概念,它具体由对应的部件构成。部件:对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。需要注意的是下文中的芯片解决方案本质是一种特殊的部件。模块:模块就是编译子系统的一个编译目标,部件也可以是编译目标。特性(feature):特性是部件用于体现不同产品之间的差异。上图编译子系统的各部分关系,主要体现为:
子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统。部件是模块的集合,一个模块只能归属于一个部件。通过产品配置文件配置一个产品包含的部件列表,部件不同的产品配置可以复用。部件可以在不同的产品中实现有差异,通过变体或者特性feature实现。模块就是编译子系统的一个编译目标,部件也可以是编译目标。环境
OpenHarmony-3.2-Beta5九联UnionPi-Tiger开发板USB_Burning_Tool烧录工具串口调试助手参考
编译构建指导NAPI框架生成代码集成到OpenHarmony的方法
一、子系统配置
通过build仓下的subsystem\_config.json可以查看所有子系统的配置规则。子系统的配置规则主要是在build/subsystem_config.json中指定子系统的路径和子系统名称。
注意:在已有子系统的目录下再创建子系统会导致重复获取到部件配置文件而导致报错。(血泪教训)
二、部件配置
bundle.json与ohos.build
配置完子系统后,系统会自动识别该目录下的所有部件配置文件,新增部件的方式有两种,分别为增加ohos.build文件方式和增加bundle.json文件方式,各自的配置方法如下。
1、ohos.build配置格式
{"subsystem": "mysubsys"# mysubsys所属子系统的名字"parts": {"ohos_build_test": {# ohos_build_test为部件名称"module_list": ["//mysubsys/ohos_build_test:mygroup"# 部件编译入口]"test_list": []}}}2、bundle.json配置格式
{"name": "@ohos/sensor_lite", # HPM部件英文名称,格式"@组织/部件名称""description": "Sensor services", # 部件功能一句话描述"version": "3.1", # 版本号,版本号与OpenHarmony版本号一致"license": "MIT", # 部件License"publishAs": "code-segment", # HPM包的发布方式,当前默认都为code-segment"segment": {"destPath": ""}, # 发布类型为code-segment时为必填项,定义发布类型code-segment的代码还原路径(源码路径)"dirs": {"base/sensors/sensor_lite"}, # HPM包的目录结构,字段必填内容可以留空"scripts": {}, # HPM包定义需要执行的脚本,字段必填,值非必填"licensePath": "COPYING","readmePath": {"en": "README.rst"},"component": { # 部件属性"name": "sensor_lite", # 部件名称"subsystem": "", # 部件所属子系统"syscap": [], # 部件为应用提供的系统能力"features": [],# 部件对外的可配置特性列表,一般与build中的sub_component对应,可供产品配置"adapted_system_type": [], # 轻量(mini)小型(small)和标准(standard),可以是多个"rom": "92KB", # 部件ROM值"ram": "~200KB", # 部件RAM估值 "deps": {"components": [# 部件依赖的其他部件"samgr_lite","ipc_lite"],"third_party": [ # 部件依赖的三方开源软件"bounds_checking_function"]} "build": { # 编译相关配置"sub_component": [""//base/sensors/sensor_lite/services:sensor_service"",# 部件编译入口], # 部件编译入口,模块在此处配置"inner_kits": [], # 部件间接口"test": [] # 部件测试用例编译入口}} }部件配置中需要配置部件的名称、源码路径、功能简介、是否必选、编译目标、RAM、ROM、编译输出、已适配的内核、可配置的特性和依赖等属性定义。使用场景对比
两种集成方式使用场景说明:ohos.build方式集成:适合3.0前版本使用。bundle.json方式集成:兼容ohos.build方式,但3.1及以后版本建议使用此种方式集成,更好兼容HPM。
三. 模块配置
具体参考模块配置规则。编译子系统通过模块、部件和产品三层配置来实现编译和打包。模块就是编译子系统的一个目标,包括(动态库、静态库、配置文件、预编译模块等)。模块要定义属于哪个部件,一个模块只能归属于一个部件。OpenHarmony使用定制化的Gn模板来配置模块规则。以下是常用的模块配置规则:
# C/C++模板ohos_shared_libraryohos_static_libraryohos_executableohos_source_set# 预编译模板:ohos_prebuilt_executableohos_prebuilt_shared_libraryohos_prebuilt_static_library#hap模板ohos_hapohos_app_scopeohos_js_assetsohos_resources#其他常用模板#配置文件ohos_prebuilt_etc#sa配置ohos_sa_profileohos开头的模板对应的.gni文件路径在:openharmony/build/templates/cxx/cxx.gni。这里以ohos_executable为例,配置规则如下:
import("//build/ohos.gni")ohos_executable("helloworld") {configs = [] # 配置part_name = [string] # 部件名称 subsystem_name = [string]# 子系统名称deps = []# 部件内模块依赖external_deps = [# 跨部件模块依赖定义,"part_name:module_name", # 定义格式为 "部件名:模块名称"]# 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块ohos_test = []test_output_dir = []# Sanitizer配置,每项都是可选的,默认为false/空sanitize = {# 各个Sanitizer开关cfi = [boolean] # 控制流完整性检测cfi_cross_dso = [boolean] # 开启跨so调用的控制流完整性检测integer_overflow = [boolean]# 整数溢出检测boundary_sanitize = [boolean] # 边界检测ubsan = [boolean] # 部分ubsan选项all_ubsan = [boolean] # 全量ubsan选项...debug = [boolean] # 调测模式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 = []}四、编译构建全实践
1、添加子系统mysubsys
在子系统下新建一个属于自己的名为mysubsys子系统,并在源码下建立相应的mysubsys目录。
"mysubsys": {"path": "mysubsys","name": "mysubsys"}在mysubsys新建两个部件,分别用来测试bundle.json以及ohos.build配置部件的实现结果。注意ohos.build或者bundle.json文件均在对应子系统所在文件夹下,BUILD.gn文件位置可以根据需要指定,整体目录结构如下:
mysubsys├── bundle_json_test│ ├── BUILD.gn│ ├── bundle.json│ └── test│ ├── BUILD.gn│ └── test.c└── ohos_build_test├── BUILD.gn├── ohos.build└── test├── BUILD.gn└── test.c2、为子系统配置部件及模块
(1)添加ohos.build测试部件及模块
mysubsys下新建一个ohos.build文件,根据ohos.build配置规则进行配置。同目录下建立BUILD.gn编译脚本,用于指定部件下模块编译入口,然后新建文件夹test作为测试模块,里面在新建test.c源文件以及BUILD.gn文件,生成可执行文件安装到开发板bin目录下,可执行文件名为mysubsys_test_ohos。编译构建关系如下图所示:
用于测试的源文件test.c:
#include "stdio.h"int main(){printf("test mysubsys for ohos.build\r\n");return 0;}(2)添加bundle.json测试部件及模块
mysubsys下新建一个bundle.json文件,根据obundle.json配置规则进行配置。同目录下建立BUILD.gn编译脚本,用于指定部件下模块编译入口,然后新建文件夹test作为测试模块,里面在新建test.c源文件以及BUILD.gn文件,生成可执行文件安装到开发板bin目录下,可执行文件名为mysubsys_test_bundle。编译构建关系如下图所示:
#include "stdio.h"int main(){printf("test mysubsys for bundle.json\r\n");return 0;}上述两个实例可以直接在"module_list"或者"sub_component"里面直接将编译入口设置为你的模块目标(动态库、静态库、配置文件、预编译模块等),不过在学习过程中,发现OpenHarmony源码里面关于部件模块的写法(例如third_party),发现很多都会额外写一个BUILD.gn来新建一个group,用来包含一个或多个目标的虚节点,这里我也习惯这么写了。
3、产品配置中添加相应子系统及部件
在vendor/unionman/unionpi_tiger/config.json文件添加如下配置:
4、编译烧录运行
操作流程具体参考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 # 镜像打包电脑连接开发板debug口,打开串口工具,生成的可执行文件mysubsys_test_ohos,mysubsys_test_bundle都可以在bin目录找到,在终端执行执行:
mysubsys_test_ohosmysubsys_test_bundle结果:
文章相关附件可以点击下面的原文链接前往下载:
https://ost.51cto.com/resource/2564。
想了解更多关于开源的内容,请访问:
51CTO开源基础软件社区
https://ost.51cto.com
责任编辑:jianghua 来源:51CTO 开源基础软件社区 鸿蒙模块编译推荐系统
电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载
语言:中文版系统大小:2.98GB系统类型:Win8电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
相关文章
- 联想一体机装win7系统一体机电脑win7系统怎么装
- 装机高手教你u盘安装系统
- 数码大师如何添加文字?数码大师添加文字的方法
- 0x8007007B,本文教您win10激活系统失败出错代码0x8007007B
- Win8系统如何取消自动关机?Win8系统取消定时关机的方法
- Win8.1系统更新失败报错“80072ee2”怎么办?
- 激活工具,本文教您怎样与运用windows7激活工具
- win7主板驱动安装失败解决方法【详情】
- QQ黑名单恢复的小技巧_腾讯QQ
- qq火炬手图标怎样点亮?_腾讯QQ
- 电脑桌面便签软件有哪些
- WinXP浏览器提示启用cookies才能登录怎样办?
- 电脑只能用XP怎么办?将电脑和XP一起淘汰
- Win10图标蓝白相间怎么办?Win10图标蓝白相间解决方法
- 在win7中 windows
- 写QQ魔方日志的步骤_腾讯QQ
- win10专业版,本文教您win10专业版怎样
- 651出错代码,本文教您宽带连接提示出错651怎样办
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 4电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1Win10系统下载_Win10专业版_windows10正式版下载
- 2深度技术 GHOST WIN7 SP1 X64 电脑城装机版 V2023.12 下载
- 3番茄花园 GHOST XP SP3 万能装机版 V2018.12 下载
- 4番茄花园Ghost Win8.1 (X32) 元旦特别 纯净版2022年1月(免激活) ISO镜像免费下载
- 5最新深度技术Win7系统_2023深度技术Win7最新旗舰版下载V2023.04
- 6萝卜家园 GHOST WIN7 SP1 X64 旗舰稳定版 V2017.07(64位) 下载
- 7GHOST WIN8.1 X64 装机专业版 V2023.03(64位) 下载
- 8Ghost Win7 iso镜像文件下载_番茄花园 Ghost Win7 64位 免激活旗舰版下载
- 9新萝卜家园Ghost Win10x64 专业版 v2023最新免费下载
- 10番茄花园 GHOST WIN7 SP1 X86 专业装机版 V2023.11 (32位) 下载