前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenHarmony南向之编译构建框架

OpenHarmony南向之编译构建框架

原创
作者头像
小帅聊鸿蒙
发布于 2024-08-11 13:10:27
发布于 2024-08-11 13:10:27
27900
代码可运行
举报
文章被收录于专栏:鸿蒙开发笔记鸿蒙开发笔记
运行总次数:0
代码可运行
代码语言:c
代码运行次数:0
运行
复制
title: OpenHarmony南向之编译构建框架
categories:
  - OpenHarmony
tags:
  - Ninja
  - GN
author: shell
cover: /img/oh/build_framework_ZN.png
date: 2024-01-03 21:05:38

概述

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

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

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

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

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

系统架构

编译构建子系统架构

目录结构:

代码语言:c
代码运行次数:0
运行
复制
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

编译构建流程

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

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

编译构建使用

环境配置

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

代码语言:c
代码运行次数:0
运行
复制
./build/build_scripts/env_setup.sh

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

代码语言:c
代码运行次数:0
运行
复制
#安装python3 -m pip install --user build/hb#将路径 export PATH=~/.local/bin:$PATH 更新到环境变量 ~/.bashrc#卸载python3 -m pip uninstall ohos-build

编译构建

预编译

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

代码语言:c
代码运行次数:0
运行
复制
bash build/prebuilts_download.sh
执行编译命令

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

命令行方式

全量版本的编译

Release版本 :

代码语言:c
代码运行次数:0
运行
复制
./build.sh --product-name {product_name}

Debug版本 :

代码语言:c
代码运行次数:0
运行
复制
./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查看

配置规则

为了实现芯片解决方案、产品解决方案与OpenHarmony是解耦的、可插拔的,子系统、产品、部件、芯片解决方案、模块、特性和系统能力需遵循一定的规则。

具体配置规则及怎么新增不同配置见如下链接,这里就不细说了:

  • 产品配置规则
  • 子系统配置规则
  • 部件配置规则
  • 模块配置规则
  • Rust模块配置规则
  • 芯片解决方案配置规则
  • 特性配置规则
  • 系统能力配置规则

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力;
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识;
  • 想要获取更多完整鸿蒙最新学习知识点,可关注B站:码牛课堂;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(一)
本文详细介绍如何将OpenHarmony小型系统的linux和LiteOS-A内核移植到新的开发板上,要求读者具有一定的嵌入式系统开发经验。建议先查看 入门指导 ,以了解OpenHarmony软件架构、目录结构、内核子系统和驱动子系统相关知识。当前小型系统已适配的开发板如下表所示:
小帅聊鸿蒙
2025/06/23
220
如何编译OpenHarmony SDK API
在OpenHarmony应用开发时,少不了和OpenHarmony SDK打交道。OpenHarmony SDK包含支持的编程语言(即ArkTS、JS、Native)的API和构建工具,界面效果预览器Previewer和toolchains工具链。对于HarmonyOS SDK,在OpenHarmony SDK的基础上,增加了simulator设备模拟器、系统镜像等,后续预计会丰富 hms core 相关的能力,如账户服务、地图服务等。
小帅聊鸿蒙
2025/06/19
1130
如何编译OpenHarmony SDK API
OpenHarmony 移植案例与原理 - build lite源码分析 之 hb命令__main__.py
hb命令可以通过python pip包管理器进行安装,应该是OpenHarmony Build的缩写,在python包名称是ohos-build。hb作为编译构建子系统提供的命令行,用于编译构建产品、芯片厂商组件或者单个组件。本文,我们来学习hb的源码。
小帅聊鸿蒙
2025/06/18
400
OpenHarmony 移植案例与原理 - XTS子系统之应用兼容性测试套件(2)
需要通过链接选项指定需要链接的ACTS的部件编译库文件,会使用到 --whole-archive 和 --no-whole-archive这2个ld链接选项。–whole-archive 可以把 在其后面出现的静态库包含的函数和变量输出到动态库,–no-whole-archive 则关掉这个特性。在文件vendor\goodix\gr5515_sk_xts_demo\BUILD.gn中,对ACTS的编译文件进行链接。其中⑴到⑵处的链接选项为编译出的属于ACTS的组件测试库文件。
小帅聊鸿蒙
2025/06/17
840
OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(二)
安全子系统提供网络设备连接、认证鉴权等功能,依赖mbedtls实现硬件随机数以及联网功能。
小帅聊鸿蒙
2025/06/22
340
OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(一)
OpenHarmony系统功能按照“系统 > 子系统 > 部件”逐级展开,支持根据实际需求裁剪某些非必要的部件,本文以部分子系统、部件为例进行介绍。若想使用OpenHarmony系统的能力,需要对相应子系统进行适配。
小帅聊鸿蒙
2025/06/22
750
OpenHarmony(鸿蒙南向开发)——轻量系统芯片内核移植
芯片架构的移植是内核移植的基础,在OpenHarmony中芯片架构移植是可选过程,如果当前OpenHarmony已经支持对应芯片架构则不需要移植操作,在“liteos_m/arch”目录下可看到当前已经支持的架构,如表1:
小帅聊鸿蒙
2025/06/23
250
移植speexdsp到OpenHarmony标准系统③
根据上一步分析结果,编写gn文件,将三方库加入到OpenHarmony的编译体系。
小帅聊鸿蒙
2024/09/09
2220
移植speexdsp到OpenHarmony标准系统③
OpenHarmony编译构建系统
在官网中提到了,OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能:
小帅聊鸿蒙
2024/08/11
3200
OpenHarmony编译构建系统
OpenHarmony 内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南
本篇主要采用 windows + docker 方式编译鸿蒙. 记录编译鸿蒙的过程,以备后续不用再去一大堆无效的误导式软文中搜寻芝麻大点有用的信息,那样真挺费时费心力.
小帅聊鸿蒙
2025/03/22
2430
OpenHarmony 内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南
【鸿蒙南向开发】基于hispark_taurus开发板示例学习OpenHarmony编译(1)
OpenHarmony开源站点提供了一个基于gn和ninja的支持OpenHarmony组件化开发的编译框架。
小帅聊鸿蒙
2025/06/09
1190
OpenHarmony 移植案例与原理 - build lite配置目录全梳理
命令行工具hb(HarmonyOS|OpenHarmony Build 编译构建系统的缩写)都很熟悉了。这是一个基于gn和ninja的构建系统,以支持OpenHarmony组件化开发为目标,提供以下基本功能:
小帅聊鸿蒙
2025/06/15
1680
鸿蒙系统研究之二:内核编译
一个操作系统,最重要的部分无疑是内核。鸿蒙系统声称自研了内核,从之前开源的 OpenHarmony OS 代码中可以看到,是一款名为 LiteOS 的面向 IoT 领域构建的轻量级物联网操作系统。LiteOS 又有两个版本:LiteOS-A 和 LiteOS-M。而 OpenHarmony OS 2.0 针对手机、平板等富资源设备,则使用的是 Linux 操作系统。
云水木石
2021/07/14
2.6K0
OpenHarmony 移植案例与原理 - build lite编译构建过程
配置完毕产品解决方案、芯片开发板解决方案,就可以执行 hb build进行编译。但是产品解决方案代码是如何被调用编译的?
小帅聊鸿蒙
2025/06/16
1170
鸿蒙OpenHarmony轻内核Kconfig使用笔记
鸿蒙轻内核使用Kconfig进行图形化配置,本文专门讲解下鸿蒙轻内核LiteOS-M和LiteOS-A的图形化配置方法。 本文首先简单介绍下kconfig的基础知识,接着介绍下如何使用图形化配置。
小帅聊鸿蒙
2025/06/09
1390
鸿蒙OpenHarmony轻内核Kconfig使用笔记
如何让加快OpenHarmony编译速度
OpenHarmony 有两种编译方式,一种是通过 hb 工具编译,一种是通过 build.sh 脚本编译。本文笔者将提升 build.sh 方式编译速度的方法整理如下:
小帅聊鸿蒙
2024/07/31
4700
如何让加快OpenHarmony编译速度
OpenHarmony 内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单
个人喜欢做一劳永逸的事,如果有试过手动去安装鸿蒙开发环境,下载源码,确保编译成功其实是件非常麻烦的事情, 在虚拟机和WSL2上都跑通之后,发现其中的坑不少,这些坑本身没有技术含量,知道了也就知道了,但它们却跟牛皮癣一样,遇到了就不容易好老复发真烦人. 如何防止得牛皮癣的最好办法不是去治疗牛皮癣,而是不得牛皮癣,打上牛皮癣的疫苗. 这是本篇存在的意义,让整个过程简单,舒适,一气呵成.
小帅聊鸿蒙
2025/03/25
1490
OpenHarmony 内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单
OpenHarmony开源鸿蒙build编译模块的原理和系统配置解析
小帅聊鸿蒙
2024/10/13
7030
OpenHarmony开源鸿蒙build编译模块的原理和系统配置解析
全志XR806 OpenHarmony系统入门之Hello World演示
Harmony的编译路径主要由vendor/xradio/xr806/config.json决定
阿志小管家
2024/03/03
2260
全志XR806 OpenHarmony系统入门之Hello World演示
OpenHarmony 内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程
构建工具重要性不言而喻,它描述了整个工程的如何编译、连接,打包等规则,其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文件、如何最后输出我们想要的文件。
小帅聊鸿蒙
2025/03/25
2090
OpenHarmony 内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程
推荐阅读
相关推荐
OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(一)
更多 >
目录
  • 概述
  • 系统架构
  • 编译构建流程
  • 编译构建使用
    • 环境配置
    • 编译构建
      • 预编译
      • 执行编译命令
  • 配置规则
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档