请问OpenHarmony是如何实现非必须功能组件可裁剪的?

with_ 显示全部楼层 发表于 2024-3-15 16:52:55

OpenHarmony的一大特点是可根据实际需求裁剪掉非必要的组件,请问OH是如何实现可裁剪掉非必须组件却又不影响其他功能实现这一功能的? 微信图片_20240315165205.jpg

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论3

dragon

沙发 发表于 2024-3-15 17:54:05

请问Open Harmony是如何实现非必须功能组件可裁剪的?

这个问题涉及到了OH的编译构建系统,和编译构建系统的配置规则。

这是个很大的框架,大概说一下



相关概念
子系统:一个逻辑概念,由一个或多个具体组件构成。OH系统功能按“系统 > 子系统 > 组件”逐级展开,支持裁剪子系统或组件。
组件:可复用、可配置、可裁剪的系统最小功能单元。组件目录独立,可并行开发、单独编译、单独测试。



为了实现组件、芯片解决方案、产品解决方案与OH是解耦的、可插拔(可裁剪)的,组件、芯片解决方案和产品解决方案的路径、目录树和配置需遵循一定的规则。



源码路径命名规则:{领域} / {子系统} / {组件}



源码分析:IoT外围设备控制组件(GPIO/PWM/I2C/ADC…)
领域:硬件服务子系统集(base)
子系统:IoT专有硬件服务子系统(iot_hardware)
组件:IoT外围设备控制组件(peripheral)


fakename.png

源码目录树

图片1.png

组件定义的位置(3.2-Beta1以下版本,不包含3.2-Beta1):build\lite\components\<对应子系统>.json
定义的内容:组件属性,包括名称、功能简介、是否必选、源码路径、编译目标、RAM、ROM、编译输出、已适配的内核、可配置的特性和依赖等。



IoT外围设备控制组件定义在对应子系统的json文件中:build\lite\components\iot_hardware.json

图片2.png


组件的编译目标(编译入口):build\lite\components\<子系统>.json --> targets
格式:"targets": ["路径:目标"]
路径:采用绝对路径表示,以"//"开头,从源码根目录开始。
目标:由"路径/BUILD.gn"定义



示例:"targets": ["//base/iot_hardware/peripheral:iothardware"]
路径://base/iot_hardware/peripheral
目标:iothardware



组件的编译脚本:建立BUILD.gn文件,使用gn语言



类型("目标") {
  sources = [
    ".c",
    ".c",
    …,
  ]
  include_dirs = [
    "绝对路径或相对路径",
    "绝对路径或相对路径",
    …,
  ]
}



更详细的内容可以看官网文档,也可以看书。

nanfengchuiyeluo

发表于 2024-3-24 19:12  IP属地: 广东省广州市

回复 dragon: 但是在实际裁剪某一子系统以后,编译时其它的子系统会报错?请问这种情况如何解决

dragon

发表于 2024-3-25 09:54  IP属地: 河北省廊坊市

回复 nanfengchuiyeluo: 这种情况表明子系统的组件之间是有依赖的哈,您可以在ci.OpenHarmony.cn查询到依赖关系。

【2 条回复】

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部