OpenHarmony OS v1.x 源码编译速通指南 (鸿蒙)

  • Date:2021-09-07
  • Author:ZERO-A-ONE

这个应该是全网比较全面而且简单对于OpenHarmony OS v1.x系列的编译指南了

最近在折腾如何正确编译OpenHramony OS,期间踩的坑实在是太多了,不得不说Harmony华为官方文档实在是不太行,很多细节都没有讲,很多官方示例都跑不动,不同版本的文档混杂在一起,十分难搞。比如官网提供的使用Docker环境进行编译,你会发现根本就编译不了,一直报错。HB编译工具也说得不清不错,很多功能也不知道去哪里看,LLVM 9和LLVM 10反复横跳。鸿蒙还有很多路要走

实在是太坑了啊!

本文使用的软件环境主要如下:

  • Docker:openharmony-docker
  • OS:OpenHarmony v1.1.2 LTS

0x1 搭建Docker环境

十分不建议同学们再多费时间在自己的物理机上部署编译环境,因为十分麻烦,既然是速通指南,我们肯定要选择最省心省力的方式,这里选择使用官网已经整合好环境的Docker。这里有一个坑,官网文档介绍的最新0.0.5版本的Docker你会发现编译不同,所以这里优先采用0.0.3版本的Docker

1.1 配置Docker

下载安装脚本:

curl -fsSL https://get.docker.com -o get-docker.sh

使用阿里云镜像下载安装:

sh get-docker.sh --mirror Aliyun

执行脚本后会自动识别架构,下载安装对应版本docker,稍等片刻即可

将当前用户加入docker组:

sudo usermod -aG docker $USER

至此Docker配置完毕

1.2 配置OpenHarmony编译环境

1.2.1 获取Docker镜像

从HuaweiCloud SWR上直接获取Docker镜像进行构建

docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.3

1.2.2 从镜像启动Docker容器

建立容器:

docker run -itd -P --name harmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.3 /bin/bash

连接上已建立的容器带bash:

docker exec -it harmony /bin/bash

自此完全进入已经配置好编译环境的容器里

1.3 补充:Docker图形化界面

我在配置Docker环境的时候一般习惯顺便配置一下图形化界面:

#下载 Docker 图形化界面 portainer
sudo docker pull portainer/portainer
#创建 portainer 容器
sudo docker volume create portainer_data
#运行 portainer
sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

在图形化界面中操作更加便利。运行之后在浏览器中输入宿主机IP:9000 进入界面

0x2 编译OpenHarmony OS

进入openharmony目录

cd /home/openharmony

首先从官网下载源码文件,我们这里选择的是v1.1.2 LTS:

wget https://repo.huaweicloud.com/harmonyos/os/1.1.2/code-v1.1.2-LTS.tar.gz

解压源码文件:

tar -zxvf code-v1.1.2-LTS.tar.gz

进入源码目录:

cd code-v1.1.2-LTS

使用hb工具配置,我们可以观察一下hb工具

usage: hb

OHOS build system

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

不难发现主要就这么几个功能,我们可以观察一下现在的编译环境:

root@8034382fea19:/home/openharmony/code-v1.1.2-LTS# hb env
[OHOS INFO] root path: /home/openharmony/code-v1.1.2-LTS
[OHOS INFO] board: hispark_aries
[OHOS INFO] kernel: liteos_a
[OHOS INFO] product: ipcamera_hispark_aries
[OHOS INFO] product path: /home/openharmony/code-v1.1.2-LTS/vendor/hisilicon/hispark_aries
[OHOS INFO] device path: /home/openharmony/code-v1.1.2-LTS/device/hisilicon/hispark_aries/sdk_liteos

我们首先需要设定我们编译的目标固件:

hb set

选择对应的目录,我们直接输入./即可:

root@8034382fea19:/home/openharmony/code-v1.1.2-LTS# hb set
[OHOS INFO] Input code path: ./

这三个对应平台的关系如下

  • Hi3518:ipcamera_hispark_aries@hisilicon
  • Hi3861:wifiiot_hispark_pegasus@hisilicon
  • Hi3516:ipcamera_hispark_taurus@hisilicon

我选择了ipcamera_hispark_aries,至此编译配置完成

然后这里有个深坑,其实hb工具也是可以指定编译模式的,需要使用-b参数,比如我们开始使用debug模式编译:

hb build -b debug

即可开始编译,等待编译完成,我们可以在out文件发现我们编译成功的固件文件

/home/openharmony/code-v1.1.2-LTS/out/hispark_aries/ipcamera_hispark_aries

可以看一下编译成功的文件树

root@8034382fea19:/home/openharmony/code-v1.1.2-LTS/out/hispark_aries/ipcamera_hispark_aries# ls -l
total 92724
-rw-r--r--  1 root root      391 Sep  7 04:20 args.gn
drwxr-xr-x  2 root root    12288 Sep  7 07:46 bin
-rw-r--r--  1 root root    19861 Sep  7 07:44 bm_tool.map
-rw-r--r--  1 root root   244771 Sep  7 07:47 build.log
-rw-r--r--  1 root root   121517 Sep  7 07:42 build.ninja
-rw-r--r--  1 root root    17367 Sep  7 07:42 build.ninja.d
-rw-r--r--  1 root root    56010 Sep  7 07:44 bundle_daemon_tool.map
drwxr-xr-x  2 root root     4096 Sep  7 07:44 config
drwxr-xr-x  2 root root     4096 Sep  7 07:42 data
drwxr-xr-x  3 root root     4096 Sep  7 07:44 dev_tools
drwxr-xr-x  2 root root     4096 Sep  7 07:42 etc
-rw-r--r--  1 root root     6613 Sep  7 07:45 foundation.map
drwxr-xr-x  3 root root     4096 Sep  7 07:47 gen
drwxr-xr-x  3 root root     4096 Sep  7 07:47 libs
-rwxr-xr-x  1 root root  1873988 Sep  7 07:44 liteos.bin
-rw-r--r--  1 root root     8879 Sep  7 07:46 media_server.map
drwxr-xr-x  7 root root     4096 Sep  7 07:42 NOTICE_FILE
drwx------ 12 root root     4096 Sep  7 07:42 obj
-rwxr-xr-x  1 root root  5560340 Sep  7 07:46 OHOS_Image
-rw-r--r--  1 root root 57828229 Sep  7 07:46 OHOS_Image.asm
-rwxr-xr-x  1 root root  5021084 Sep  7 07:46 OHOS_Image.bin
-rw-r--r--  1 root root  1704974 Sep  7 07:46 OHOS_Image.map
-rw-r--r--  1 root root  7237456 Sep  7 07:47 rootfs_jffs2.img
-rw-r--r--  1 root root 14254080 Sep  7 07:47 rootfs.tar
-rw-r--r--  1 root root   146445 Sep  7 07:44 server.map
drwxr-xr-x  3 root root     4096 Sep  7 07:47 suites
drwxr-xr-x  3 root root     4096 Sep  7 07:43 test
drwxr-xr-x  4 root root     4096 Sep  7 07:42 test_info
-rw-r--r--  1 root root   447167 Sep  7 07:46 toggleButtonTest.map
-rw-r--r--  1 root root   295861 Sep  7 07:42 toolchain.ninja
drwxr-xr-x  5 root root     4096 Sep  7 07:47 userfs
-rw-r--r--  1 root root     3040 Sep  7 07:47 userfs_jffs2.img
drwxr-xr-x  3 root root     4096 Sep  7 07:42 vendor

要从Docker打包回宿主机的话,首先压缩一下我们编译成功的文件,安装一下zip

apt install zip

打包

zip -r rom.zip ./ipcamera_hispark_aries

在宿主机中执行:

docker cp harmony:/home/openharmony/code-v1.1.2-LTS/out/hispark_aries/rom.zip ./

至此完成所有编译工作

参考文档

猜你喜欢

转载自blog.csdn.net/kelxLZ/article/details/120159946