自学内容网 自学内容网

OpenHarmony南向之编译构建框架

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.鸿蒙南向开发方向


原文地址:https://blog.csdn.net/weixin_61845324/article/details/137687704

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!