编译个可以运行的Harmony系统。
需要四个步骤:
编译环境需要Ubuntu18.04及以上版本。
按照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 3月 7 08:28 .
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 3月 8 16:08 ..
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:22 applications
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:22 ark
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 4096 9月 30 09:22 base
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 4096 3月 7 12:47 build
lrwxrwxrwx 1 hndz-dhliu hndz-dhliu 19 9月 30 09:22 build.py -> build/lite/build.py
lrwxrwxrwx 1 hndz-dhliu hndz-dhliu 28 9月 30 09:22 build.sh -> build/build_scripts/build.sh
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 4096 9月 30 09:22 developtools
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:22 device
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 4096 9月 30 09:22 docs
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:22 domains
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:22 drivers
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 4096 9月 30 09:22 foundation
lrwxrwxrwx 1 hndz-dhliu hndz-dhliu 24 9月 30 09:22 .gn -> build/core/gn/dotfile.gn
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:22 interface
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:23 kernel
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 3月 9 09:27 out
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 4096 9月 30 09:45 prebuilts
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:23 productdefine
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 4096 9月 30 14:51 .repo
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 09:23 test
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 16384 9月 30 09:23 third_party
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 4096 9月 30 09:23 utils
drwxrwxrwx 1 hndz-dhliu hndz-dhliu 0 9月 30 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
的作用是生成产品配置文件,保存为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
的作用是根据配置信息生成编译指导文件build.ninja,然后执行编译过程。
代码路径为build/lite/hb/build/build.py。
执行流程如下:
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
build/lite/hb/main.py deps -s communication -p hndz_imx6d --work_path . check
获取OpenHarmony源码
OpenHarmony3.0全量代码(标准、轻量和小型系统)站点
编译