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

如何向OpenHarmony中编译构建自己的子系统、部件和模块 阅读详情
AI摘要

OpenHarmony系统源码按功能分为子系统、部件和模块。本文介绍了三者关系,并详细阐述在系统源码中自定义操作,包括增加aSubSys子系统声明、编译与使用子系统、在子系统中增加部件、在部件中增加mytest和mytest2模块,最后进行测试与使用。

在这里插入图片描述
如图所示,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两个可执行程序文件,执行后输出信息如下:
在这里插入图片描述

openharmony-基础篇-模块配置规则 模块编译 阅读详情

相关推荐

【OpenHarmony】L0L1 添加子系统/组件

在openharmony项目代码里,可暂时随意位置存放你创建的子系统代码。写完新增子系统的代码后,需要在新增的代码目录下添加BUILD.gn文件。这里创建叫做"myhello"的子系统,组件名叫"hello_test"。注意:build/lite/components编译组件已弃用,被弃用的编译组件是OpenHarmony3.0前使用。项目自定义存放路径 / myhello├── src # 源文件存放目录├── include # 头文件存放目录。

Kemin123的博客 1794

【OpenHarmony】标准系统 新增子系统/部件

标准系统新增部件

Kemin123的博客 1410

OpenHarmony构建体系:手把手教你新增自定义子系统、部件与模块

在大型操作系统开发中,构建体系的模块化设计是支撑多样化设备形态的关键。通过将系统功能划分为子系统、部件与模块,开发者能够按需裁剪和组合,实现产品级定制。理解这套分层机制,不仅有助于掌控源码结构,还能在编译流程中灵活运用构建工具(如hb、GN)精准定位目标任务。在实际开发中,无论是新增一个硬件适配层,还是扩展系统服务,都需要从配置子系统、声明部件到定义模块逐步落地。本文围绕OpenHarmony源码,详细拆解subsystem_config.json、bundle.json、BUILD.gn及产品配置之间的协

weixin_34116482的博客 226

OpenHarmony添加自定义的子系统、部件、模块

这里我们将OpenHarmony的两个例子添加到源码中并使其编译到系统中,这里有一点需要注意的是不可以将自定义的子系统放到其他已经定义的子系统目录下,vendor下的product文件夹也被认为成一个子系统,比如/就作为product_hihope子系统存在的,其定义在/

weixin_44205232的博客 4397

OpenHarmony构建系统-GN与子系统、部件、模块理论与实践

..# 注:以上...}代表内容放在文件最后一级}下subsystem_config.json文件此处的"subsystem": "mycomptest"为bundle.json中的"subsystem": "mycomptest...注:以上...]}代表以上内容放在文件中最后一级数组中config.json文件中此处的"subsystem":"mycomptest"为subsystem_config.json文件中的"name": "mycomptestcompdemo1。

程序课代表的博客 1928

OpenHarmony自定义子系统开发实战:从零构建到产品集成

本文详细介绍了OpenHarmony自定义子系统开发的完整流程,从环境搭建到产品集成。通过智能家居控制子系统的实战案例,解析了子系统、部件和模块的层级关系,提供了代码示例和常见问题解决方案,帮助开发者快速掌握OpenHarmony的模块化开发技巧。

weixin_29295541的博客 270

OpenHarmony自定义子系统与部件实践指南

系统级软件开发中,构建系统的可扩展性决定了产品的定制效率。OpenHarmony作为开源操作系统,其构建体系采用GN+Ninja,并通过hb工具统一入口。理解子系统、部件与模块三者的层级关系,是进行系统裁剪与功能扩展的基础。在实际工程中,开发者常需根据硬件特性或业务需求新增独立的子系统与部件,以实现按需编译、镜像安装等精细化控制。通过合理编写bundle.json定义部件清单,配置config.json完成产品挂载,再借助BUILD.gn描述编译规则,即可将自定义模块无缝集成到OpenHarmony构建流程

weixin_30225755的博客 236

鸿蒙OpenHarmony【部件编译构建规范】子系统

编译构建是部件化设计落地的切入点,一个优秀的部件在编译态应该具备可维护、可移植、低耦合的特征。本规范用于引导部件开发人员编写符合部件化设计的编译脚本,使得部件在编译态依赖合理、可配置、可复用、可裁剪。

zxc95279527q的博客 930

OpenHarmony子系统开发 - 部件配置规则

将部件添加到产品配置中。在产品的配置中添加部件,产品对应的配置文件://vendor/{product_company}/{product-name}/config.json。示例部件partA的配置需要添加到一个子系统中,本次示例将添加到subsystem_examples子系统中(subsystem_examples子系统定义在test/examples/目录)。部件配置中需要配置部件的名称、源码路径、功能简介、是否必选、编译目标、RAM、ROM、编译输出、已适配的内核、可配置的特性和依赖等属性定义。

__Benco的博客 1101

鸿蒙南向设备开发(OpenHarmony)子系统部件配置规则

通过build仓下的subsystem_config.json可以查看所有子系统的配置规则。

WEZC156465的博客 1222

鸿蒙OpenHarmony【编译构建】子系统

OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统

zxc95279527q的博客 1575

openharmony 北向开发基础:ohos自定义子系统,自定义部件,调用hilog部件,hilog日志封装傻瓜式教程

为了客服上述单部件创建的so库无法被另一部件gn模板调用的问题,本章节讲解如何使用部件间依赖首先用白话描述下几个关键名词子系统:子系统是一个逻辑上的概念,是鸿蒙模块化构建的第一层,由若干个部件组成,在形式上表现为一个子系统文件夹内部有多个部件文件夹,子系统目录的位置一般为源码根目录,在//build/subsystem_config.json 中可以增删编辑你需要的子系统。

她的吻让他 1979

OpenHarmony 源码构建体系--跨部件调用

OpenHarmony使用BUILD.gn 和bundle.json体现源码构建编译关系,本文举例说明同一子系统不同部件之间的动态调用和不同子系统之间的动态库调用。以更进一步数据OpenHarmony 源码的结构和编译体系。

navy2015_163的博客 1741

​OpenHarmony子系统开发 - 部件编译构建规范​

编译构建是部件化设计落地的切入点,一个优秀的部件在编译态应该具备可维护、可移植、低耦合的特征。本规范用于引导部件开发人员编写符合部件化设计的编译脚本,使得部件在编译态依赖合理、可配置、可复用、可裁剪。

__Benco的博客 1375

鸿蒙OpenHarmony开发板解析:【 模块配置规则】

编译子系统通过模块、部件和产品三层配置来实现编译和打包。模块就是编译子系统的一个目标,包括(动态库、静态库、配置文件、预编译模块等)。模块要定义属于哪个部件,一个模块只能归属于一个部件。OpenHarmony使用定制化的Gn模板来配置模块规则,Gn语法相关的基础知识请参考。ohos开头的模板与内建模板的差异主要在于:推荐使用ohos定制模板。

m0_62167422的博客 2789

从脑电到脑机接口:EEG/ERP特征如何驱动你的下一个智能硬件项目(Arduino/树莓派实战)

本文详细介绍了如何利用EEG/ERP特征提取技术驱动智能硬件项目,涵盖从脑电信号采集到脑机接口实现的完整流程。通过Arduino和树莓派实战,展示了P300、N400等事件相关电位的应用,帮助开发者将学术理论转化为可编程的交互指令,适用于智能家居、医疗辅助等领域。

weixin_29279047的博客 382

OpenHarmony子系统开发 - 模块配置规则

编译子系统通过模块、部件和产品三层配置来实现编译和打包。模块就是编译子系统的一个目标,包括(动态库、静态库、配置文件、预编译模块等)。模块要定义属于哪个部件,一个模块只能归属于一个部件。OpenHarmony使用定制化的Gn模板来配置模块规则,Gn语法相关的基础知识请参考。ohos开头的模板与内建模板的差异主要在于:推荐使用ohos定制模板。

__Benco的博客 1626

Windows系统的Mamba环境配置详细教程(状态空间模型)

causal_conv1d也是安装mamba的依赖必须库。安装完成后,通过pip list可以查看到安装的库。Triton是安装mamba的依赖,需要先安装。上述工作准备好后,按下面步骤安装。直接根据离线文件安装即可。是自己的虚拟环境名字。

2301_77831163的博客 3674

鸿蒙OpenHarmony【部件配置规则】子系统

部件的bundle.json放在部件源码的根目录下。以泛sensor子系统的sensor服务部件为例,

zxc95279527q的博客 1197

01-系统技术架构师必备——软件架构设计基础与核心概念

摘要 本文系统阐述了软件架构设计的核心概念与方法论,重点涵盖以下内容:1)软件架构的四大要素(构件、连接件、约束、配置)及其边界划分;2)Garlan & Shaw五大架构风格(数据流、调用/返回、独立构件、虚拟机、仓库)的典型应用场景;3)基于电商库存系统的架构选型实战案例,展示如何根据业务需求(高并发、最终一致性)选择事件驱动架构配合Saga模式;4)介绍ABSD、DSSA等主流架构方法论及ISO/IEEE标准体系。文章融合金融与互联网领域的架构实践经验,为技术架构师提供系统性的知识框架和决策参考。

模界 | AI工程化实践者 181

ArcGIS笔记2_如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系

本博文则主要讲解,如果我们手里拿到的shp文件是在ArcGIS中,如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系。

晏长街的博客 4万+
上一篇: OpenHarmony 编译运行qemu模拟设备
下一篇: OpenHarmony增加应用程序到现成子系统的部件中
jklinux
博客等级 码龄10年 1060粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值