OpenHarmony编译构建系统—浅谈与实践
想了解更多关于开源的内容,请访问:
51CTO开源基础软件社区
https://ost.51cto.com
前言
经过一段时间的南向学习,基于Hi3861智能家居开发套件的内核编程,驱动开发已经基本解决了。这篇来聊聊OpenHarmony的编译构建,经过前面的实践,再来看编译构建。会对之前的编译流程做一些解释,实践一个基于Hispark_pegasus的自己的解决方案。
编译构建概述
在官网中提到了,OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能:
以部件为最小粒度拼装产品和独立编译。支持轻量、小型、标准三种系统的解决方案级版本构建,以及用于支撑应用开发者使用IDE开发的SDK开发套件的构建。支持芯片解决方案厂商的灵活定制和独立编译。hb、GN、Ninja
回想我们在OpenHarmony搭建编译环境的时候,进行了编译操作是怎么进行的了吗?首先是hb set选择了wifiiot_hispark_pegasus,然后进行了全量编译操作hb build -f。
hb set
选择产品或者说选择一个编译的目录,我们可以自己创建自己的产品,哪怕他只有一个hello,world的功能。而其他的产品或者说代码都不会参与编译,这也解释了什么是最小的产品独立编译。编译什么是我们手动选择的,功能可大可小。
hb build
编译指定的产品(代码),根据指定的产品开发板,读取开发板config.gni文件的内容,主要是一些编译工具链和编译的配置选项。
我们也可以用-T修饰命令,让他只编译某一个源文件。
hb build -T 路径:目标BUILD.gn
这个文件应该说很熟悉了,每一个案例都要去写这个gn文件,gn是Generate ninja的缩写,用于产生ninja文件。在我们之前简单案例的开发中,如“hello,world”,gn文件就是一个编译脚本。
我们对nijia的印象不是很深,因为他是自动执行的,我们作为开发者没有去人工干涉他。
编译小总结
总结来说,hb就是OpenHarmony的命令行工具,用来执行编译命令。gn生成nijia文件,nijia是一个专注于速度的小型编译构建系统。他们三者在整个编译中的流程如下图所示:
整个编译构建的流程图如下:
OpenHarmony系统
OpenHarmony整体遵从分层设计,系统功能按照“系统 > 子系统 >组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或部件,非常的灵活,高内聚低耦合。
配置规则
组件配置规则
遵循:{领域(子系统集)}/{子系统}/{组件}的一个规则,从下面的源码中可以看出:
组件定义
组件定义在build/lite/components/下:
定义就是一个JSON文件,由一个总的components数组包含每一个component对象,对象中包含了组件的所有属性。
至此,我们知道怎么去定义组件,定义在哪里,也就能新建组件了。但是新出现的组件,怎么能后加入到编译中呢,targets参数其实已经说明清楚了,下面通过Wifi组件的案例做具体解释。
WiFi组件
我们可以根据targets参数追踪到目录中/foundation/communication/wifi/BUILD.gn文件中的wifi。
$WIFI_ROOT_DIR表示/foundation/communication/wifi,之后继续跟踪,这些dependences,完成相应BUILD.gn脚本的执行,也就让组件被编译系统所识别,完成组件的编译了。
组件总结
芯片解决方案配置规则
芯片解决方案的路径如下图所示:
芯片解决方案组件会随产品选择的开发板默认编译。
产品解决方案配置规则
产品解决方案的路径如下图所示:
产品解决方案,在config.json文件中进行配置:
“product_name”: 产品名称,指定为"wifiiot_hispark_pegasus"。“type”: 产品类型,被标记为"mini"。“version”: 产品版本号,标记为"3.0"。“ohos_version”: 操作系统版本,使用的是OpenHarmony 1.0。“device_company”: 设备制造公司,此产品由"hisilicon"制造。“device_build_path”: 设备构建路径,指定为"device/board/hisilicon/hispark_pegasus"。“board”: 开发板名称,被标记为"hispark_pegasus"。“kernel_type”: 内核类型,使用的是"liteos_m"。“kernel_is_prebuilt”: 内核是否预构建,被标记为true。“kernel_version”: 内核版本号,此处为空。“subsystems”: 子系统列表,包含了产品的不同子系统及其组件信息。“subsystem”: 子系统名称,表示不同的功能区域。“components”: 组件列表,表示在该子系统中使用的组件及其特性。“component”: 组件名称,表示不同的功能组件。“features”: 特性列表,描述了组件的不同特性。“third_party_dir”: 第三方库路径,指定为"//device/soc/hisilicon/hi3861v100/sdk_liteos/third_party"。“product_adapter_dir”: 产品适配层路径,指定为"//vendor/hisilicon/hispark_pegasus/hals"。最后,也就能看到我们的hb set从顶层,选择vendor下的产品解决方案,通过方案中的各个子系统集,子系统,组件,进行编译。
新增自己的产品解决方案
组件定义
首先,在application/sample下创建一个myComponent等如下目录。
完成组件功能的编写
component.c
#includeBUILD.gn
static_library(test){sources = ["component.c"]include_dirs = ["//commonlibrary/utils_lite/include"]}定义组件:
在build/lite/components/创建application1.json编写如下代码:
{"components": [{"component": "myComponent","description": "a test component","optional": "true","dirs": ["applications/sample/myComponent"],"targets": ["//applications/sample/myComponent:test"],"adapted_kernel": [ "liteos_m" ]}]}我们可以使用 -T 修饰我们的编译命令,实现指定文件编译。
hb build -f -T //applications/sample/myComponent:test说明我们的组件编写没什么问题。
解决方案定义
创建如下目录,并编写config.json配置文件。
config.json
{"product_name": "product","type": "mini","version": "3.0","ohos_version": "OpenHarmony 3.2","device_company": "hisilicon","device_build_path": "device/board/hisilicon/hispark_pegasus","board": "hispark_pegasus","kernel_type": "liteos_m","kernel_is_prebuilt": true,"kernel_version": "","subsystems": [{"subsystem": "applications1", // 用我们自己定义的子系统的组件"components": [{ "component": "myComponent", "features":[] }]},{"subsystem": "iothardware","components": [{ "component": "peripheral", "features":[] }]},{"subsystem": "hiviewdfx","components": [{ "component": "hilog_lite", "features":[] },{ "component": "hievent_lite", "features":[] },{ "component": "blackbox", "features":[] },{ "component": "hidumper_mini", "features":[] }]},{"subsystem": "systemabilitymgr","components": [{ "component": "samgr_lite", "features":[] }]},{"subsystem": "security","components": [{ "component": "device_auth", "features":[] },{ "component": "huks", "features":["disable_huks_binary = false","disable_authenticate = false","huks_use_lite_storage = true","huks_use_hardware_root_key = true","huks_config_file = \"hks_config_lite.h\"","ohos_security_huks_mbedtls_porting_path = \"//device/soc/hisilicon/hi3861v100/sdk_liteos/third_party/mbedtls\""]}]},{"subsystem": "startup","components": [{ "component": "bootstrap_lite", "features":[] },{ "component": "syspara_lite", "features":[] },{ "component": "init_lite", "features":["enable_ohos_startup_init_feature_begetctl_liteos = true","enable_ohos_startup_init_lite_use_thirdparty_mbedtls = true"]}]},{"subsystem": "communication","components": [{ "component": "wifi_lite", "features":[] },{ "component": "dsoftbus", "features":[] },{ "component": "wifi_aware", "features":[]}]},{"subsystem": "updater","components": [{ "component": "ota_lite", "features":[] }]},{"subsystem": "commonlibrary","components": [{ "component": "file", "features":[] }]},{ "subsystem": "xts", "components": [ { "component": "xts_acts", "features":["enable_ohos_test_xts_acts_use_thirdparty_lwip = false"] }, { "component": "xts_tools", "features":[] }, { "component": "device_attest_lite", "features":[] }]}],"third_party_dir": "//device/soc/hisilicon/hi3861v100/sdk_liteos/third_party","product_adapter_dir": "//vendor/hisilicon/hispark_pegasus/hals"}将hispark_pegasus下的hal/utils复制到我们自己的产品解决方案中。
创建BUILD.gn文件编写编译脚本。
group("product"){}编译检验
执行hb set命令,观察产品解决方案。
完成编译。
烧录测试
选择我们的产品解决方案product。
串口调试,观察控制台输出。
产品解决方案总结
结束语
希望能够帮助到大家,对OpenHarmony的编译过程有一个全面的感知。
想了解更多关于开源的内容,请访问:
51CTO开源基础软件社区
https://ost.51cto.com
推荐系统
电脑公司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能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
相关文章
- Win8系统的搜索技巧怎样用
- 什么是Project Reunion 0.5?微软最新发布的Project Reunion 0.5是什么?
- 系统之家windows7 64位旗舰x86最新系统推荐
- Win10专业版无法打开内置应用怎么处理?
- 雨林木风w7镜像最新系统推荐
- 深度技术win764位硬盘版安装版最新系统推荐
- win11可不可以用xbox手柄【详解】
- WinXP进行磁盘碎片整理的2种办法
- Win11怎么查看电脑显卡温度?Win11查看显卡温度方法汇总
- win8电脑无损分区的操作步骤
- 戴尔dell预装win10怎么改win7系统
- 小白一键重装系统u盘启动软件怎么用
- u盘装win7系统
- 腾讯电脑管家怎么开启加速小火箭?腾讯电脑管家开启加速小火箭教程
- 怎样关闭win8系统下IIS服务器
- Win8系统开机蓝屏错误代码0xc000000f如何修复?
- 微软 Edge Dev 浏览器 114 更新:新增组合键可隐藏 / 显示侧边栏 - IT之家
- 如何用scp封装win7
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 5雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 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镜像免费下载
热门文章
常用系统
- 1深度技术Ghost Win10 X64 完美专业版 v2023.05免费最新下载
- 2番茄花园 Windows 10 极速企业版 2019年10月(32位) ISO镜像快速下载
- 3电脑公司 GHOST WIN10 X64 极速体验版 V2018.11 下载
- 4番茄花园 GHOST WIN7 SP1 X86 官方修正版 V2023.01 (32位) 下载
- 5win11纯净版免激活64位下载-win11纯净版免激活64位最新下载
- 6雨林木风win10最新64位热门纯净版 v2023.04免费下载
- 7雨林木风 Ghost WinXP SP3 官方正式版下载_雨林木风 Ghost WinXP SP3 最新下载
- 8win7 64位装机版下载_技术员联盟 Ghost Win7 64位 旗舰装机版下载V2023.02
- 9雨林木风Ghost Win8.1 (X64) 极速纯净版2022年6月免激活) ISO镜像高速下载
- 10Ghost Win11微软原版镜像下载_Ghost Win11 22000.168测试版系统永久激活下载V2021.09