【入门到实战】OpenHarmony南向子系统开发:组件化启动

鸿蒙OpenHarmony【组件化启动】子系统init启动引导组件 确保系统参数以及启动脚本都可以按照组件的优先级进行扫描初始化; 完成系统组件和芯片组件的独立编译构建。 阅读详情

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


组件化启动

概述

功能简介

构建四个基础组件镜像,提供相应的组件化目录,包括:

  • 系统组件:system
  • 产品通用配置组件:sys_prod
  • 芯片组件:chipset
  • 产品硬件配置组件:chip_prod;

确保系统参数以及启动脚本都可以按照组件的优先级进行扫描初始化; 完成系统组件和芯片组件的独立编译构建。

基本概念

  • 基础组件

    system:系统组件文件系统挂载点,与芯片及硬件无关的平台业务; sys_prod:对系统组件的能力扩展以及能力定制,承载产品级差异能力,存放产品相关的配置文件; chipset:芯片组件文件系统挂载点,为系统组件提供统一的硬件抽象服务,相同的芯片平台可统一一份芯片组件; chip_prod:单板外设特有硬件能力以及产品级硬件差异配置, 存放芯片相关的配置文件。

  • 组件化编译构建

    通过"target_cpu" 指定系统组件的指令集;通过"inherit" 继承base、headless或者rich等通用组件集合;最后通过"subsystems" 定义该形态更多的部件。

  • 系统参数以及启动脚本按照组件的优先级进行扫描初始化

    系统参数以及启动脚本包括:服务的cfg配置文件、param文件、沙盒json配置文件以及module插件化库文件等。相关文件优先级顺序是 /system < /chipset < /sys_prod < /chip_prod,即优先级高的配置文件将取代、更新低优先级配置。

约束与限制

对于标准版本和小型系统都支持组件化编译构建,以及系统参数以及启动脚本按照组件的优先级进行扫描初始化。

开发指导

场景介绍

组件化启动主要是满足厂家、硬件平台通过模块化的组合快速实现产品开发。以下以rk3568产品为例介绍组件化启动。

rk3568产品的组件化构建编译

//vendor/hihope/rk3568/config.json 配置文件实现构建此产品需要的组件,如下所示:

    {
      "product_name": "rk3568",
      "device_company": "rockchip",
      ...
      "target_cpu": "arm",
      ...
      "inherit": [ "productdefine/common/inherit/rich.json", "productdefine/common/inherit/chipset_common.json" ],
      "subsystems": [
        {
          "subsystem": "security",
          "components": [
            {
              "component": "selinux",
              "features": []
            }
          ]
        }
      ...
    }

从中可以看出产品名称、芯片厂家、支持的指令集等;inherit指出依赖的通用组件;subsystems指出通用组件以外的部件。 //productdefine/common/inherit/rich.json 如下所示配置系统组件完整的部件;系统组件还可以包括base.json(所有产品都要包含的最小部件集合列表)、headless.json(没有ui界面的产品支持应用安装管理的最小部件集合)。

{
  "version": "3.0",
  "subsystems": [
  {
    "subsystem": "arkui",
    "components": [
      {
        "component": "ace_engine",
        "features": []
      },
      {
        "component": "napi",
        "features": []
      }
    ]
  },
  {
    "subsystem": "account",
    "components": [
      {
        "component": "os_account",
        "features": []
      }
    ]
  },
  ...
}

系统参数根据优先级扫描初始化

对于服务的cfg配置文件优先级是/system/etc < /system/etc/init < /chipset/etc,即优先级高的配置文件将取代、更新低优先级配置。例如/system/etc/init/camera_service.cfg,

  {
    "services" : [{
        "name" : "camera_service",
        "path" : ["/system/bin/sa_main", "/system/profile/camera_service.xml"],
        "uid" : "cameraserver",
        "gid" : ["system", "shell"],
        "secon" : "u:r:camera_service:s0",
        "permission" : ["ohos.permission.GET_SENSITIVE_PERMISSIONS"],
        "permission_acls" : ["ohos.permission.GET_SENSITIVE_PERMISSIONS"]
    }]
  }  

同时存在/chipset/etc/camera_B_service.cfg

   {
    "services" : [{
        "name" : "camera_service",
        "path" : ["/system/bin/sa_main", "/system/profile/camera_B_service.xml"],
        "uid" : "cameraserver",
        "gid" : ["system", "shell"],
        "secon" : "u:r:camera_service:s0",
        "permission" : ["ohos.permission.GET_SENSITIVE_PERMISSIONS"],
        "permission_acls" : ["ohos.permission.GET_SENSITIVE_PERMISSIONS"],
        "disabled" : 1
    }]
  }  

那么根据优先级的要求,camera_service服务"path"属性将会被优先级高的[“/system/bin/sa_main”, “/system/profile/camera_B_service.xml”]取代,同时增加"disabled"属性。

鸿蒙南向开发环境的搭建(OpenHarmony) 在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual StudioCode进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此,建议使用Ubuntu的编译环境对源码进行编译。 阅读详情

相关推荐

鸿蒙OpenHarmony【bootstrap服务启动组件】子系统init启动引导组件

bootstrap服务启动组件实现了服务的自动初始化,即服务的初始化函数无需显式调用,而是将其使用宏定义的方式申明,就会在系统启动时自动被执行。实现原理是将服务启动的函数通过宏定义的方式申明之后,放在预定义好的zInit代码段中,系统启动的时候调用OHOS_SystemInit接口遍历该代码段并调用其中的函数。因此,需要在链接脚本中添加zInit段,并且在main函数里调用OHOS_SystemInit接口。

woshishei9527的博客 515

【入门到实战】OpenHarmony南向设备开发:标准系统方案之扬帆移植案例

本文介绍了系统移植的整体方案,包括Board仓和SoC代码的分离设计,以及产品配置的详细说明。

Androidbye的博客 885

OpenHarmony开发实战:驱动子系统

OpenHarmony驱动子系统采用C面向对象编程模型构建

DMZDAMS的博客 1205

开发板如何适配OpenHarmony 3.2

编译脚本会先把kernel/linux/linux-5.10拷贝到out/kernel/src_tmp/linux-5.10/,然后打上3568的内核补丁patch -p1 < kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch后编译生成自己的镜像,不利于我们开发,我们自己开发过程中做如下修改,这样方便我们开发过程中的修改。

OpenHarmony_dev的博客 3759

OpenHarmony南向设备开发:子系统HDF驱动开发流程

HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。

初一十五的博客 1064

鸿蒙OpenHarmony【HDF驱动开发流程】 子系统

HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发和部署更加规范,旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的驱动管理的开发环境,力求做到一次开发,多系统部署。

CS9527DND的博客 1220

OpenHarmony子系统开发 - init启动引导组件(六)

组件化启动主要是满足厂家、硬件平台通过模块化的组合快速实现产品开发。以下以rk3568产品为例介绍组件化启动。日志的基本功能就是记录init启动中的关键节点,以及定位故障问题。基于日志可以定位故障问题,可以查看各子系统启动时长,命令执行时长等。可以查看不同模块的日志tag,如param、uevent、module等。输出关键阶段日志,如第一阶段启动日志、required partition设备节点、uevent创建日志、服务启动日志等。

__Benco的博客 1160

【FPGA】Robei EDA 的使用(7)—— Robei文件上板试验

#沐朝露兮以自华,觅大道兮以求成 我又滚过来了,研究了20多天RISCV,结果最后因为硬件问题导致无法在比赛中使用RISCV CPU,虽然已经临近比赛后期了,非常的崩溃,但是也没有什么办法。唉,一切不过是从头再来罢了。(写写博客舒缓我心中苦闷) ————————————————进入正文的分割线———————————————— 今天介绍一下如何利用 Robei EDA 生成文件,导入vivado中,综合下载到开发板里。拿我一个PWM控制舵机的代码为例。 Robei EDA设置 假设代码模块(model文件)经

Ninquelote的博客 2561

OpenHarmony 南向开发实战——编译构建框架

OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能:以部件为最小粒度拼装产品和独立编译。支持轻量、小型、标准三种系统的解决方案级版本构建,以及用于支撑应用开发者使用IDE开发的SDK开发套件的构建。支持芯片解决方案厂商的灵活定制和独立编译。编译子系统通过配置来实现编译和打包,该子系统主要包括:模块、部件、子系统、产品。

m0_70748458的博客 554

LS-DYNA壳单元冲击仿真中的5个关键设置:以方管碰撞为例(含沙漏控制参数)

本文以方管碰撞为例,深入解析了LS-DYNA壳单元冲击仿真中的五个关键设置。重点探讨了沙漏控制参数(如IHQ=4)的选择逻辑、自接触算法优化、能量监控方法、材料模型(MAT_24)的真实应力-应变曲线与应变率效应设置,以及单元公式的选取。这些核心设置共同决定了仿真的精度与效率,是确保方管冲击仿真结果可靠性的基石。

salt的博客 624

手机直连卫星上网,3GPP R17/R18到底做了哪些技术升级?(IoT/NR NTN详解)

本文深入解析了3GPP R17/R18标准中手机直连卫星上网的技术升级,重点介绍了IoT NTN与NR NTN两项关键技术。R17通过星历辅助补偿算法和多普勒频移控制,实现了智能手机直连卫星的突破;R18则进一步优化移动性、支持高频段和星上本地交换,提升用户体验。这些技术为物联网和5G/6G通信开辟了新可能。

weixin_33701251的博客 617

OpenHarmony驱动子系统

OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。为了缩减驱动开发者的驱动开发周期,降低三方设备驱动集成难度,OpenHarmony驱动子系统支持以下关键特性和能力。弹性化的框架能力:在传统的驱动框架能力的基础上,OpenHarmony驱动子系统通过构建弹性化的框架能力,可支持在百K级别到百兆级容量的终端产品形态部署。

__Benco的博客 1257

如何使用Calibre PERC抽出 点到点/p2p 电阻

@[TOC](如何使用Calibre PERC抽点到点(p2p)电阻) 一、前言 需要实现的功能是从gds中抽出net的点到点的电阻。如下图这样。 二、准备工作 lvs rule pex rule(必要时可以自己定义RC rule) gds p2p点的坐标 定义prode.defs 因为p2p的点是变化的,所以每次prode定义都要重新出,对应的perc rule也是根据每个p2p点的定义来的,perc rule也是每次都要重新出。如果需要可以写一个脚本自动出这些定义文件。 PROBE_POINTS

kobayashiyou的博客 1万+

OpenHarmony驱动子系统概述

本文简要介绍了OpenHarmony中的驱动子系统,包括:驱动子系统在鸿蒙系统中的位置、到那里去查阅驱动子系统的源码和官方文档,以及驱动子系统的核心——HDF驱动框架。

随遇而安的dandelion的博客 2534

配置权重_高盛都在用的资产配置模型,BL贝叶斯框架改进Markowitz

前面我们说到,markoviz的均值-方差模型,第一次,用数学的方式严格证明了投资组合存在最优的权重,但它的学术意义大于实战。主要原因有两个:1,人们很难有效的预测期望收益率;2,最优资产组合配置对输入非常敏感,结果往往难以被人理解。还有就是在投资中,定量只是完成初步构建,同步的定性判断依然非常重要:第一,投资者的认知偏好:倾向于关注他们认为被低估,但有发展潜力或者可以确定相对交易价值的小部分股票...

weixin_39892309的博客 715

12S BMS 核心设计:基于 STM32H743+BQ34Z100 的 SOC/SOH 实现与全链路技术解析(上)

本文详细介绍了基于STM32H743和BQ34Z100的12串锂电池管理系统(BMS)设计。该系统采用主控制器+专用电量监测计架构,可实现高精度SOC(±1%)和SOH(±2%)估算,支持36V-50.4V电压范围。硬件设计包括电压/电流采样、温度测量、保护电路等模块,软件实现基于HAL库开发,采用DMA方式提高I2C通信效率。系统通过TI专利的ImpedanceTrack™算法实现三维融合估算,并具备完善的保护功能。该设计适用于电动工具、轻型电动车等中功率设备,具有精度高、响应快。

bother3000的博客 1392

探秘鸿蒙南向开发:Hi3861 架构、编译与实战全解析

从一行代码到一套系统,从点亮一盏灯到驱动一块屏幕,OpenHarmony 的南向开发虽然有一定的学习门槛,但其分层解耦、组件化的设计思想,为万物互联时代提供了无限可能。布道师的最后叮嘱:鸿蒙南向开发的核心在于三个“转变”——从main到SYS_RUN的入口思维转变,从 Makefile 到 GN/Ninja 的构建思维转变,从单线程轮询到多任务并发的并发思维转变。跨过这三道门槛,你便真正推开了鸿蒙设备开发的大门。🚀。

dingyuana的专栏 411

自主探索型AI Agent:LLM驱动的好奇心与学习动机

随着人工智能技术的飞速发展,传统的AI系统往往依赖于预设的规则和大量的标注数据,其自主学习和适应新环境的能力有限。自主探索型AI Agent旨在打破这种局限,能够在复杂、未知的环境中自主地进行探索、学习和决策。本文的目的是深入研究在大语言模型(LLM)驱动下,AI Agent如何产生好奇心和学习动机,以及如何实现自主探索的能力。范围涵盖了核心概念、算法原理、数学模型、项目实战、应用场景等多个方面,为读者提供一个全面的技术视角。本文将按照以下结构进行阐述:首先介绍相关背景知识,包括目的、读者和文档结构;

大模型应用工坊 997

OpenHarmony 实战开发之内核层解析~

OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件。

2501_91726491的博客 1151

Android Framework AudioFlinge 面试题及参考答案

请解释什么是 AudioFlinger? AudioFlinger 是 Android 音频系统中的一个关键服务。它位于 Android 系统的中间层,是连接上层应用和底层音频硬件驱动的重要桥梁。从功能角度来讲,它主要负责音频数据的混合(Mix)以及输出(Output)。 当多个应用程序同时播放音频时,比如一个音乐播放器在播放歌曲,同时手机的闹铃响起,AudioFlinger 就会发挥它的混合功能。它会把这些不同来源的音频数据按照一定的规则和算法混合在一起。这种混合并不是简单的相加,而是要考

大模型大数据攻城狮的专栏 1574

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HarmonyOS鸿蒙开发入门:OpenHarmony开源项目

OpenHarmony开源项目 项目介绍 技术架构 技术特性 系统类型 详细特征 快速入门 代码仓地址 开发者文档 源码下载 如何参与 许可协议 联系方式 View English 项目介绍 OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。 技术架构 OpenHarmony整体遵从分层设计,从下

月梦工作室 3091

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

什么是OpenHarmony?

通过阅读本文内容让大家对OpenHarmony有个初步的认识。

3909

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

系统架构设计——OpenHarmony系统简介

主要是介绍OpenHarmony 鸿蒙-面向全场景的分布式操作系统的新的技术点和一些新的概念,同时学习OpenHarmony 鸿蒙-面向全场景的分布式操作系统的具体的使用了开发。

庄小焱 9775

【华为ICT大赛】OpenHarmony操作系统概述

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1866

OpenHarmony开源项目

项目介绍 OpenHarmony是开放原子开源基金会(OpenAtom Foundation)旗下开源项目,定位是一款面向全场景的开源分布式操作系统。 OpenHarmony在传统的单设备系统能力的基础上,创造性地提出了基于同一套系统能力、适配多种终端形态的理念,支持多种终端设备上运行,第一个版本支持128K~128M设备上运行,欢迎参加开源社区一起持续演进。针对设备开发者,OpenHarmony采用了组件化的设计方案,可以根据设备的资源能力和业务特征进行灵活裁剪,满足不同形态的终端设备对于操作系统的要

鹿鸣天涯 4564

Flutter for OpenHarmony 进阶实战:打造 60FPS 流畅的物理切水果游戏

Flutter 进阶实战:打造 60FPS 流畅的物理切水果游戏

2501_93573294的博客 1210
上一篇: 【入门到实战】OpenHarmony南向子系统开发:插件
下一篇: 【入门到实战】OpenHarmony南向子系统开发:init运行时日志规范化
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值