鸿蒙南向开发—OpenHarmony技术编译构建框架

news2025/5/28 13:08:53

概述

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

  • 以部件为最小粒度拼装产品和独立编译。
  • 支持轻量、小型、标准三种系统的解决方案级版本构建,以及用于支撑应用开发者使用IDE开发的SDK开发套件的构建。
  • 支持芯片解决方案厂商的灵活定制和独立编译。

编译子系统通过配置来实现编译和打包,该子系统主要包括:模块、部件、子系统、产品。

编译子系统的各部分关系,主要体现为:

  • 子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统。
  • 部件是模块的集合,一个模块只能归属于一个部件。
  • 通过产品配置文件配置一个产品包含的部件列表,部件不同的产品配置可以复用。
  • 部件可以在不同的产品中实现有差异,通过变体或者特性feature实现。
  • 模块就是编译子系统的一个编译目标,部件也可以是编译目标。

系统架构

编译构建子系统架构

目录结构:

SHELL
build
├── build_scripts                            # 编译相关的python脚本
├── common
├── config                                   # 编译相关的配置项
├── core
│   ├── build_scripts
│   └── gn                                    # 编译入口BUILD.gn配置
├── docs
├── gn_helpers.py
├── lite                                      # hb和preloader入口 
├── loader
├── misc
├── ohos
├── ohos.gni                                 # 汇总了常用的gni文件,方便各个模块一次性import
├── ohos_system.prop
├── ohos_var.gni
├── prebuilts_download_config.json
├── prebuilts_download.py
├── prebuilts_download.sh
├── print_python_deps.py
├── __pycache__
├── scripts
├── subsystem_config_example.json
├── subsystem_config.json
├── templates                                # c/c++编译模板定义
├── test.gni
├── toolchain                                # 编译工具链配置
├── tools                                    # 常用工具
├── version.gni
└── zip.py

编译构建流程

编译构建可以编译产品、部件和模块,但是不能编译子系统。编译构建流程如下图所示,主要分设置和编译两步:

hb set: 设置要编译的产品。

hb build: 编译产品、开发板或者部件。编译主要过程如下:

  • 读取编译配置:根据产品选择的开发板,读取开发板config.gni文件内容,主要包括编译工具链、编译链接命令和选项等。
  • 调用GN配置构建目标:调用gn gen命令,读取产品配置生成产品解决方案out目录和Ninja文件。
  • 调用Ninja:调用ninja -C out/board/product启动编译。
  • 系统镜像打包:将部件编译产物打包,设置文件属性和权限,制作文件系统镜像。

编译构建使用

环境配置

主要是安装编译所需的软件包,使用以下脚本一键安装就行:

SH
./build/build_scripts/env_setup.sh

如果出现hb安装不成功,可以重装hb,相关命令:

SH
#安装
python3 -m pip install --user build/hb


#将路径 export PATH=~/.local/bin:$PATH 更新到环境变量 ~/.bashrc


#卸载
python3 -m pip uninstall ohos-build   

编译构建

预编译

在源码根目录下执行prebuilts脚本进行预编译,安装编译器及二进制工具。

SHELL
bash build/prebuilts_download.sh

执行编译命令

使用命令行方式或hb方式执行编译命令

命令行方式

全量版本的编译

Release版本 :

SHELL
./build.sh --product-name {product_name}

Debug版本 :

SHELL
./build.sh --product-name {product_name} --gn-args is_debug=true --build-target {target_name}

hb方式

hb set

设置要编译的产品

  • hb set 后无参数,进入默认设置流程
  • hb set -root dir 可直接设置代码根目录
  • hb set -p 设置要编译的产品
  • hb env

查看当前设置信息

hb build

编译产品、部件、模块或芯片解决方案。

  • hb build 后无参数,会按照设置好的代码路径、产品进行编译,编译选项使用与之前保持一致。-f 选项将删除当前产品所有编译产品,等同于hb clean + hb build.
  • hb build {component_name}:基于设置好的产品对应的单板、内核,单独编译部件(e.g.:hb build kv_store)。
  • hb build -p ipcamera@hisilicon:免set编译产品,该命令可以跳过set步骤,直接编译产品。
  • 在device/board/device_company下单独执行hb build会进入内核选择界面,选择完成后会根据当前路径的单板、选择的内核编译出仅包含内核、驱动的镜像。

hb clean

清除 out 目录对应产品的编译产物,仅保留args.gn、build.log。清除指定路径可输入路径参数:hb clean out/board/product,默认将清除当前hb set的产品对应 out 路径。

注:更多选项可使用-h查看

更多鸿蒙实战技术学习可以前往主页,鸿蒙的学习路线思维图分享(略缩图)

高清完整版,前往主页或者四我保存,附带文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1355583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

功能介绍 | 探秘Goby功能世界:点击URL,即刻畅享快速调起之旅!

​​0x01 前言 ​我们从只会点鼠标的猴子到CtrlC,CtrlV来回切换的工具人,但有时候遇到大量需要复制的url界面,真的希望能有一个可以一键整理、一键扫描URL的功能来拯救! 好消息是,Goby从客户端版本2.8.6起,官方引入了…

5G阅信助力互联网行业:XX出行-出票通知,案例分析

XX出行日常有大量业务通知短信下发,用户触达频次和用户打开率都比较高,但原短信无法带来附加营销增值,通过阅信增值服务消息将两者结合起来,可实现业务的多渠道引流,开拓了新的渠道和方式。 项目概述: 1. 项…

均匀与准均匀 B样条算法

B 样条曲线的定义 p ( t ) ∑ i 0 n P i F i , k ( t ) p(t) \sum_{i0}{n} P_i F_{i, k}(t) p(t)i0∑​nPi​Fi,k​(t) 方程中 n 1 n1 n1 个控制点, P i P_i Pi​, i 0 , 1 , ⋯ n i0, 1, \cdots n i0,1,⋯n 要用到 n 1 n1 n1 个 k k k 次 B 样条基函数 …

Unity中URP下统一不同平台下的z值

文章目录 前言一、ComputeFogFactor 来计算雾效混合因子二、UNITY_Z_0_FAR_FROM_CLIPSPACE 来统一计算不同平台下的Z值1、DirectX平台2、GL平台下(在Unity.2022.LTS下,该功能没有完善)3、Opengl下 前言 在之前的文章中,我们实现了URP下的雾效…

企业培训系统开发:构建灵活高效的学习平台

企业培训系统的开发在当今数字化时代是至关重要的。本文将介绍一些关键技术和代码示例,以帮助您构建一个灵活、高效的企业培训系统。 1. 技术选型 在开始企业培训系统的开发之前,首先需要选择合适的技术栈。以下是一个基本的技术选型示例:…

【mars3d】FixedRoute的circle没有跟polyline贴着模型的解决方案

问题:【mars3d】官网的贴模型示例中,参考api文档增加了circle的配置,但是FixedRoute的circle没有跟polyline贴着模型 circle: { radius: 10, materialType: mars3d.MaterialType.CircleWave, materialOptions: { color: "#ffff00"…

柱面,盘片,盘面,扇面,磁头,磁道,扇区,CHS地址,LAB地址

柱面,盘片,盘面,扇面,磁头,磁道,扇区,CHS地址,LAB地址1 CHS地址 CHS地址指的是柱面(Cylinder)、磁头(Head)、扇区(Secto…

新年话节能 电梯也减排

小伍恭祝大家2024年元旦快乐!! 目前,电梯的节能已经得到业界的广泛重视,积极推动相关的节能技术的实施,努力宣传和倡导规范的电梯的使用行为,将极大地改变我国电梯的耗能状况,为节能减排做出较大…

Linux进程管理和计划任务

前言 上篇关于进程管理命令使用说明尚未完结,本篇将继续介绍相关命令以及计划任务管理。 目录 前言 一、控制进程 1. vmstat 2. free 3. iostat 4. iotop/iftop 5. uptime 6. mpstat 7. dstat 8. webadin 9. 服务器五大性能 二、进程管理 1. 手动…

SemCms外贸网站商城系统 SQL注入漏洞复现(CVE-2023-50563)

0x01 产品简介 SemCms是国内团队打造的专门针对外贸网站的开源CMS,主要用于外贸企业,兼容IE,Firefox等主流浏览器。建设商城性质的外贸网站,多语言(小语种)网站。 0x02 漏洞概述 SemCms外贸网站商城系统SEMCMS_Function.php 中的 AID 参数存在SQL注入漏洞,未经身份认…

Zuul相关面试题及到案(2024)

1、什么是Zuul?它在微服务架构中有什么作用? Zuul是Netflix开源的一种提供API网关服务的应用程序,它在微服务架构中扮演着流量的前门角色。主要功能包括以下几点: 路由转发:Zuul网关将外部请求转发到具体的微服务实例…

【QT】中英文切换

很高兴在雪易的CSDN遇见你 前言 本文分享QT中如何进行中英文切换,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U&#xff3e…

EtherCAT FP介绍系列文章—热插拔

EtherCAT主站能够顺利初始化和操作网络,离不开EtherCAT网络信息文件(ENI),它包含与EtherCAT主站本机以及连接到主站上每个从站设备的配置一般性信息。该文件由配置工具创建,并由EtherCAT主站程序加载,如下图…

由于无法找到mfc100u.dll怎么解决,mfc100u.dll丢失的6个解决方法分享

本文将为您详细介绍mfc100u.dll文件以及丢失时的六个不同解决方法,帮助您更好地了解和解决这一问题。 一、mfc100u.dll是什么文件? mfc100u.dll是Microsoft Foundation Classes(微软基础类库)中的一个动态链接库文件。它是Visua…

AI的突破与融合:2024年中国智能技术的新纪元_光点科技

随着人工智能领域的不断突破,2024年注定将成为中国智能技术发展的一个新纪元。当下,AI技术不仅在理论研究上取得了重大进展,其在商业应用、社会服务等领域的融合也日益深入。本文将结合近期网络上的AI热点,展望中国在AI技术方面的…

印象笔记03 衍生软件使用

印象笔记03 衍生软件使用 Verse 以下内容来源于官方介绍 VERSE是一款面向未来的智能化生产力工具,由印象笔记团队诚意推出。 你可以用VERSE: 管理数字内容,让信息有序高效运转;搭建知识体系,构建你的强大知识库&am…

SwiftUI 打造一款“可收缩”的 HStack(一)

概览 拥有雄心壮志(亦或是自我感觉良好)的秃头码农们都喜欢接受编程上各种颇有难度的挑战,比如刷刷力扣(LeetCode)或 codeforces 上难题啥的。 为了满足小伙伴们的“冒险精神”(亦或是“自虐癖”),加上这篇博文我们会用连续 4 篇系列文章通过不同的方式来解决同一道与…

倍思科技红海突围要义:紧随新趋势,“实用而美”理念从一而终

移动数码周边市场始终不缺热度。 销售端是业绩的节节高升,如在2023年京东双十一,移动数码周边产品销售成果丰硕,根据京东战报,大功率充电器成交额同比提升 200%,65W以上移动电源成交额同比提升 150%,自带线…

[实用小知识]:Google浏览器添加代理SwitchyOmega

Google浏览器添加代理SwitchyOmega 1. 下载插件到本地 SwitchyOmega_2.5.21.crx OmegaOptions_20230615.bak 2. 开始配置Google代理 1、打开Google浏览器,点开右上角三个点,在更多工具里选择扩展程序 2、在扩展程序里打开开发者模式 3、将Google文件…

世微AP5125 外置MOS管5-100V 8A平均电流型LED降压恒流驱动器 SOT23-6

产品描述 AP5125 是一款外围电路简单的 Buck 型平均电流检测模式的 LED 恒流驱动器,适用于 8-100V 电压范围的非隔离式大功率恒流 LED 驱动领域。芯片采用固定频率 140kHz 的 PWM 工作模式, 利用平均电流检测模式,因此具有优异的负载调整 率特…