hb方式编译鸿蒙系统

打印 上一主题 下一主题

主题 592|帖子 592|积分 1776

文章目录



目标

编译个可以运行的Harmony系统。
操作步骤

需要四个步骤:

  • 下载OpenHarmony源码
  • 安装必要的程序包
  • 添加配置文件
  • 执行编译脚本
基本要求

编译环境需要Ubuntu18.04及以上版本。
下载OpenHarmony源码

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

安装命令:
  1. 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
复制代码
解压源码
  1. tar zxvf code-v3.0-LTS.tar.gz
复制代码
code-v3.0-LTS/OpenHarmony下文件如下
  1. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 3月   7 08:28 .
  2. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 3月   8 16:08 ..
  3. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:22 applications
  4. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:22 ark
  5. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 9月  30 09:22 base
  6. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 3月   7 12:47 build
  7. lrwxrwxrwx 1 hndz-dhliu hndz-dhliu    19 9月  30 09:22 build.py -> build/lite/build.py
  8. lrwxrwxrwx 1 hndz-dhliu hndz-dhliu    28 9月  30 09:22 build.sh -> build/build_scripts/build.sh
  9. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 9月  30 09:22 developtools
  10. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:22 device
  11. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 9月  30 09:22 docs
  12. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:22 domains
  13. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:22 drivers
  14. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 9月  30 09:22 foundation
  15. lrwxrwxrwx 1 hndz-dhliu hndz-dhliu    24 9月  30 09:22 .gn -> build/core/gn/dotfile.gn
  16. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:22 interface
  17. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:23 kernel
  18. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 3月   9 09:27 out
  19. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 9月  30 09:45 prebuilts
  20. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:23 productdefine
  21. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 9月  30 14:51 .repo
  22. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:23 test
  23. drwxrwxrwx 1 hndz-dhliu hndz-dhliu 16384 9月  30 09:23 third_party
  24. drwxrwxrwx 1 hndz-dhliu hndz-dhliu  4096 9月  30 09:23 utils
  25. drwxrwxrwx 1 hndz-dhliu hndz-dhliu     0 9月  30 09:23 vendor
复制代码
将此目录作为源代码根目录,之后所有的目前均以源代码根目录的相对路径形式展示。
安装hb
源码中自带相关编译开发工具,如python, GN, ninja。而hb实际上是python脚本。
  1. ##源代码根目录下
  2. cd prebuilts/python/linux-x86/3.8.5/bin ##python3路径
  3. pwd ##获取python3.8的绝对路径
  4. echo "export PATH=`pwd`:\$PATH" >> ~/.bashrc ##将python路径加入PATH中
  5. source ~/.bashrc                             ##应用最新的PATH
  6. python3 --version                            ##确认pyton3 版本为3.8.5
  7. python3 -m pip install --user ohos-build     ##安装最新的hb,及其环境;安装路径为~/.local/bin
  8. echo "export PATH=~/.local/bin:\$PATH" >> ~/.bashrc ##将python路径加入PATH中
  9. source ~/.bashrc                             ##应用最新的PATH
  10. cd ../../../../..                            ##进入源代码根目录
  11. build/lite/hb/__main__.py -h                 ##检验hb是否可以使用;安装正确,将打印出hb的使用方法与版本号;由于可能最新的hb与当前源代码不匹配,所以使用源代码配套的hb脚本
复制代码
正确安装,将打印出如下信息
  1. usage: __main__.py [-h] [-v] {build,set,env,clean,deps} ...
  2. OHOS Build System version 0.4.3
  3. positional arguments:
  4.   {build,set,env,clean,deps}
  5.     build               Build source code
  6.     set                 OHOS build settings
  7.     env                 Show OHOS build env
  8.     clean               Clean output
  9.     deps                OHOS components deps
  10. optional arguments:
  11.   -h, --help            show this help message and exit
  12.   -v, --version         show program's version number and exit
复制代码
执行编译脚本

在源码路径下执行命令
  1. code-v3.0-LTS/OpenHarmony$ build/lite/hb/__main__.py set ##设置编译路径
  2. OHOS Which product do you need?  (Use arrow keys)
  3.    
  4. hisilicon
  5.    ipcamera_hispark_aries
  6.    wifiiot_hispark_pegasus
  7.    ipcamera_hispark_taurus
  8. ❯ ipcamera_hispark_taurus_linux
  9.    
  10. hndz
  11.    hndz_imx6d
  12.    
  13. ohemu
  14.    qemu_ca7_mini_system_demo
  15.    qemu_mini_system_demo
  16.    qemu_riscv_mini_system_demo
  17.    qemu_small_system_demo
  18. ## 选择产品ipcamera_hispark_taurus_linux并回车
  19. 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 文件示例如下
  1. {
  2.   "root_path": "/media/hndz-dhliu/C7968B675F10B93B/workspace/code-v3.0-LTS/OpenHarmony",
  3.   "board": "imx6d",
  4.   "kernel": "linux",
  5.   "product": "hndz_imx6d",
  6.   "product_path": "/media/hndz-dhliu/C7968B675F10B93B/workspace/code-v3.0-LTS/OpenHarmony/vendor/hndz/imx6d",
  7.   "device_path": "/media/hndz-dhliu/C7968B675F10B93B/workspace/code-v3.0-LTS/OpenHarmony/device/hndz/imx6d/sdk_linux",
  8.   "patch_cache": null
  9. }
复制代码
代码路径为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。
    编译脚本示例:
  1. build/lite/hb/__main__.py build -f -b release ##编译release版本
  2. 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全量代码(标准、轻量和小型系统)站点
编译

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表