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提到的解决方法也没有效果。这时候需要思考是否使用了翻墙等代理软件,将翻墙软件关闭,重新执行,发现该问题解决。

<think>嗯,用户想在Ubuntu 20.04上安装CMake 4.0版本。首先,我需要确认Ubuntu 20.04默认的CMake版本是多少。根据经验,Ubuntu 20.04默认安装的是CMake 3.16版本,而用户需要的是4.0,这可能是一个误解,因为CMake的版本通常以3.x或更高版本发展,但4.0可能不存在。不过,也有可能用户指的是某个特定的4.0.x版本,比如4.0.0。 首先,我需要检查CMake的官方发布历史。查资料发现,CMake的主要版本是3.x系列,4.0可能是一个笔误,或者用户需要的是较旧的特定版本。比如,可能用户需要的其实是3.10或者更高的某个版本,比如3.20?或者用户可能混淆了版本号。例如,OpenCV有4.x版本,而CMake可能没有4.0的主版本。这个时候可能需要确认用户的具体需求。 如果用户确实需要CMake 4.0,但官方没有这个版本,可能需要提示用户确认版本号是否正确。如果用户指的是CMake 3.4.0或类似版本,那么需要调整步骤。但根据现有信息,假设用户确实需要安装一个特定的旧版本CMake 4.0,尽管这可能不存在,我需要给出可能的解决方案。 另一种可能是用户想从源码编译安装特定版本的CMake,比如4.0,但需要确认该版本是否存在。查阅CMake官网的发布记录,发现CMake的版本号是3.x系列,目前最新的是3.27.x,因此不存在4.0版本。因此,用户可能混淆了版本号,或者需要的是其他软件的4.0版本,比如OpenCV。但用户明确提到CMake 4.0,所以需要处理这个问题。 可能的情况是用户可能想要安装CMake的某个旧版本,比如3.4.0,或者用户误写成了4.0。因此,在回答中需要指出这一点,并提供安装旧版本的方法,例如从源码编译安装,同时提醒用户版本号可能的问题。 根据引用中的信息,用户之前可能处理过OpenCV的安装,例如引用[2]和[3]提到了OpenCV的编译安装。编译CMake的过程可能类似,需要下载源码、配置、编译和安装。同时,引用[4]提到了使用多线程编译,可以加快速度,但要根据CPU核心数调整。 因此,可能的步骤是: 1. 检查当前CMake版本,使用`cmake --version`确认。 2. 移除现有版本(如果需要)。 3. 下载所需的CMake版本源码(假设用户需要的是3.4.0或其他)。 4. 配置并编译安装,使用`./bootstrap`,`make -jN`,`sudo make install`。 5. 验证安装成功。 同时,需要注意权限问题和依赖安装,例如安装必要的库如libssl-dev等。 另外,用户可能需要通过添加第三方PPA来安装较新或旧版本的CMake,例如Kitware的PPA。例如,使用: sudo apt-get install cmake=version 但需要检查可用版本。如果官方仓库没有,可能需要源码安装。 最后,提醒用户确认所需版本的正确性,因为CMake没有4.0版本,可能存在误解。</think>### 在Ubuntu 20.04上安装CMake 4.0的步骤 #### 1. **确认当前CMake版本** Ubuntu 20.04默认安装的CMake版本为3.16.x,可通过以下命令查看: ```bash cmake --version ``` 若需要安装特定版本,需手动编译或使用第三方源[^4]。 --- #### 2. **卸载现有CMake(可选)** 如果已安装其他版本且需要完全替换,可执行: ```bash sudo apt remove cmake ``` --- #### 3. **安装依赖库** 编译CMake需安装以下依赖: ```bash sudo apt update sudo apt install build-essential libssl-dev ``` --- #### 4. **从源码编译安装CMake 4.0** **注意**:CMake官方版本中并无`4.0`主版本号,目前最新版本为`3.x`系列。若您需要的是类似`3.4.0`等版本,需调整下载链接。以下以`3.4.0`为例: 1. **下载源码并解压**: ```bash wget https://cmake.org/files/v3.4/cmake-3.4.0.tar.gz tar -xzvf cmake-3.4.0.tar.gz cd cmake-3.4.0 ``` 2. **配置和编译**: ```bash ./bootstrap make -j$(nproc) # 根据CPU核心数调整编译线程数[^4] ``` 3. **安装到系统**: ```bash sudo make install ``` 4. **验证版本**: ```bash cmake --version ``` --- #### 5. **通过Kitware PPA安装(推荐)** 若需更高版本(如`3.20+`),可通过Kitware官方PPA安装: ```bash sudo apt purge cmake sudo apt install apt-transport-https ca-certificates gnupg wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/kitware.gpg] https://apt.kitware.com/ubuntu/ focal main" | sudo tee /etc/apt/sources.list.d/kitware.list sudo apt update sudo apt install cmake ``` --- ### 注意事项 - **版本兼容性**:Ubuntu 20.04的软件包对CMake版本有依赖,强行降级可能导致系统不稳定。 - **源码安装路径**:默认安装到`/usr/local/bin`,可能与系统默认路径冲突,建议通过`export PATH=/usr/local/bin:$PATH`调整环境变量[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值