OpenHarmony之轻量系统编译构建流程

2023-11-17

首先我们先来熟悉几个概念:

- 子系统

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

- 组件

系统最小的可复用、可配置、可裁剪的功能单元。组件具备目录独立可并行开发、可独立编译、可独立测试的特征。

- gn

Generate ninja的缩写,用于产生ninja文件。

- ninja

ninja是一个专注于速度的小型构建系统。

- hb

OpenHarmony的命令行工具,用来执行编译命令。

hb 命令

hb 的源代码在build/lite/hb路径下,其入口函数为__main__.py中的main()。
hb 支持以下命令:
set 构建配置
env 显示构建配置变量
build 编译
clean 清空编译输出
build/lite/hb_internal中有各个命令的具体实现
在这里插入图片描述set和build比较重要,首先来看一下set命令:

hb set

hb set的作用是生成产品配置文件,执行后会在根目录下生成ohos_config.json文件
在这里插入图片描述
文件内容如下:
在这里插入图片描述
代码路径为build/lite/hb/set/set.py,设备类型不改变的情况下,不需要反复执行该命令。

hb build

hb build的作用是根据配置信息生成编译指导文件build.ninja。
脚本执行过程如下:
调用 gn_build 使用 gn gen生成 *.ninja 文件
调用 ninja_build 使用 ninja -w dupbuild=warn -C 生成 *.o *.so *.bin 等最后的文件
代码路径为:build/lite/hb/build/build.py

通过对上述一些概念的理解,我们接下来说一下OpenHarmony编译所用的工具和编译实现思想:

  • 工具

1.编译链接的最上层是Python脚本,使用python脚本进行组织,可以很好的实现跨平台编译
2.除了Python外还需要GN、Ninja、GCC来构建系统。
GN作为编译逻辑部分,将各级子系统和组件组织起来。
Ninja作为构建中间部分,他用最简单最快速的方式将编译文件编译参数传递给编译系统。
GCC作为编译部分,通常随编译系统而变化。

  • 思路

1.执行hb 命令的Python脚本,读取开发板配置:主要包括开发板使用的编译工具链、编译链接命令和选项等。
读取的主要配置文件有

Build\lite\ohos_var.gni:定义使用于所有组件的全局变量。

device{company}{board}\config.gni:这是编译 LiteOS_A 内核所需要用到的配置。

vendor{company}{board}\config.json:这是开发板提供的产品全量配置表:子系统、组件列表等等。

通过 hb build 传进去的参数,比如 -n 表示编译 NDK,则会将 ohos_build_ndk 变量由默认的 FALSE 改为 TRUE。

2.调用 gn:调用 gn gen 命令,读取产品配置(主要包括开发板、内核、选择的组件等)生成解决方案 out 目录和 ninja 文件。

3.调用 ninja:调用 ninja -C out/company/product 启动编译。

4.系统镜像打包:将组件编译产物打包,制作文件系统镜像。

build/lite/BUILD.gn 这个文件中的 group(“ohos”) 的分解,最终得到"ohos"的完整的依赖关系
在这里插入图片描述
C.调用 ninja 启动编译

这里就开始根据上一步生成的 .ninja 文件里的规则调用编译工具链来编译各目录下的源文件了,生成 .o/.a/.so/ 可执行文件 等等。

其中 .so 文件会先在 out{company}{board}\ 目录下生成,等编译完之后会转移到 out{company}{board}\libs\usr\ 目录下,还生成了 .ninja_log 和 .ninja_deps 文件。

D. 打包制作系统镜像

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenHarmony之轻量系统编译构建流程 的相关文章

  • 20220714给AIO-3568J适配OpenHarmony-v3.1-beta(编译Buildroot)

    20220714给AIO 3568J适配OpenHarmony v3 1 beta xff08 编译Buildroot xff09 2022 7 14 19 14 1 下载Buildroot的SDK xff1a https www t fi
  • 【起航】OpenHarmony远征02

    OpenHarmony内核 目前OpenHarmony针对不同量级的系统 xff0c 可以使用不同形态的内核 xff0c 轻量和小型的系统可以使用Liteos xff0c 小型和标准系统可以使用Linux Liteos系统是面向IOT领域的
  • OpenHarmony-Overview_zh

    OpenHarmony开源项目 项目介绍 OpenHarmony是开放原子开源基金会 xff08 OpenAtom Foundation xff09 旗下开源项目 xff0c 定位是一款面向全场景的开源分布式操作系统 OpenHarmony
  • 如何在Android/鸿蒙上安装XAPK文件

    How to install XAPK APK file On Android apkpure com 如何在Android 鸿蒙上安装XAPK文件 什么是XAPK文件 XAPK文件最初由APKPure创建 它是一个文件扩展名 包含单独的A
  • OpenHarmony之docker容器的基本用法

    Docker使用示例 docker移植至OpenHarmony的过程可参考 https blog 51cto com u 14601312 5692202 下面以rk3568 OpenHarmony为例 介绍一下如何进行容器制作 导入及使用
  • 基于GD32F470的mbedtls 3DES算法测试

    3DES加密算法介绍 3DES数据加密算法是一种可逆的对称加密算法 也称三重数据加密算法 3DES块加密算法的设计用来提供一种相对简单的方法 即通过增加DES的密钥长度来避免类似的攻击 而不是设计一种全新的密码算法 目前3DES作为DES的
  • 【详细深入分析OpenHarmony编译流程】

    详细深入分析OpenHarmony编译流程 前言 编译入口 源码根目录 编译命令 记录源码根目录位置 开始构建 获取python解释器 hb主程序 build模块初始化 build模块执行 build和set参数解析 参数配置文件读写 配置
  • OpenHarmony之C/C++编码风格一键格式化

    还在为编码风格调整发愁吗 掌握一键格式化代码 规范编码风格 想必是一个程序员提高工作效率的必修课 在vim中 我们可以在命令模式下输入gg G自动格式化对齐代码 在QtCreator中可以按下ctrl i自动格式化对齐代码 在eclipse
  • Openharmony的编译构建--基础篇

    一 编译构建简介 Openharmony的编译构建流程在鸿蒙的开源版本中以V3 1为分界线 流程略有变化 但其中都是ninja与python通过配置文件json 调用不同的交叉工具链来对源码进行编译 然后生成镜像文件 本文首先以Openha
  • 华为DevEco Device Tool的一个小bug及其解决方法

    今天 尝试烧录hi3516镜像遇到如下错误 正在执行任务 home vboxuser Huawei DevEco Device Tool core deveco venv bin hos run target upload project
  • OpenHarmony 3.1 Beta版本关键特性解析——OpenHarmony图形框架

    以下内容来自开发者分享 不代表 OpenHarmony 项目群工作委员会观点 李煜 华为技术有限公司 崔坤 华为技术有限公司 众所周知 动画是系统和应用与用户交互的重要环节 动画效果的好坏会直接影响用户的体验 动画效果依赖图形系统 华为作为
  • 明年,HarmonyOS不再兼容Android应用!

    2023年华为开发者大会 不知道各位老铁们是否观看了 一个震撼的消息就是 首次公开了HarmonyOS NEXT的概念 简而言之就是 这是一款专为开发者打造的预览版操作系统 旨在提供 纯正鸿蒙操作系统 的体验 与之前的版本不同 Harmon
  • 不吹不黑 OpenHarmony会是一个伟大的操作系统吗

    1 前言 大家好 我叫连志安 目前是OpenHarmony社区的一位开发者 我在2020年华为的HDC上就开始接触OpenHarmony 至今1年多了 在回答标题这个问题之前 我想起一句话 先有结论 再做论证 结论是 我认为 OpenHar
  • OpenHarmony 3.1 Beta版本关键特性解析——探秘隐式查询

    以下内容来自开发者分享 不代表 OpenHarmony 项目群工作委员会观点 徐浩 隐式查询是 OpenAtom OpenHarmony 以下简称 OpenHarmony 的一个基础能力 被广泛应用于各种应用中 如视频播放 阅读器播放等 应
  • OpenHarmony 设备启动Logo和启动视频替换指南

    前言 OpenHarmony源码版本 4 0release 开发板 DAYU rk3568 一 Logo替换 替换其中的logo bmp 和 logo kernel bmp文件 注意事项 1 图片的分辨率需要和设备匹配 2 如果是非首次编译
  • 鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Prop@Link@State状态装饰器(十二)

    文章目录 一 哪些是状态装饰器 二 State Prop Link状态传递的核心规则 三 状态装饰器练习 一 哪些是状态装饰器 1 State 被装饰拥有其所属组件的状态 可以作为其子组件单向和双向同步的数据源 当其数值改变时 会引起相关组
  • Android Retrofit 高级使用与原理

    Android Retrofit 高级使用与原理 简介 在 Android 开发中 网络请求是一个极为关键的部分 Retrofit 作为一个强大的网络请求库 能够简化开发流程 提供高效的网络请求能力 本文将深入介绍 Retrofit 的高级
  • HarmonyOS鸿蒙开发指南:容器组建 form开发指导

    目录 创建Form组件 实现表单缩放 设置Form样式 添加响应事件 场景示例 创建Form组件 在pages index目录下的hml文件中创建一个Form组件 div class container div
  • 各大厂急招鸿蒙开发员,争抢鸿蒙工程师

    去年9月 余承东宣布鸿蒙原生应用全面启动 华为开始了全面抛弃安卓的进程 多家互联网公司也发布了鸿蒙OS的App开发工程师的岗位 开启了抢人大战 有的企业开出了近百万的年薪招聘鸿蒙OS工程师 而华为甚至为鸿蒙OS资深架构师开出了100万 16
  • 独家 | 鸿蒙(HarmonyOS)开发详细学习笔记免费分享

    前言 华为宣布 将在1月18日 在北京 上海 杭州 南京 成都 厦门 武汉 长沙 8 大城市同时召开大会 届时将揭秘鸿蒙生态和 HarmonyOS NEXT 进阶新篇章 简单的来说就是 纯血鸿蒙系统 即将彻底揭晓 鸿蒙系统自推出来以来 就一

随机推荐

  • shader学习笔记(二)纹理采样

    资料参照 Unity Shader入门精要 冯乐乐 第7章 基础纹理 技术美术百人计划 图形 1 3 纹理的秘密 庄懂的技术美术入门课 美术向 直播录屏 第9课 Unity Shader 入门到改行4 最简纹理采样 1 纹理是什么 1 宏观
  • 程序员面试智力题集锦

    1 你让工人为你工作7天 给工人的回报是一根金条 金条平分成相连的7段 你必须在每天结束时给他们一段金条 如果只许你两次把金条弄断 你如何给你 的工人付费 参考答案 day1 给1 段 day2 让工人把1 段归还给2 段 day3 给1
  • 数据挖掘基础一

    一 数据挖掘 又称为数据库中知识发现 Knowledge Discovery from Database 简称KDD 它是一个从大量数据中抽取挖掘出未知的 有价值的模式或规律等知识的复杂过程 数据挖掘的定义过程描述如下图所示 从图中可以看出
  • Hessian4.0.7反序列化BigDecimal类型Bug

    Hessian虽好 bug也不少 今天遇到hessian反序列化bigdecimal类型 传入参数为121 但经序列化后却为0 问题在BigDecimal类型的应该使用BigDecimalDeserializer 在basic没有BigDe
  • 【Qt串口调试助手】1.8 - 修改Qt应用图标和窗口图标

    修改Qt应用图标和窗口图标 GitHub源码 Qt串口调试助手下载 修改应用图标 首先选择一张喜欢的图片 来作为应用图标 图片格式必须为 ico easyicon net 有很多可供下载的资源 下载好后 将其放入工程目录 之后添加到 Qt的
  • X509证书结构解析

    X509证书是采用DER编码的ASN1结构数据 Certificate SEQUENCE tbsCertificate TBSCertificate signatureAlgorithm AlgorithmIdentifier signat
  • 【技术干货】数字电路电平标准

    信号的逻辑电平经历了从单端信号到差分信号 从低速信号到高速信号的发展过程 最基本的单端信号逻辑电平为CMOS TTL 在此基础上随着电压摆幅的降低 出现LVCMOS LVTTL等逻辑电平 随着信号速率的提升又出现ECL PECL LVPEC
  • Qt 实现 360 安全卫士

    作者 一去 二三里 QQ 技术交流群 242790253 个人微信 iwaleon 加我微信 邀请入 500 人微信群 微信公众号 高效程序员 回想起来 这也算是一个有故事的代码 虽然时间比较久远 但还是记忆犹新 那就简单说说吧 也不枉费当
  • codevs代码分类总结

    由于要参加华为软件精英挑战赛 所以需要把以前做过的有关图论的问题翻出来复习一遍 但是关于图论也有很多分类 所以干脆就做一个总结 先对图论的相关题目过一遍 以后如果有时间 把其他分类的题目也过一遍 图论 也不是每个章节都做了题目 Floyd
  • Elasticsearch全文搜索与TF/IDF

    转载 https my oschina net stanleysun blog 1594220 一 TF IDF 1 TF TF Term Frequency 即词频 它表示一个词在内容 如某文章 中出现的次数 为了消除文档本身大小的影响
  • vue如何使用ueditor富文本插件

    UEditor 是由百度 FEX前端研发团队 开发的所见即所得富文本web编辑器 具有轻量 可定制 注重用户体验等特点 开源基于MIT协议 允许自由使用和修改代码 话不多说看流程 一 显示效果如下 二 首先 下载 ueditor npm i
  • Mastercam软件安装包分享(附安装教程)

    目录 一 软件简介 二 软件下载 一 软件简介 Mastercam是一款广泛应用于机械加工领域的计算机辅助设计与计算机辅助制造 CAD CAM 软件 它由美国CNC软件公司开发 旨在帮助制造商设计和制造高精度的零部件 以下是Masterca
  • java Fileread用法及注意事项

    关于其创建 还有注意事项 package IOtest test1 import org junit Test import java io File import java io FileReader import java io IOE
  • 对线性代数库Eigen3中eulerAngles函数的理解

    编写程序时有时会遇到在四元数 旋转矩阵 欧拉角之间进行转换的操作 使用eulerAngles函数从旋转矩阵中获得欧拉角 了解其使用方法才能保证转换时不出错 头文件
  • 基于双参数蜜蜂算法解决车辆路径问题(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 群智能起源于自然环境中生物群体经过长期自然
  • ffmpeg 合并转换文件_使用FFmpeg转换媒体文件的快速指南

    ffmpeg 合并转换文件 有许多开源工具可用于编辑 调整和将多媒体准确地转换为您所需的内容 诸如Audacity或Handbrake之类的工具非常出色 但有时您只想快速将文件从一种格式更改为另一种格式 输入FFmpeg FFmpeg是处理
  • 机器学习实战—利用SVD简化数据

    一 SVD的应用 奇异值分解 优点 简化数据 去除噪声 提高算法的结果 缺点 数据转换难以理解 利用SVD能够实现用小得多的数据集来表示原始数据集 这样做 实际上是去除了噪声和冗余信息 当我们视图节省空间时 去除噪声和冗余信息是目标 但是我
  • 正睿OI补题(搜索)

    搜索 目录 P1036 NOIP2002 普及组 选数 P2392 kkksc03考前临时抱佛脚 P1025 NOIP2001 提高组 数的划分 P6201 USACO07OPEN Fliptile S P1460 USACO2 1 健康的
  • linux svn新增用户名密码,Linux环境SVN添加用户账号及密码

    一 检查Svn安装版本 svn version 结果为 root iZm5e9ujl2isnk0qfeeyyhZ svn version svn version 1 7 14 r1542130 compiled Apr 11 2018 02
  • OpenHarmony之轻量系统编译构建流程

    首先我们先来熟悉几个概念 子系统 子系统是一个逻辑概念 它由一个或多个具体的组件组成 OpenHarmony整体遵从分层设计 从下向上依次为 内核层 系统服务层 框架层和应用层 系统功能按照 系统 gt 子系统 gt 组件 逐级展开 在多设