ubuntu 20.04编译openHarmony 4.0(开源鸿蒙) RK3568开发板

总述

开源鸿蒙文档说明

开源鸿蒙的官方参考的开发文档可以从两个地方获得。

一个是码云源码文档库。docs: OpenHarmony documentation | OpenHarmony开发者文档 (gitee.com)

另一个是开源鸿蒙官方网站。https://docs.openharmony.cn/pages/v4.1/zh-cn/OpenHarmony-Overview_zh.md

其中,它们的文档都是一致的,并且开源鸿蒙官方网站展示效果、导航更加美观。但是存在一个问题,只支持查看最新的版本文档。如下图。4.0已经不再支持,所以一些已经旧的开源鸿蒙官方网站文档链接(如v4.0)已经不支持访问,链接失效。

在这里插入图片描述

所以更推荐放码云源码文档库链接,文档本质都是一个个markdown文件,码云源码文档库保留着所有版本的文档文件,所以不用担心链接失效。但需要更加关心文档的目录结构。

编译源码Ubuntu版本推荐

官方文档中提到使用Ubuntu18.04和Ubuntu20及以上版本的情况。这里推荐使用Ubuntu20.04版本。、

一方面编译源码要求使用Python 3.8版本,而Ubuntu20.04原生是Python3.8,不需要切换python版本。而在Ubuntu18.04需要额外去安装一个Python 3.8版本,事情会变得很麻烦。为了编译鸿蒙源码,需要切换本机的python版本为Python3.8,而这会导致系统其他依赖原Python 3.6版本软件无法运行,处理起来很麻烦,不安全也不优雅。

另一方面实际在编译RK3568产品时,也会遇到报错。报错原因是Ubuntu18.04的libc版本过低导致的,需要用高版本libc替换本机libc(该操作不安全)。

所以推荐使用Ubuntu20.04。

下载指定版本开源鸿蒙源码

下载指定版本开源鸿蒙源码,源码包中包含了轻量、小型、标准所有产品的源码。

从码云官方源码文档仓库中查看版本发布记录

zh-cn/release-notes · OpenHarmony/docs - 码云 - 开源中国 (gitee.com)

我想下载4.0版本,如下图,点击进去

在这里插入图片描述

推荐使用镜像站下载,直接打包好压缩包,避免过程中各种下载错误

在这里插入图片描述

编译开源鸿蒙4.0 RK3568开发板

执行prebuilts

在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。

bash build/prebuilts_download.sh

该步骤需要联网下载对应的依赖库,一般不会遇到问题。如该步骤遇到错误,参考后面《参考编译错误-执行build/prebuilts_download.sh失败》

安装库和工具集

使用命令行进行设备开发时,可以通过以下步骤安装编译OpenHarmony需要的库和工具。相应操作在Ubuntu环境中进行。

  1. 使用如下apt-get命令安装后续操作所需的库和工具:

    sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libc6-dev-amd64 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
    
    

    由于上面命令是鸿蒙官方主要基于ubuntu18.04测试的(猜测),并且是为了兼容大多数板子的开发环境,因此在ubuntu 20.04会存在有些软件安装不上的问题。如下图。但是下图环境下,我是能正常编译RK3568镜像的,因此不需要过于纠结这步是否全部软件都安装完善,后面编译时,存在问题的话,根据具体报错去解决。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 将Python 3.8设置为默认Python版本。

    查看Python 3.8的位置:

    which python3.8
    

    将Python和Python3切换为Python 3.8:

    sudo update-alternatives --install /usr/bin/python python {Python 3.8 路径} 1    #{Python 3.8 路径}为上一步查看的Python 3.8的位置
    sudo update-alternatives --install /usr/bin/python3 python3 {Python 3.8 路径} 1   #{Python 3.8 路径}为上一步查看的Python 3.8的位置
    

    **注意:**该步骤是个关键步骤,虽然ubuntu20.04 python版本默认是python3.8,但是鸿蒙源码编译要求执行python/python3命令执行的都是python3.8命令,而ubuntu20.04执行python命令执行的默认是python2.x命令。所以需要在命令行中分别敲python3和python,查看输出信息是否是python3.8。该步骤不完成会报错误 SyntaxError: invalid syntax 错误(见参考编译错误)

    操作参考文档链接:

    https://gitee.com/openharmony/docs/blob/OpenHarmony-4.0-Release/zh-cn/device-dev/quick-start/quickstart-pkg-install-package.md

安装编译工具hb

操作参考文档链接:

zh-cn/device-dev/quick-start/quickstart-pkg-install-tool.md · OpenHarmony/docs - 码云 - 开源中国 (gitee.com)

参考编译错误

SyntaxError: invalid syntax 错误

[OHOS INFO] ERROR at //build/templates/cxx/cxx.gni:889:26: Script returned non-zero exit code.
[OHOS INFO]         handler_result = exec_script(external_deps_script, arguments, "string")
[OHOS INFO]                          ^----------
[OHOS INFO] Current dir: /home/xiaoy/disk4/PowerHarmony_SDK_V1.0.1.0/out/rk3568/
[OHOS INFO] Command: /usr/bin/env /home/xiaoy/disk4/PowerHarmony_SDK_V1.0.1.0/build/templates/common/external_deps_handler.py --external-deps c_utils:utils hilog:libhilog ipc:ipc_single napi:ace_napi graphic_2d:surface --parts-src-flag-file build_configs/parts_src_flag.json --external-deps-temp-file gen/base/useriam/face_auth/frameworks/js/napi/face_auth__faceauth_external_deps_temp.json --sdk-base-dir ../../sdk/ohos-arm64 --sdk-dir-name sdk/ohos-arm64 --current-toolchain //build/toolchain/ohos:ohos_clang_arm64 --innerkits-adapter-info-file ../../build/ohos/inner_kits_adapter.json --component-override-map /home/xiaoy/disk4/PowerHarmony_SDK_V1.0.1.0/out/rk3568/build_configs/component_override_map.json
[OHOS INFO] Returned 1.
[OHOS INFO] stderr:
[OHOS INFO] 
[OHOS INFO] Traceback (most recent call last):
[OHOS INFO]   File "/home/xiaoy/disk4/PowerHarmony_SDK_V1.0.1.0/build/templates/common/external_deps_handler.py", line 23, in <module>
[OHOS INFO]     from scripts.util.file_utils import read_json_file, write_json_file  # noqa: E402
[OHOS INFO]   File "/home/xiaoy/disk4/PowerHarmony_SDK_V1.0.1.0/build/scripts/util/file_utils.py", line 102
[OHOS INFO]     gn_exe = os.path.join(code_dir, f'prebuilts/build-tools/{os_name}-x86/bin/gn')
[OHOS INFO]                                                                                 ^
[OHOS INFO] SyntaxError: invalid syntax
[OHOS INFO] 
[OHOS INFO] See //base/useriam/face_auth/frameworks/js/napi/BUILD.gn:16:1: whence it was called.
[OHOS INFO] ohos_shared_library("faceauth") {
[OHOS INFO] ^--------------------------------
[OHOS INFO] See //build/ohos/ohos_part.gni:25:16: which caused the file to be included.
[OHOS INFO]     _deps += [ get_label_info(module_label, "label_with_toolchain") ]
[OHOS INFO]                ^--------------------------------------------------
[OHOS INFO] has_hisysevent_part = false
[OHOS INFO] power_interface_service
[OHOS INFO] location_agnss
[OHOS INFO] power_interface_service
[OHOS INFO] ["--in_zip_path", "../../third_party/mindspore/mindspore-v1.8.1.zip", "--out_src_path", "../../third_party/mindspore/mindspore-src", "--patch_dir", "../../third_party/mindspore/patches/"]

解决:在ubuntu20.04中,执行python命令,默认执行的是python2.x版本,而鸿蒙要求的是python3.8版本。

sudo update-alternatives --install /usr/bin/python python {Python 3.8 路径} 1    #{Python 3.8 路径}为上一步查看的Python 3.8的位置

可使用update-alternatives命令切换python执行python3.8命令。确保在命令行中执行python,显示的是python3.8版本。

执行build/prebuilts_download.sh失败

npm install try times: 1
start npm install, please wait.
Traceback (most recent call last):
File "/data/harmony_work/build/prebuilts_download.py", line 376, in <module>
sys.exit(main())
File "/data/harmony_work/build/prebuilts_download.py", line 355, in main
result, error = _npm_install(args)
File "/data/harmony_work/build/prebuilts_download.py", line 209, in _npm_install
proc = subprocess.Popen(cmd, cwd=full_code_path, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib/python3.8/subprocess.py", line 854, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.8/subprocess.py", line 1702, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/data/harmony_work/prebuilts/build-tools/common/nodejs/current/bin/npm'

参考官方的Issues:https://gitee.com/openharmony/docs/issues/I85KPR

解决:该问题的报错过程中,可以看到是无法正常下载工具包的。尝试官方的Issues提到的解决方法也没有效果。这时候需要思考是否使用了翻墙等代理软件,将翻墙软件关闭,重新执行,发现该问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值