当前位置: 首页 > news >正文

OpenHarmony自定义子系统、部件与模块

在这里插入图片描述
如图所示,OpenHarmony系统源码中,大体上按照不同种类的功能分成多个子系统,然后一个子系统内部进一步在同类功能上的差异性划分成一个或多个部件,也就是说一个部件表示一个具体功能的源码集合。最后一个部件的源码再划分成一个或多个模块,一个模块可以是静态库、动态库或可执行程序等。
例如,在系统的multimedia子系统的描述:
在这里插入图片描述
multimedia子系统所属部件的描述:
在这里插入图片描述
其中media_lite部件所属模块的描述:
在这里插入图片描述
每个模块最终由目录下的BUILD.gn文件配置编译,指定编译目标、由哪些源文件组成、头文件所在路径等。

大体清楚子系统、部件与模块的关系后,在OpenHarmony系统源码中进行自定义操作,目标:增加了一个aSubSys子系统,此子系统中有一个myhello部件,然后此部件由mytest与mytest2模块组成。如图所示:
在这里插入图片描述
1. 增加aSubSys子系统的声明
子系统配置参考:https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/subsystems/subsys-build-subsystem.md
在OpenHarmony源码目录下创建aSubSys文件夹,用于作为子系统的根目录。然后打开build/subsystem_config.json,在文件尾增加aSubSys子系统的描述如下:
在这里插入图片描述
其中"path"项用于指定子系统在OpenHarmony系统源码中的目录路径。
2. 编译与使用子系统
产品子系统配置参考:https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/subsystems/subsys-build-product.md
子系统声明后,并不表示在OpenHarmony系统中产生作用,此子系统是否生效,还需要在编译产品目标的配置文件,指定使用此子系统与子系统的部件组成。
如编译目标为ipcamera_hispark_taurus@hisilicon,则修改vendor/hisilicon/hispark_taurus/config.json产品配置文件
如编译目标为qemu_small_system_demo@ohemu,则修改vendor/ohemu/qemu_small_system_demo/config.json产品配置文件
增加子系统的描述如下:
在这里插入图片描述
其中"subsystem"项指定使用子系统,"components"项用于指定此子系统的部件组成。
3. 在子系统中增加部件
部件配置参考:https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/subsystems/subsys-build-component.md
在aSubSys目录下创建任意名的一个文件夹,如mydir。然后在此文件夹中创建bundle.json文件描述myhello部件的模块组成,文件内容如下:

{
    "name": "@ohos/myapp",
    "description": "myapp samples.",
    "version": "3.1",
    "license": "Apache License 2.0",
    "publishAs": "code-segment",
    "segment": {
        "destPath": "aSubSys/mydir"  #指定部件路径
    },
    "dirs": {},
    "scripts": {},
    "component": {
        "name": "myhello",     #指定部件名
        "subsystem": "aSubSys", #指定所属子系统
        "syscap": [],
        "features": [],
        "adapted_system_type": [
            "small"  #指定支持OpenHarmony系统的类型
        ],
        "rom": "",
        "ram": "",
        "deps": {
            "components": [
            ],
            "third_party": [
            ]
        },
        "build": {
            "sub_component": [  #指定部件的模块组成
                "//aSubSys/mydir/mytest:mytest",  #指定模块BUILD.gn文件的路径:编译目标
                "//aSubSys/mydir/mytest2:mytest2"
            ],
            "inner_kits": [],
            "test": []
        }
    }
}

4. 在部件中增加mytest模块
模块配置参考:https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/subsystems/subsys-build-module.md
在aSubSys/mydir目录下创建mytest文件夹,然后再在mytest文件夹里创建main.c源文件,源文件内容如下:

#include <stdio.h>


int main(int argc, char *argv[])
{
    printf("hello mytest\n");
    return 0;
}

然后在mytest文件夹中再创建BUILD.gn编译配置文件,并输入文件内容如下:

import("//build/ohos.gni")
ohos_executable("mytest") { #指定编译生成一个mytest可执行程序
  sources = ["main.c"] #指定源文件组成
  include_dirs = []   #指定头文件路径
  part_name = "myhello"  #指定所属部件名
}

5. 在部件中增加mytest2模块
在aSubSys/mydir目录下创建mytest2文件夹,然后再在mytest2文件夹里创建main.c源文件,源文件内容如下:

#include <stdio.h>


int main(int argc, char *argv[])
{
    printf("hello mytest222\n");
    return 0;
}

然后在mytest2文件夹中再创建BUILD.gn编译配置文件,并输入文件内容如下:

import("//build/ohos.gni")
ohos_executable("mytest2") { #指定编译生成一个mytest2可执行程序
  sources = ["main.c"] #指定源文件组成
  include_dirs = []   #指定头文件路径
  part_name = "myhello"  #指定所属部件名
}

6. 测试与使用
重新编译OpenHarmony系统源码,编译完成时可查看到子系统的编译信息,如图所示:
在这里插入图片描述
系统运行后,可在bin目录下查看到mytest与mytest2两个可执行程序文件,执行后输出信息如下:
在这里插入图片描述

http://www.dtcms.com/a/68559.html

相关文章:

  • 31、map deque list的实现原理【中高频】
  • DeepSeek 助力 C++ 开发:探索智能编程新境界
  • 数字电路 | 触发器 / 单稳态触发器 / 双稳态触发器
  • 【论文解读】Contrastive Learning for Compact Single Image Dehazing(AECR-Net)
  • 【Linux】从互斥原理到C++ RAII封装实践
  • 蓝桥每日打卡--背包问题
  • Dask:Python高效并行计算利器
  • 基于Asp.net的物流配送管理系统
  • 学习15天:pytest
  • redis工具类
  • OpenCV实现图像特征提取与匹配
  • 【论文阅读方法】沐神课程:如何读论文
  • C#—线程池详解
  • 下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?
  • DBeaver部分操作指南(数据库连接,构造ERD图,格式化SQL)
  • Navicat for Snowflake 震撼首发,激活数据仓库管理全新动能
  • SHAP值理论(二)
  • ffmpeg 添加毫秒时间戳
  • Spring 中 SmartInitializingSingleton 的作用和示例
  • 无需微调的对齐方法URIAL
  • Android安全支付-整体架构-KeyStore2-APP到Framework层的调用
  • Vmware下的openEuler
  • Docker相关面试题
  • 算法沉淀五:位运算
  • 【Python 数据结构 15.哈希表】
  • JVM 2025/3/14
  • python-54-使用环境变量库python-dotenv进行应用程序配置参数的管理
  • 红色警戒2:共和国之辉红警语音台词是什么?
  • 【Vue.js】
  • docker python:latest镜像 允许ssh远程