写点什么

【开源鸿蒙】OpenHarmony 5.0 轻量系统最小开发环境搭建

作者:码匠许师傅
  • 2024-10-29
    江苏
  • 本文字数:4253 字

    阅读完需:约 14 分钟

【开源鸿蒙】OpenHarmony 5.0轻量系统最小开发环境搭建

本文将会介绍,如何下载源代码和工具链,让磁盘占用尽可能小的同时,还可以进行轻量系统上的 OpenHarmony 开发(进行源码编译构建)。最终实现了将磁盘占用从完整源码的 67G 减少到了 15G,不到完整源码的四分之一磁盘占用!

一、写在前面——为什么写本篇内容

OpenHarmony 5.0 发布了,该版本系统带来了很多的新特性,与此同时,系统源码占用的磁盘空间也非常大。例如,使用 repo 命令从 gitee 下载 OpenHarmony 5.0 源代码,下载完成后,整个源码目录占用的磁盘空间约为 51GB。在此基础之上,执行 prebuilts_download.sh 脚本,下载编译工具链完成后,整个目录的磁盘占用达到了 67GB。


对于想要在轻量系统(mini system)体验 OpenHarmony 的同学来说,67GB 的磁盘占用是难以接收的。单片机点个灯而已,要下载 67G 的代码和工具?


OpenHarmony 官方对于系统的分类中写道:


  • 轻量系统(mini system)

  • 面向 MCU 类处理器例如 Arm Cortex-M、RISC-V 32 位的设备,硬件资源极其有限,支持的设备最小内存为 128KiB,可以提供多种轻量级网络协议,轻量级的图形框架,以及丰富的 IOT 总线读写部件等。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。


轻量系统,基本上涵盖了 32 位的主流单片机。

二、准备工作——下载源码前的准备

2.1 准备基础环境

本节介绍基础软硬件环境的最低要求,包括 CPU、内存、硬盘和操作系统等。


磁盘空间:至少 100GB,推荐 1TB 及以上;


内存空间:至少 4GB,推荐 8GB 及以上;


CPU:x86_64 架构,至少 4 核,推荐 8 核及以上;


操作系统: Ubuntu 或 Debian


系统版本: 22.04(Ubuntu),10 (Debian)


其中操作系统可以是直接安装在物理机器上,也可以是虚拟机。如果使用的是虚拟机,需要注意给磁盘、内存、CPU 分配足够的资源。

2.2 准备命令行工具

本节主要介绍后续从 gitee 下载源码所需的工具,以及如何准备。


从 Gitee 下载 OpenHarmony 源码,需要用到 repo 和 git 两个命令行工具。其中,git 是分布式版本控制系统,可以通过 apt 包管理器下载和安装;repo 是基于 Python 脚本的多 git 仓管理工具,可以从 gitee 下载并安装(或设置)。


综上所述,首先需要安装 git 和 python 等命令:


sudo apt install git git-lfs python3-pip wget
复制代码


其中,git-lfs 是 git 的大文件存储工具,部分代码仓用到了大文件存储,因此需要下载;wget 是后续我们需要使用到的命令行工具。


安装 repo 命令行工具,执行如下命令:


# 创建目录mkdir ~/bin
# 下载repo脚本curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
# 下载repo依赖的软件包pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
复制代码


修改~/.profile文件,在最后追加:


export PATH=$HOME/bin:$PATH
复制代码


实现修改 PATH 环境变量。

2.3 配置 git 用户信息

本节介绍如何配置本地 git 用户名和邮箱,以及如何配置码云 SSH 公钥(使用 ssh 协议下载必须配置):


  1. 注册 gitee 帐号;

  2. 设置 gitee 账号的 SSH 公钥和邮箱,具体操作参考gitee帮助中心

  3. 配置本地的 git 用户信息,执行如下命令:

  4. 需要注意,邮箱要和 gitee 账号设置的邮箱一致。

  5. 创建目录,用于存放 OpenHarmony 源码,执行如下命令:

三、下载 OpenHarmony 轻量系统最小源码

3.1 使用 ssh 协议下载(推荐)

通过 repo + ssh 下载(需注册公钥,请参考码云帮助中心)。


  • 从版本分支获取源码。可获取该版本分支的最新源码,包括版本发布后在该分支的合入。

  • 从版本发布 Tag 节点获取源码。可获取与版本发布时完全一致的源码。


  • 注意:这里repo init添加了-g 参数,用于指定后续repo sync时同步 git 仓的 groups 属性值,实现了下载更少源码仓,即最终磁盘占用更小的目的。

3.2 使用 https 协议下载

通过 repo + https 下载。


  • 从版本分支获取源码。可获取该版本分支的最新源码,包括版本发布后在该分支的合入。

  • 从版本发布 Tag 节点获取源码。可获取与版本发布时完全一致的源码。


  • 注意:这里repo init添加了-g 参数,用于指定后续repo sync时同步 git 仓的 groups 属性值,实现了下载更少源码仓,即最终磁盘占用更小的目的。

四、下载 OpenHarmony 轻量系统构建工具

直接执行prebuilts_download.sh脚本可以下载所有当前平台的构建工具,其中大部分工具是用于构建“标准系统”时使用的,而构建“轻量系统”使用的工具非常少。


因此,为了减少磁盘空间占用,本节使用手动执行命令的方式下载轻量系统构建所需工具。


经实验,构建轻量系统(以 Hi3861 为例)需要使用到的工具仅有:


  • GN,Generate Ninja,可以生成 ninja,功能更强大;

  • ninja,轻量级构建工具,速度非常快;

  • 交叉编译工具链,Hi3861 是 riscv32-gcc;

  • clang_llvm(用到了 llvm-objcopy 命令,但 riscv32-gcc 中也有类似的命令行工具)

4.1 下载并解压 GN 命令行工具

执行如下命令,下载并解压 GN 命令行工具:


export URL_PREFIX=http://repo.huaweicloud.com
# 创建放置目录mkdir -pv prebuilts/build-tools/linux-x86/bin/
# 下载GN压缩包wget $URL_PREFIX/openharmony/compiler/gn/20240510/gn-linux-x86-20240510.tar.gz
# 解压GN压缩包tar -xvf gn-linux-x86-20240510.tar.gz -C prebuilts/build-tools/linux-x86/bin/
复制代码

4.2 下载并解压 ninja 命令行工具

执行如下命令,下载并解压 GN 命令行工具:


export URL_PREFIX=http://repo.huaweicloud.com
# 下载ninja压缩包wget $URL_PREFIX/openharmony/compiler/ninja/20240416/ninja-linux-x86-20240416.tar.gz
# 解压ninja压缩包tar -xvf ninja-linux-x86-20240416.tar.gz -C prebuilts/build-tools/linux-x86/bin/
复制代码

4.3 下载 clang/LLVM 编译工具链

执行如下命令,下载 clang/LLVM 编译工具链:


# 下载clang/LLVM压缩包wget $URL_PREFIX/openharmony/compiler/clang/15.0.4-666b9b/linux/clang_linux-x86_64-666b9b-20240218.tar.gz
# 查看压缩包中文件列表:# tar -tvf clang_linux-x86_64-666b9b-20240218.tar.gz
# 解压clang/LLVM压缩包(到当前目录)tar -xvf clang_linux-x86_64-666b9b-20240218.tar.gz
# 创建放置目录mkdir -pv prebuilts/clang/ohos/linux-x86_64/
# 移动到prebuilts/clang/ohos/linux-x86_64目录,并重命名为llvmmv clang_linux-x86_64-666b9b-20240218 prebuilts/clang/ohos/linux-x86_64/llvm
复制代码


注: prebuilts 目录下的命令行工具是由hb命令调用的,不需要手动设置环境变量。

4.4 下载交叉编译工具链 RISC-V GCC

执行如下命令,下载并解压 RISC-V GCC 工具:


# 下载RISC-V GCC压缩包wget $URL_PREFIX/openharmony/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz
# 创建RISC-V GCC放置目录mkdir -pv ~/ohos/toolchains/
# 解压RISC-V GCC压缩包tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~/ohos/toolchains/
复制代码


解压完成后,还需要手动修改~/.profile文件(如果没有这个文件,则修改~/.bashrc),向最后添加一行:


export PATH=~/ohos/toolchains/gcc_riscv32/bin:$PATH
复制代码


完成修改后,关闭当前 shell 会话,重新打开新的 Shell 会话,环境变量的修改将会生效。


完成以上所有解压之后,可以将相应的压缩包删除掉。


下载、解压、删除完上述所有压缩包后,磁盘空间占用如下:



可以看到仅有 15G,不到 67G 的四分之一。

五、编译 OpenHarmony 轻量系统

5.1 安装 hb 命令行工具

OpenHarmony 源码使用hb命令进行构建,hb本身源码位于build/hb目录内。


在 OpenHarmony 源码的顶层目录下,执行如下命令,安装hb命令:


pip install build/hb/
复制代码


如果已有之前版本的hb命令,安装之前,可以将其卸载掉再安装:


pip uninstall ohos-build
复制代码

5.2 安装 Hi3861 SDK 所需的命令行工具

Hi3861 SDK 是使用scons构建的,需要scons命令,以及其他几个 pip 包。


【可选】执行后面的pip install之前,可以配置国内 pip 源,加速 pip 包安装(这里使用的是华为云镜像站,也可以使用其他镜像站):


pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simplepip config set global.timeout 120pip config set global.trusted-host repo.huaweicloud.com
复制代码


使用如下命令,安装 Hi3861 SDK 构建所需的命令行工具和 pip 包:


pip install scons kconfiglib pycryptodome six ecdsa
复制代码

5.3 【可选】安装 ccache 命令行工具

安装 ccache 可以实现本地编译缓存,好处是重复编译构建速度会很快,缺点是会占用一定磁盘空间。


如果磁盘空间够用的话,推荐安装 ccache。


执行如下命令,安装 ccache:


sudo apt install ccache
复制代码

5.4 编译 OpenHarmony 轻量系统(以 Hi3861 为例)

首先,执行hb set命令,选择产品,一次选择mini->hispark_pegasus_mini_system




接着,执行hb build -f命令,进行构建,构建完成后可以看到如下输出:



可以看到,此时 Hi3861 固件的 bin 文件已经生成了:



elf 文件的代码段、数据段、BSS 段信息:


六、问题解决

6.1 找不到 libcoap 组件

【问题现象】执行hb build命令失败,有类似报错信息:“find component libcoap failed”,如下图:



【问题原因】5.0.0 Release 版本(tag 版本)中,third_party/libcoap仓不是ohos:mini分组,默认没有下载这个代码仓。


【解决方法】


  1. 手动修改.repo/manifests/ohos/ohos.xml文件,groups属性中添加一个ohos:mini,修改如下:


  2. 修改完成后,重新repo sync -c同步代码,将会下载该源码仓;

  3. 重新同步代码之后,重新hb build -f编译构建,将会成功;

6.2 不识别 libhistreaminglink.a 文件格式

【问题现象】执行hb build命令失败,有类似“libhistreaminglink.a: file format not recognized”的报错信息,如下图所示:



【问题原因】没有执行大文件同步命令(git lfs pull)导致的。排查过程:



【解决方法】执行命令:


repo forall -c 'git lfs pull'
复制代码

6.3 找不到 xxx 命令

xxx 可能为 gn、ninja、riscv32-unknown-elf-gcc、scons,这属于一类问题,统一归为一类。


【问题现象】执行hb build命令失败,有类似“xxx: command not found”的报错。


【问题原因】PATH 环境变量中找不到对应的命令,使用which xxx进行测试,也找不到对应命令。


【解决方法】查看文章前面对应章节,仔细核对步骤是否有遗漏、错误,重新进行一遍通常可以解决。

6.4 导入包 xxx 失败

【问题现象】执行hb build命令失败,有 py 脚本的import语句报错的,例如:



【错误原因】Python 环境缺少相关包。


【解决方法】查看前面相关章节,找到pip install命令,重新执行一遍,对于 Hi3861 就是:


pip install scons kconfiglib pycryptodome six ecdsa
复制代码

七、参考链接

  1. https://gitee.com/openharmony/docs/tree/master/zh-cn/release-notes

  2. https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/OpenHarmony-v5.0.0-release.md

  3. 了解OpenHarmony开源项目


发布于: 刚刚阅读数: 5
用户头像

软件工程师,开源爱好者 2018-10-02 加入

擅长物联网相关技术;热爱折腾各种开源软件和开源硬件。 曾获称号: 华为开发者专家(HDE); 电子发烧友最有价值专家(MVP); 51CTO最有价值专家(MVP); OpenHarmony第20位开发者; OpenHarmony开发者贡献奖

评论

发布
暂无评论
【开源鸿蒙】OpenHarmony 5.0轻量系统最小开发环境搭建_OpenHarmony_码匠许师傅_InfoQ写作社区