OpenHarmony南向之编译构建框架

news2024/11/24 2:49:41
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实现。

  • 模块就是编译子系统的一个编译目标,部件也可以是编译目标。

系统架构

编译构建子系统架构

目录结构:

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. 系统镜像打包:将部件编译产物打包,设置文件属性和权限,制作文件系统镜像。

编译构建使用

环境配置

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

./build/build_scripts/env_setup.sh

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

#安装python3 -m pip install --user build/hb#将路径 export PATH=~/.local/bin:$PATH 更新到环境变量 ~/.bashrc#卸载python3 -m pip uninstall ohos-build

编译构建

预编译

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

bash build/prebuilts_download.sh
执行编译命令

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

命令行方式

全量版本的编译
Release版本 :

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

Debug版本 :

./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模块配置规则

  • 芯片解决方案配置规则

  • 特性配置规则

  • 系统能力配置规则

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

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

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

相关文章

智能售货机:引领便捷生活

智能售货机:引领便捷生活 在这个科技迅速进步的时代,便捷已成为生活的必需。智能售货机作为技术与便利完美结合的产物,正逐渐改变我们的购物方式,为都市生活增添新的活力。 智能售货机的主要优势是它的极致便利性。不论是在地铁…

局域网管理软件哪个好?局域网电脑管理系统实践案例

之前有一个公司案例,是这样的: 公司名称:智慧科技有限公司 背景: 智慧科技有限公司是一家拥有数百名员工的中型企业,随着业务的快速发展,公司面临着网络管理上的挑战。 员工在日常工作中需要频繁地访问…

ChatGPT加持,需求分析再无难题

简介 在实际工作过程中,常常需要拿到产品的PRD文档或者原型图进行需求分析,为产品的功能设计和优化提供建议。 而使用ChatGPT可以很好的帮助分析和整理用户需求。 实践演练 接下来,需要使用ChatGPT 辅助我们完成需求分析的任务 注意&…

车载平板丨车载终端丨车载平板电脑前景如何?

随着人们对车辆安全性和稳定性的关注日益增加,车载加固终端市场前景非常广阔。根据市场研究机构的数据显示,全球车载加固终端市场规模将在未来几年内快速增长。预计到2025年,全球车载加固终端市场规模将达到约55亿美元,年复合增长…

数字IC/FPGA——锁存器/触发器/寄存器

本文主要介绍以下几点: 什么是触发器和锁存器门电路和触发器的区别什么是电平钟控触发器电平钟控触发器触发器和锁存器的区别触发器的分类方式:逻辑功能、触发方式、电路结构、存储数据原理、构成触发器的基本器件寄存器利用移位寄存器实现串并转换或并…

npm问题合集以及npm常规操作整理

问题一:npm install 卡在“sill idealTree buildDeps“ 可以尝试将网络切换为其他网络,我的是这么解决的。可以尝试重新设置镜像。 问题二:npm install 项目依赖报WARN deprecated 原因 依赖版本问题,下载最新版本。 解决方案 …

科研学习|可视化——Origin绘制相关性系数矩阵

一、Origin软件版本 Origin2021版本 二、插件下载地址 CorrelationPlot.opx资源-CSDN文库 三、插件安装步骤 从上述链接下载插件将插件解压缩(最好是解压缩到orgin的安装目录)用origin打开插件(或者打开origin,将插件拖拽到origin…

SPI 机制

一、简述 本文介绍 SPI 机制。 二、什么是 SPI 机制 SPI(Service Provider Interface)机制是 Java 编程语言中的一种机制,用于实现组件之间的解耦和扩展。SPI 允许开发者编写服务接口(Service Interface)&#xff0…

开源无需授权2024最新同城上门预约家政按摩小程序+公众号H5+APP源码系统下载

2024最新同城上门预约家政按摩源码简介: 开源无需授权2024最新同城上门预约家政按摩小程序+公众号H5+APP源码系统下载,前端采用uni-app开发, 后端thinkphp框架开发。适配多端(小程序+公众号H5&…

吴恩达2022机器学习专项课程(一) 5.9 特征工程 5.10 多项式回归

问题预览/关键词 特征工程的重要性什么是特征工程?什么是多项式回归?特征缩放对多项式回归的重要性特征的选择 笔记 1.特征工程的重要性 选择或输入合适的特征,是让算法正常工作的关键步骤之一。 2.特征工程 根据应用场景,运…

.NET SignalR Redis实时Web应用

环境 Win10 VS2022 .NET8 Docker Redis 前言 什么是 SignalR? ASP.NET Core SignalR 是一个开放源代码库,可用于简化向应用添加实时 Web 功能。 实时 Web 功能使服务器端代码能够将内容推送到客户端。 适合 SignalR 的候选项: 需要从服…

Qotom Q720G5英特尔赛扬处理器N4000高性价比无风扇迷你电脑5网口软路由防火墙

在数字时代,迷你电脑已经成为高效、灵活的解决方案,无论是个人用户还是企业用户,都能从中受益。Qotom Q720G5 无风扇迷你电脑就是这样一款强大的选择,它不仅可以作为软路由、防火墙和路由器,还有着更多的潜力等待发掘。…

Nginx转发请求错误

说明:记录一次使用Nginx转发请求的错误; 场景 公司内部有两台服务器都跑了后端项目,在使用Nginx做请求分发时,我发现其中有台服务器一直没有处理请求(没打印相关的日志信息),于是我修改了下Ng…

GGUF类型模型文件

在HuggingFace上,我们时不时就会看到GGUF后缀的模型文件,它是如何来的?有啥特点? https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF GGUF 由来 Georgi Gerganov(https://github.com/ggerganov)是著…

线性代数

标量、向量、张量 标量占据的是零维空间向量占据的是一维数据,例如语音信号矩阵占据的是二维数组,例如灰度图像张量占据的是三维乃至更高维的数组,例如RGB图像和视频 内积(点乘)概述 内积(inner product) 计算的则是两个向量之间的关系 两…

【读点论文】Segment Anything,视觉界的GPT,可以通过Prompt完成图像实体理解的视觉基础大模型,处理零样本任务

Segment Anything Abstract 我们介绍了Segment Anything(SA)项目:一种用于图像分割的新任务、模型和数据集。在数据收集循环中使用我们的高效模型,我们构建了迄今为止(迄今为止)最大的分割数据集&#xf…

QA测试开发工程师面试题满分问答11: web前端页面视频组件无法播放如何定位bug

当 web 前端页面的视频组件无法播放时,可以从以下维度进行分析和定位可能的 bug,分析维度包括但不限于:前端功能点、缓存、异常、后端功能点、资源占用、并发、网络等: 前端功能点: HTML5 视频支持:检查视频…

openstack之neutron介绍

核心组件 neutron-server:提供API接口,把对应的api请求传给plugin进; neutron-plugin:管理逻辑网络状态,调用agent; neutron-agent:在provider network上创建网络对象; neutron-…

万兆以太网MAC设计(2)MAC_RX模块

文章目录 前言一、模块功能二、代码三、仿真波形 前言 上文我们打通了了万兆以太网物理层和数据链路层,其实就是会使用IP核了,本文将正式开始MAC层设计第一篇,接收端设计。 一、模块功能 MAC_RX模块功能如下: 解析接收的报文&…

Android13 CameraServer启动流程

代码入口 frameworks/av/camera/cameraserver 里面包含了四个文件 我们先来看看Android.bp的内容 package {// See: http://go/android-license-faq// A large-scale-change added default_applicable_licenses to import// all of the license_kinds from "frameworks_a…