OpenHarmony开发者论坛

标题: 请问OpenHarmony是如何实现非必须功能组件可裁剪的? [打印本页]

作者: with_    时间: 2024-3-15 16:52
标题: 请问OpenHarmony是如何实现非必须功能组件可裁剪的?
[md]OpenHarmony的一大特点是可根据实际需求裁剪掉非必要的组件,请问OH是如何实现可裁剪掉非必须组件却又不影响其他功能实现这一功能的?
![微信图片_20240315165205.jpg](https://forums-obs.openharmony.c ... 8cfjrqaa6j6aci4.jpg "微信图片_20240315165205.jpg")
[/md]
作者: dragon    时间: 2024-3-15 17:54
标题: 请问Open Harmony是如何实现非必须功能组件可裁剪的?
这个问题涉及到了OH的编译构建系统,和编译构建系统的配置规则。

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



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



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



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



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


(, 下载次数: 1)

源码目录树

(, 下载次数: 0)

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



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

(, 下载次数: 1)


组件的编译目标(编译入口):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
回复 dragon: 但是在实际裁剪某一子系统以后,编译时其它的子系统会报错?请问这种情况如何解决
作者: dragon    时间: 2024-3-25 09:54
回复 nanfengchuiyeluo: 这种情况表明子系统的组件之间是有依赖的哈,您可以在ci.OpenHarmony.cn查询到依赖关系。




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5