openharmony编译构建指导

编译构建指导

概述

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

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

适用范围

本指导适用于轻量、小型、标准三种系统。芯片解决方案配置规则新增并编译芯片解决方案主要和轻量系统、小型系统相关,其他内容都是通用的。

基本概念及包含关系

在了解编译构建子系统的能力前,应了解如下基本概念:

  • 平台:开发板和内核的组合,不同平台支持的子系统和部件不同。
  • 产品:产品是包含一系列部件的集合,编译后产品的镜像包可以运行在不同的开发板上。
  • 子系统:OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层(详见OpenHarmony技术架构)。系统功能按照“系统 > 子系统 > 部件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或部件。子系统是一个逻辑概念,它具体由对应的部件构成。
  • 部件:对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。需要注意的是下文中的芯片解决方案本质是一种特殊的部件。
  • 模块:模块就是编译子系统的一个编译目标,部件也可以是编译目标。
  • 特性:特性是部件用于体现不同产品之间的差异。
  • GN:Generate Ninja的缩写,用于产生Ninja文件。
  • Ninja:Ninja是一个专注于速度的小型构建系统。
  • hb:OpenHarmony的命令行工具,用来执行编译命令。

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

图1 产品、子系统、部件和模块间关系

产品子系统部件模块关系

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

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

运作机制

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

图2 编译构建流程

编译流程

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

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

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

约束限制

编译环境目前主要支持Ubuntu18.04和Ubuntu20.04(Ubuntu22.04暂不支持)。

环境配置

安装编译所需的程序包。 安装命令:

  • 安装方式一:使用脚本,在当前工程目录执行

    ./build/build_scripts/env_setup.sh
    
  • 安装方式二:apt-get和pip3 install命令安装

    apt-get update -y 
    apt-get install -y  
    # 如果是ubuntu20.04系统请直接安装python3.9,如果是ubuntu18.04请改为安装python3.8
    apt-get install -y apt-utils binutils bison flex bc build-essential make mtd-utils gcc-arm-linux-gnueabi u-boot-tools python3.9 python3-pip git zip unzip curl wget gcc g++ ruby dosfstools mtools default-jre default-jdk scons python3-distutils perl openssl libssl-dev cpio git-lfs m4 ccache zlib1g-dev tar rsync liblz4-tool genext2fs binutils-dev device-tree-compi
<think>好的,我现在需要处理用户关于OpenHarmony编译流程和工具链配置的查询。首先,用户提到了几个引用,我需要先仔细阅读这些引用内容,确保回答准确。 根据引用[2]和[3],OpenHarmony使用hb和build.sh两种编译方式,hb是命令行工具,而gn和ninja用于生成和构建文件。用户想知道编译的起点和工具链配置方法,所以需要从编译的入口开始讲起。 用户提供的引用[1]和[4]提到了编译过程和分区,但用户的问题主要聚焦在流程和工具链,所以应重点放在hb命令、gn和ninja的协作上。需要解释编译的步骤,从hb set选择产品,到hb build启动编译,再到gn生成ninja文件,最后ninja执行构建。 工具链配置部分,引用[2]和[3]提到工具链可能位于prebuilts目录,需要配置环境变量,比如PATH。需要指导用户如何检查和修改这些配置,确保工具链正确调用。 还需要注意用户可能对hb的安装和异常处理有疑问,引用[2]提到了安装库和工具集以及异常处理,应该在回答中提及这些内容,但保持简洁,避免偏离主题。 最后,生成相关问题时要围绕编译流程、工具链优化、环境变量配置和常见问题,这样用户如果有进一步的问题,可以自行参考。</think>### OpenHarmony编译流程及工具链配置教程 #### 一、编译起点与流程 1. **编译入口** OpenHarmony工程支持`hb`和`build.sh`两种编译方式,推荐使用`hb`命令行工具[^2][^3]。 - **步骤1:选择产品配置** ```bash hb set # 交互式选择目标产品和编译类型(如@ohos/hispark_taurus) ``` - **步骤2:启动编译** ```bash hb build # 执行全量编译 ``` - **步骤3:生成构建文件** `hb`调用`gn`生成`ninja`构建文件,最终由`ninja`执行实际编译任务[^3]。 2. **工具链配置** OpenHarmony工具链(如编译器、链接器)通常预置在`prebuilts`目录下,例如: ```bash # 查看gcc工具链路径 prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/ ``` 配置环境变量可确保工具链被正确调用[^2][^4]。 #### 二、关键工具解析 | 工具 | 作用 | 关联文件 | |-----------|-------------------------------|------------------------| | `hb` | 编译入口命令 | `build/lite`目录 | | `gn` | 生成构建规则(.ninja文件) | `BUILD.gn`文件 | | `ninja` | 执行多任务并行编译 | `out/[product]/`目录 | #### 三、验证编译环境 ```bash # 检查hb是否安装成功 hb --version # 查看工具链是否生效 arm-linux-gnueabi-gcc --version ``` #### 四、常见配置问题 1. **工具链路径缺失** 在`envsetup.sh`中添加路径: ```bash export PATH=$PATH:<your_toolchain_path> ``` 2. **产品配置未生效** 检查`vendor/[product]/config.json`是否包含正确的设备参数[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Benco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值