hb方式编译鸿蒙系统

文章目录

  • 目标
  • 操作步骤
    • 基本要求
    • 下载OpenHarmony源码
    • 安装必要的程序包
    • 执行编译脚本
      • 编译中遇到的问题
    • 编译单个模块
  • 编译脚本梳理
    • hb set
    • hb build
    • hb deps
  • 引用

目标

编译个可以运行的Harmony系统。

操作步骤

需要四个步骤:

  1. 下载OpenHarmony源码
  2. 安装必要的程序包
  3. 添加配置文件
  4. 执行编译脚本

基本要求

编译环境需要Ubuntu18.04及以上版本。

下载OpenHarmony源码

按照OpenHarmony项目获取OpenHarmony源码指示的方法下载代码。
本人选用从站点下载全量代码的方式下载,OpenHarmony3.0全量代码(标准、轻量和小型系统)站点

安装必要的程序包

安装命令:

sudo apt-get install build-essential gcc g++ make libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev libc6-dev-amd64 binutils binutils-dev libdwarf-dev u-boot-tools mtd-utils gcc-arm-linux-gnueabi cpio device-tree-compiler

解压源码

tar zxvf code-v3.0-LTS.tar.gz

code-v3.0-LTS/OpenHarmony下文件如下

drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 37 08:28 .
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 38 16:08 ..
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:22 applications
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:22 ark
drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 930 09:22 base
drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 37 12:47 build
lrwxrwxrwx 1 hndz-dhliu hndz-dhliu    19 930 09:22 build.py -> build/lite/build.py
lrwxrwxrwx 1 hndz-dhliu hndz-dhliu    28 930 09:22 build.sh -> build/build_scripts/build.sh
drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 930 09:22 developtools
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:22 device
drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 930 09:22 docs
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:22 domains
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:22 drivers
drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 930 09:22 foundation
lrwxrwxrwx 1 hndz-dhliu hndz-dhliu    24 930 09:22 .gn -> build/core/gn/dotfile.gn
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:22 interface
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:23 kernel
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 39 09:27 out
drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 930 09:45 prebuilts
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:23 productdefine
drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 930 14:51 .repo
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:23 test
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 16384 930 09:23 third_party
drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 930 09:23 utils
drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 930 09:23 vendor

将此目录作为源代码根目录,之后所有的目前均以源代码根目录的相对路径形式展示。
安装hb
源码中自带相关编译开发工具,如python, GN, ninja。而hb实际上是python脚本。

##源代码根目录下
cd prebuilts/python/linux-x86/3.8.5/bin ##python3路径
pwd ##获取python3.8的绝对路径
echo "export PATH=`pwd`:\$PATH" >> ~/.bashrc ##将python路径加入PATH中
source ~/.bashrc                             ##应用最新的PATH
python3 --version                            ##确认pyton3 版本为3.8.5
python3 -m pip install --user ohos-build     ##安装最新的hb,及其环境;安装路径为~/.local/bin
echo "export PATH=~/.local/bin:\$PATH" >> ~/.bashrc ##将python路径加入PATH中
source ~/.bashrc                             ##应用最新的PATH
cd ../../../../..                            ##进入源代码根目录
build/lite/hb/__main__.py -h                 ##检验hb是否可以使用;安装正确,将打印出hb的使用方法与版本号;由于可能最新的hb与当前源代码不匹配,所以使用源代码配套的hb脚本

正确安装,将打印出如下信息

usage: __main__.py [-h] [-v] {build,set,env,clean,deps} ...

OHOS Build System version 0.4.3

positional arguments:
  {build,set,env,clean,deps}
    build               Build source code
    set                 OHOS build settings
    env                 Show OHOS build env
    clean               Clean output
    deps                OHOS components deps

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit

执行编译脚本

在源码路径下执行命令

code-v3.0-LTS/OpenHarmony$ build/lite/hb/__main__.py set ##设置编译路径
OHOS Which product do you need?  (Use arrow keys)
   
hisilicon
   ipcamera_hispark_aries
   wifiiot_hispark_pegasus
   ipcamera_hispark_taurus
 ❯ ipcamera_hispark_taurus_linux
   
hndz
   hndz_imx6d
   
ohemu
   qemu_ca7_mini_system_demo
   qemu_mini_system_demo
   qemu_riscv_mini_system_demo
   qemu_small_system_demo
## 选择产品ipcamera_hispark_taurus_linux并回车
code-v3.0-LTS/OpenHarmony$ build/lite/hb/__main__.py build ##编译

输出路径为out/hispark_taurus/ipcamera_hispark_taurus_linux

编译中遇到的问题

1) hisilicon/hispark_taurus_linux: [OHOS ERROR] …/…/…/build/lite/hap_pack.py
按要求安装打包工具与java环境,然后重新编译build/lite/hb/__main__.py build -f(不重新编译可能会由于缓存重复报错)。
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-setting.md
2) [OHOS ERROR] [3463/3532] ACTION //third_party/wpa_supplicant/wpa_supplicant-2.9:wpa_supplicant-2.9
[OHOS ERROR] /home/test/workspace/code-v3.0-LTS/OpenHarmony/prebuilts/python/linux-x86/3.8.5/bin/python …/…/…/build/lite/build_ext_components.py
检查sh是否为bash,如果不是,则运行sudo dpkg-reconfigure dash将shell修改为bash(参考DevEco Device Tool安装)。

编译单个模块

以编译softbus_lite为例
build/lite/hb/__main__.py build softbus_lite

编译脚本梳理

hb 的源代码在build/lite/hb路径下,其入口函数为__main__.py中的main()。
hb 支持以下命令

命令 说明
set 构建配置
env 显示构建配置变量
build 编译
clean 清空编译输出
deps 显示组件依赖

我们目前只关注set和build,下面只介绍这两个命令。

hb set

hb set的作用是生成产品配置文件,保存为ohos_config.json。
ohos_config.json 文件示例如下

{
  "root_path": "/media/hndz-dhliu/C7968B675F10B93B/workspace/code-v3.0-LTS/OpenHarmony",
  "board": "imx6d",
  "kernel": "linux",
  "product": "hndz_imx6d",
  "product_path": "/media/hndz-dhliu/C7968B675F10B93B/workspace/code-v3.0-LTS/OpenHarmony/vendor/hndz/imx6d",
  "device_path": "/media/hndz-dhliu/C7968B675F10B93B/workspace/code-v3.0-LTS/OpenHarmony/device/hndz/imx6d/sdk_linux",
  "patch_cache": null
}

代码路径为build/lite/hb/set/set.py。
在产品,设备不变情况,无需多次执行 hb set命令。

hb build

hb build的作用是根据配置信息生成编译指导文件build.ninja,然后执行编译过程。
代码路径为build/lite/hb/build/build.py。
执行流程如下:

  • 如果输出路径下存在build.ninja,则只执行编译过程。
  • 否则如果使用了-f 选项,则删除输出目录,重新创建输出目录,执行GN配置和编译过程。
  • 否则,则创建输出目录,执行GN配置和编译过程。
    所以,如果修改了GN的配置文件,需要执行hb build -f命令,否则只需执行hb build
    编译脚本示例:
build/lite/hb/__main__.py build -f -b release ##编译release版本
build/lite/hb/__main__.py build -f -b release -n ##编译release版本,ndk

hb deps

build/lite/hb/main.py deps -s communication -p hndz_imx6d --work_path . check

引用

获取OpenHarmony源码
OpenHarmony3.0全量代码(标准、轻量和小型系统)站点
编译

你可能感兴趣的:(鸿蒙系统,交叉编译,harmonyos)