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

概述

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查看

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTF数据分析题详解

目录 题目一(1.pcap) 题目二(2.pcap) 题目三(3.pcap) 题目四(4.pcap) CTF流量分析经典例题详解-CSDN博客 本文章涉及的所有题目附件下载地址: 链接: https://pan.baidu.com/s/18mWo5vn1zp_XbmcQrMOKRA 提取码:hrc4 声明:这里…

安全测试之SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…

案例074:基于微信小程序的儿童预防接种预约管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder …

设计模式——装饰模式(Decorator Pattern)

概述 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类&…

肿瘤til细胞类型

TISCH (comp-genomics.org)

python学完之后可以做什么,python学完可以做什么

大家好,小编来为大家解答以下问题,python学完可以做哪些工作,python学完之后可以做什么,今天让我们一起来看看吧! Python是一种全栈的开发语言,你如果能学好Python,前端,后端&#x…

VM安装虚拟机及初始化操作

一、VM下载及暗转 虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,在实体计算机中能够完成的工作在虚拟机中都能够实现。VMware 是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的…

VScode安装ESP开发环境

VScode安装ESP开发环境 ESP-IDF 是乐鑫官方的物联网开发框架,适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C 语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序,并集成了大量的软件组件,包…

手撕Vuex-vuex实现原理分析

本章节主要围绕着手撕 Vuex,那么在手撕之前,先来回顾一下 Vuex 的基本使用。 创建一个 Vuex 项目,我这里采用 vue-cli 创建一个项目,然后安装 Vuex。 vue create vuex-demo 选择 Manually select features。 这里只需要&#xff0…

被低估的流量宝地,如何通过Reddit为Shopify店铺引流?

独立站店铺相对于电商平台来说,有一个运营难点那就是需要自主引流。做好引流,你的Shopify店铺也就成功了一半。Reddit作为国外知名的论坛平台,非常适合作为引流的阵地,许多人对这个网站尚不了解,接下来就为大家介绍如何…

好用免费的WAF---如何安装雷池社区版

什么是雷池​ 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。 Slogan: 不让黑客越雷池半步。 什么是 WAF​ WAF 是 Web Application Firewall 的缩写,也被称为 Web 应用防火墙。 …

【AI】LoFTR图像匹配算法源码解析

0.LoFTR简介 Local Feature Transformers (LoFTR)是一种Detector-free的局部特征匹配方法,使用了具有自注意层和互注意层的Transformer模块来处理从卷积网络中提取的密集局部特征:首先在低特征分辨率(图像维度的1/8&a…

JUC AQS(AbstractQueuedSynchronizer)

文章目录 AQS (AbstractQueuedSynchronizer^1.5^)CLH 锁队列AbstractQueuedSynchronizer 成员变量说明AbstractQueuedSynchronizer.Node 源码CLH 队列原理图入队逻辑方法出队逻辑方法 继承 AQS 需要实现的几个方法AQS 对象序列化ReentrantLock 源码解析R…

系列四、Spring Cloud Alibaba - Nacos

一、Nacos 1.1、官网 https://nacos.io/zh-cn/docs/what-is-nacos.html 二、Nacos作为注册中心 2.1、官网 https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.6.RELEASE/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md 三、 Na…

LeetCode 25. K 个一组翻转链表

K 个一组翻转链表 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改…

7.14解数独(LC37-H)

算法: 二维递归(递归时需要两层for循环) 一个for循环放行 另一个for循环放列 画树: 因为这个树形结构太大了,我抽取一部分,如图所示: 回溯三部曲: 1.确定函数参数和返回值 返…

windows机器上安装mysql

0、mysql下载地址 1、参考文章 2、把Data数据目录迁移到其他盘 2.0 首先停止mysql(任务管理器-详细信息-随便找个进程右击进入转入服务,找到MySQL服务,点击停止) 2.1 windows的 mysql默认的data目录在C:\ProgramData\MySQL\MySQ…

2024年MySQL学习指南(二),探索MySQL数据库,掌握未来数据管理趋势

文章目录 前言4. DDL- 操作数据库4.1 查询4.2 创建数据库4.3 删除数据库4.4 使用数据库 5. DDL- 操作数据表5.1 数据类型5.2 查询表5.3 创建表5.4 删除表5.5 修改表 6. 实战案例详解 前言 接上一篇文章【2024年MySQL学习指南(一)】 4. DDL- 操作数据库 …

基于人工智能的数据库工具Chat2DB使用

文章目录 前言Chat2DB介绍Chat2DB地址下载安装 Chat2DB配置Chat2DB使用1、自然语言转sql2. SQL解释3. SQL优化4. SQL转换 写在最后 前言 随着人工智能的发展,各行各业都出现了不少基于AI的工具来提升工作效率。就连国内的各个大厂也都在基于大模型开发自己的产品线…

企业培训系统开发: 技术创新引领学习革新

在现代企业管理中,培训成为推动员工发展和企业创新的核心。随着科技的快速发展,企业培训系统的开发已经成为提高培训效果、降低成本的有效途径。本文将介绍企业培训系统开发的一些关键技术和代码实例,展示如何通过技术创新引领学习革新。 1…