当前位置: 首页 > news >正文

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

活动图片

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

    • 一、写在前面——为什么写本篇内容
    • 二、准备工作——下载源码前的准备
      • 2.1 准备基础环境
      • 2.2 准备命令行工具
      • 2.3 配置git用户信息
    • 三、下载OpenHarmony轻量系统最小源码
      • 3.1 使用ssh协议下载(推荐)
      • 3.2 使用https协议下载
    • 四、下载OpenHarmony轻量系统构建工具
      • 4.1 下载并解压GN命令行工具
      • 4.2 下载并解压ninja命令行工具
      • 4.3 下载clang/LLVM编译工具链
      • 4.4 下载交叉编译工具链RISC-V GCC
    • 五、编译OpenHarmony轻量系统
      • 5.1 安装hb命令行工具
      • 5.2 安装Hi3861 SDK所需的命令行工具
      • 5.3 【可选】安装ccache命令行工具
      • 5.4 编译OpenHarmony轻量系统(以Hi3861为例)
    • 六、参考链接

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

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

这么大的磁盘占用,对于想要体验在轻量系统(mini system)上跑OpenHarmony的同学来说,67GB的磁盘占用是无法接收的。

本文将会介绍,如何下载源代码和工具链,让磁盘占用尽可能小的同时,还可以进行轻量系统上的OpenHarmony开发(进行源码编译构建)。

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用户信息,执行如下命令:

    git config --global user.name "yourname"
    git config --global user.email "your-email-address"
    git config --global credential.helper store
    

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

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

    mkdir -p ~/ohos/OH5  # 用于存放OpenHarmony 5.0轻量系统最小代码
    cd ~/ohos/OH5        # 跳转到该目录,后续的命令都在这个目录下执行
    

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

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

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

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

    repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony-5.0.0-Release -g ohos:mini --no-repo-verify
    repo sync -c
    repo forall -c 'git lfs pull'
    
  • 从版本发布Tag节点获取源码。可获取与版本发布时完全一致的源码。

    repo init -u git@gitee.com:openharmony/manifest.git -b refs/tags/OpenHarmony-v5.0.0-Release -g ohos:mini --no-repo-verify
    repo sync -c
    repo forall -c 'git lfs pull'
    
  • 注意:这里repo init添加了-g参数,用于指定后续repo sync时同步git仓的groups属性值,实现了下载更少源码仓,即最终磁盘占用更小的目的。

3.2 使用https协议下载

通过repo + https 下载。

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

    repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-5.0.0-Release -g ohos:mini --no-repo-verify
    repo sync -c
    repo forall -c 'git lfs pull'
    
  • 从版本发布Tag节点获取源码。可获取与版本发布时完全一致的源码。

    repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v5.0.0-Release -g ohos:mini --no-repo-verify
    repo sync -c
    repo forall -c 'git lfs pull'
    
  • 注意:这里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目录,并重命名为llvm
mv 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会话,环境变量的修改将会生效。

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

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

image-20241024005857381

可以看到仅有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/simple
pip config set global.timeout 120
pip 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

image-20241024003520708

image-20241024003552692

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

image-20241024004137235

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

image-20241024004250846

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

image-20241024004511674

六、参考链接

  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开源项目

http://www.mrgr.cn/news/57386.html

相关文章:

  • kubelet PLEG实现
  • 从零开始学PHP之函数
  • LabVIEW提高开发效率技巧----离线调试
  • 征服ES(ElasticSearch)的慢查询实战
  • kotlin 入门总结
  • STM32—旋转编码器控制直流电机(标准库)
  • AI自主学习:未来的智能系统
  • 近似推断 - 最大后验推断和稀疏编码篇
  • AI学习指南深度学习篇-对比学习的变种
  • Python | Leetcode Python题解之第503题下一个更大元素II
  • SELinux详解
  • Golang | Leetcode Golang题解之第504题七进制数
  • 一文彻底搞透Redis的数据类型及具体的应用场景
  • 重温Java基础语法随笔录
  • 【QT】常用控件(四)
  • 12_Linux进程管理命令详解
  • 使用Dask在多块AMD GPU上加速XGBoost
  • 深度学习(五):语音处理领域的创新引擎(5/10)
  • 大模型的特点、重要概念及工作方式详解
  • Leetcode 875 KoKo Eats banana
  • 问:数据库,脏读、幻读、不可重复读~
  • 分布式系统集群中节点管理
  • C++ -stack、queue
  • Golang | Leetcode Golang题解之第503题下一个更大元素II
  • 如何在 Debian VPS 上使用 mod_wsgi 和 Apache 运行 Django,并使用 virtualenv Python 环境
  • 【thinkphp8】00007 内置服务器,切换php版本