【开源鸿蒙】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为例)
    • 六、问题解决
      • 6.1 找不到 libcoap 组件
      • 6.2 不识别 libhistreaminglink.a 文件格式
      • 6.3 找不到 xxx 命令
      • 6.4 导入包 xxx 失败
    • 七、参考链接

本文将会介绍,如何下载OpenHarmony 5.0源代码和工具链,让磁盘占用尽可能小的同时,还可以进行轻量系统的OpenHarmony开发(即源码编译构建)。最终实现了,从全量源码和工具链占用磁盘空间的67GB减少到15GB。

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

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、git-lfs、python3-pip和wget等命令行工具:

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用户名和邮箱,以及如何配置Gitee 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命令行工具

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

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

六、问题解决

6.1 找不到 libcoap 组件

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

Snipaste_2024-10-27_09-20-44

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

【解决方法】

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

    image-20241027092519303

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

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

6.2 不识别 libhistreaminglink.a 文件格式

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

image-20241027092920251

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

image-20241027093440252

【解决方法】执行命令:

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语句报错的,例如:

image-20241027152351106

【错误原因】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开源项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】Vue3.0(十五)Vue 3.0 中 hooks 的概念

🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年10月22日21点50分 背景:在一些情况下,前台的组件是可以复用的,那这些复用的对象和数据,为…

Prompt Engineering (Prompt工程)

2 prompt工程2大原则 2.1 给出清晰&#xff0c;详细的指令 策略1&#xff1a;使用分割符清晰的指示输出的不同部分&#xff0c;比如"",<>,<\tag>等分隔符 策略2&#xff1a;指定一个结构化的输出&#xff0c;比如json,html等格式 策略3&#xff1a;要…

Oracle视频基础1.1.2练习

1.1.2 需求&#xff1a; 查询oracle组件和粒度大小&#xff0c; select component,granule_size from v$sga_dynamic_components;Oracle SGA 中组件和粒度大小查询详解 在 Oracle 数据库的内存结构中&#xff0c;SGA&#xff08;System Global Area&#xff0c;系统全局区&am…

基于SSM房屋租赁管理系统的设计与实现

前言 房屋租赁管理系统&#xff0c;不仅可以改善用户线下到租赁公司进行查看房屋类型的局面以及预约信息等&#xff0c;还可以提供管理效率&#xff0c;同时也可以增强网站的竞争力。利用房屋租赁管理系统&#xff0c;可以有效地提高系统的人事的效率和信息化水平&#xff0c;…

Gateway 统一网关

一、初识 Gateway 1. 为什么需要网关 我们所有的服务可以让任何请求访问&#xff0c;但有些业务不是对外公开的&#xff0c;这就需要用网关来统一替我们筛选请求&#xff0c;它就像是房间的一道门&#xff0c;想进入房间就必须经过门。而请求想要访问微服务&#xff0c;就必须…

sa-token 所有的异常都是未登录异常的问题

在使用satoken的时候&#xff0c;有这么一个问题&#xff0c;就是不管我是什么错误&#xff0c;都会弹出未登录异常&#xff0c;起初的时候我以为satoken的拦截器会拦截所有的异常&#xff0c;但是今后测试才发现忽略了一点&#xff0c;也是最重要最容易忽视的一点。 如果我现在…

解决JeecgBoot微服务通过Gateway访问Swagger资源出现“Knife4j文档请求异常”

1.问题描述 基于jeecgboot单体版本,参照官方推荐的纯微服务项目拆分指南,对jeecgboot项目进行微服务拆分,将gateway和system模块启动成功后,通过gateway访问访问Swagger接口文档,出现“Knife4j文档请求异常”,如下图: 2.问题定位: 1.浏览器F12打开控制台,查看异常请…

【React】React 18:新特性与重大更新解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 React 18&#xff1a;新特性与重大更新解析并发渲染什么是并发渲染&#xff1f;…

Linux系统下串口AT指令控制EC20连接华为云物联网平台

一、前言 在当今万物互联的时代背景下&#xff0c;物联网技术的快速发展极大地推动了智能化社会的构建。作为其中的关键一环&#xff0c;设备与云端平台之间的通信变得尤为重要。本文介绍如何在Linux操作系统环境下&#xff0c;利用串口通信来实现EC20模块与华为云物联网平台的…

【JavaEE】【多线程】线程池

目录 一、线程池二、ThreadPoolExecutor类讲解2.1 构造方法2.1.1 corePoolSize和maximumPoolSize2.1.2 KeepAliveTime和unit2.1.3 workeQueue2.1.4 threadFactory2.1.5 handler 三、简易构造线程池四、自己实现一个简单线程池 一、线程池 线程池&#xff1a;线程池可以简单理解…

Vue.js 学习总结(11)—— Vue3 Hook 函数实战总结

前言 在 Vue 3 中&#xff0c;Hook 函数是一种特殊的函数&#xff0c;用于封装可重用的逻辑和状态管理。Hook 函数允许你在 Vue 组件中提取和复用逻辑&#xff0c;而不是将所有逻辑都放在组件的选项对象中。它们可以帮助你更好地组织代码&#xff0c;提高代码的可维护性和可测…

Elasticsearch 解析:倒排索引机制/字段类型/语法/常见问题

Elasticsearch 是一个分布式的开源搜索引擎&#xff0c;广泛用于全文搜索、分析和数据存储。它基于 Apache Lucene 构建&#xff0c;支持 RESTful 风格的 API&#xff0c;使得开发者能够高效地存储和检索数据。本文将详细讲解 Elasticsearch 的基本原理&#xff0c;特别是其倒排…

网页上的视频怎么下载下来?三种方法

分享三个简单好用的网页视频下载工具&#xff0c;值得使用&#xff01; 1.IDM IDM 是一款可以提高下载速度达5倍的工具&#xff0c;同时具有恢复、调度和组织下载的功能。如果由于网络问题或意外的电源中断&#xff0c;程序将恢复未完成的下载。 IDM 还具有一个完全功能的站点…

【Flask】一、安装与第一个测试程序

目录 Flask简介 安装Flask 安装pip&#xff08;Python包管理器&#xff09; 使用pip安装Flask 验证安装 创建Flask程序 创建应用 运行 访问测试 Flask简介 Flask是一个用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展&#xff0c;使其成为构建简单网站或复…

【经典论文阅读11】ESMM模型——基于贝叶斯公式的CVR预估

传统的CVR模型&#xff08;也就是直接对conversion rate建模的模型&#xff09;在实际应用中面临两个问题&#xff08;样本选择偏差与数据稀疏性问题&#xff09;。为了解决这两个问题&#xff0c;本文提出ESMM模型。该模型巧妙地利用用户行为序列去建模这个问题&#xff0c;从…

解决SpringBoot项目启动错误:找不到或无法加载主类

如何解决SpringBoot项目的“找不到或无法加载主类”启动错误 在开发SpringBoot应用时&#xff0c;经常可能会遇到一个启动错误&#xff1a;“错误&#xff1a;找不到或无法加载主类 com.example.controller.demo.DemoApplication”。本文将介绍三种解决这一问题的方法。 方法…

微信小程序中点击搜素按钮没有反应,可能是样式问题(按钮被其他元素覆盖或遮挡)

文章目录 1. 确认 bindtap 绑定在正确的元素上2. 检查是否有遮挡或重叠元素3. 检查 this 上下文绑定问题4. 清除微信小程序开发者工具的缓存5. 用微信开发者工具查看事件绑定6. 确保 handleSearch 没有拼写错误进一步调试 1、searchResults.wxml2、searchResults.wxss3、search…

偷懒总结篇|贪心算法|动态规划|单调栈|图论

由于这周来不及了&#xff0c;先过一遍后面的思路&#xff0c;具体实现等下周再开始详细写。 贪心算法 这个图非常好 122.买卖股票的最佳时机 II(妙&#xff0c;拆分利润) 把利润分解为每天为单位的维度&#xff0c;需要收集每天的正利润就可以&#xff0c;收集正利润的区间…

[C高手编程] 进程编程与IPC

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;C高手编程-面试宝典/技术手册/高手进阶⚡️⚡️&#x1f496;&#x1f496; 「C高手编程」专栏融合了作者十多年的C语言开发经验&#xff0c;汇集了从基础到进阶的关键知识点&#xff0c;是不可多得的知识宝典。如果你是即将…

基于SSM+小程序的旅游社交登录管理系统(旅游4)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 本旅游社交小程序功能有管理员和用户。管理员有个人中心&#xff0c;用户管理&#xff0c;每日签到管理&#xff0c;景点推荐管理&#xff0c;景点分类管理&#xff0c;防疫查询管理&a…