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

打印 上一主题 下一主题

主题 759|帖子 759|积分 2277



  
本文将会先容,怎样下载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等命令行工具:
  1. sudo apt install git git-lfs python3-pip wget
复制代码
此中,git-lfs是git的大文件存储工具,部分代码仓用到了大文件存储,因此必要下载;wget是后续我们必要使用到的命令行工具。
安装repo命令行工具,执行如下命令:
  1. # 创建目录
  2. mkdir ~/bin
  3. # 下载repo脚本
  4. curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
  5. # 下载repo依赖的软件包
  6. pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
复制代码
修改~/.profile文件,在最后追加:
  1. export PATH=$HOME/bin:$PATH
复制代码
实现修改PATH情况变量。
2.3 设置git用户根据

本节先容怎样设置本地git用户名和邮箱,以及怎样设置Gitee SSH公钥(使用SSH协议下载时必须设置):

  • 注册gitee帐号;
  • 设置gitee账号的SSH公钥和邮箱,具体操作参考gitee帮助中央;
  • 设置本地的git用户信息,执行如下命令:
    1. git config --global user.name "yourname"
    2. git config --global user.email "your-email-address"
    3. git config --global credential.helper store
    复制代码
    必要留意,邮箱要和gitee账号设置的邮箱同等。
  • 创建目录,用于存放OpenHarmony源码,执行如下命令:
    1. mkdir -p ~/ohos/OH5  # 用于存放OpenHarmony 5.0轻量系统最小代码
    2. cd ~/ohos/OH5        # 跳转到该目录,后续的命令都在这个目录下执行
    复制代码
三、下载OpenHarmony轻量系统最小源码

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

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


  • 从版本分支获取源码。可获取该版本分支的最新源码,包括版本发布后在该分支的合入。
    1. repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony-5.0.0-Release -g ohos:mini --no-repo-verify
    2. repo sync -c
    3. repo forall -c 'git lfs pull'
    复制代码
  • 从版本发布Tag节点获取源码。可获取与版本发布时完全同等的源码。
    1. repo init -u git@gitee.com:openharmony/manifest.git -b refs/tags/OpenHarmony-v5.0.0-Release -g ohos:mini --no-repo-verify
    2. repo sync -c
    3. repo forall -c 'git lfs pull'
    复制代码


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

通过repo + https 下载。


  • 从版本分支获取源码。可获取该版本分支的最新源码,包括版本发布后在该分支的合入。
    1. repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-5.0.0-Release -g ohos:mini --no-repo-verify
    2. repo sync -c
    3. repo forall -c 'git lfs pull'
    复制代码
  • 从版本发布Tag节点获取源码。可获取与版本发布时完全同等的源码。
    1. repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v5.0.0-Release -g ohos:mini --no-repo-verify
    2. repo sync -c
    3. 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命令行工具:
  1. export URL_PREFIX=http://repo.huaweicloud.com
  2. # 创建放置目录
  3. mkdir -pv prebuilts/build-tools/linux-x86/bin/
  4. # 下载GN压缩包
  5. wget $URL_PREFIX/openharmony/compiler/gn/20240510/gn-linux-x86-20240510.tar.gz
  6. # 解压GN压缩包
  7. tar -xvf gn-linux-x86-20240510.tar.gz -C prebuilts/build-tools/linux-x86/bin/
复制代码
4.2 下载并解压ninja命令行工具

执行如下命令,下载并解压ninja命令行工具:
  1. export URL_PREFIX=http://repo.huaweicloud.com
  2. # 下载ninja压缩包
  3. wget $URL_PREFIX/openharmony/compiler/ninja/20240416/ninja-linux-x86-20240416.tar.gz
  4. # 解压ninja压缩包
  5. tar -xvf ninja-linux-x86-20240416.tar.gz -C prebuilts/build-tools/linux-x86/bin/
复制代码
4.3 下载clang/LLVM编译工具链

执行如下命令,下载clang/LLVM编译工具链:
  1. # 下载clang/LLVM压缩包
  2. wget $URL_PREFIX/openharmony/compiler/clang/15.0.4-666b9b/linux/clang_linux-x86_64-666b9b-20240218.tar.gz
  3. # 查看压缩包中文件列表:
  4. # tar -tvf clang_linux-x86_64-666b9b-20240218.tar.gz
  5. # 解压clang/LLVM压缩包(到当前目录)
  6. tar -xvf clang_linux-x86_64-666b9b-20240218.tar.gz
  7. # 创建放置目录
  8. mkdir -pv prebuilts/clang/ohos/linux-x86_64/
  9. # 移动到prebuilts/clang/ohos/linux-x86_64目录,并重命名为llvm
  10. mv clang_linux-x86_64-666b9b-20240218 prebuilts/clang/ohos/linux-x86_64/llvm
复制代码
注: prebuilts目录下的命令行工具是由hb命令调用的,不必要手动设置情况变量。
4.4 下载RISC-V GCC交织编译工具链

执行如下命令,下载并解压RISC-V GCC工具:
  1. # 下载RISC-V GCC压缩包
  2. wget $URL_PREFIX/openharmony/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz
  3. # 创建RISC-V GCC放置目录
  4. mkdir -pv ~/ohos/toolchains/
  5. # 解压RISC-V GCC压缩包
  6. tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~/ohos/toolchains/
复制代码
解压完成后,还必要手动修改~/.profile文件(如果没有这个文件,则修改~/.bashrc),向最后添加一行:
  1. export PATH=~/ohos/toolchains/gcc_riscv32/bin:$PATH
复制代码
完成修改后,关闭当前shell会话,重新打开新的Shell会话,情况变量的修改将会见效。
完成以上所有解压之后,可以将相应的压缩包删撤除。
下载、解压、删除完上述所有压缩包后,磁盘空间占用如下:

可以看到仅有15G,不到67G的四分之一。
五、编译OpenHarmony轻量系统

5.1 安装hb命令行工具

OpenHarmony源码使用hb命令举行构建,hb本身源码位于build/hb目录内。
在OpenHarmony源码的顶层目录下,执行如下命令,安装hb命令:
  1. pip install build/hb/
复制代码
如果已有之前版本的hb命令,安装之前,可以将其卸载掉再安装:
  1. pip uninstall ohos-build
复制代码
5.2 安装Hi3861 SDK所需的命令行工具

Hi3861 SDK是使用scons构建的,必要scons命令,以及其他几个pip包。
【可选】执行背面的pip install之前,可以设置国内pip源,加速pip包安装(这里使用的是华为云镜像站,也可以使用其他镜像站):
  1. pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple
  2. pip config set global.timeout 120
  3. pip config set global.trusted-host repo.huaweicloud.com
复制代码
使用如下命令,安装Hi3861 SDK构建所需的命令行工具和pip包:
  1. pip install scons kconfiglib pycryptodome six ecdsa
复制代码
5.3 【可选】安装ccache命令行工具

安装ccache可以实现本地编译缓存,好处是重复编译构建速率会很快,缺点是会占用一定磁盘空间。
如果磁盘空间够用的话,推荐安装ccache。
执行如下命令,安装ccache:
  1. 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分组,默认没有下载这个代码仓。
【解决方法】

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

  • 修改完成后,重新repo sync -c同步代码,将会下载该源码仓;
  • 重新同步代码之后,重新hb build -f编译构建,将会成功;
6.2 不识别 libhistreaminglink.a 文件格式

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

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

【解决方法】执行命令:
  1. 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就是:
  1. pip install scons kconfiglib pycryptodome six ecdsa
复制代码
七、参考链接


  • https://gitee.com/openharmony/docs/tree/master/zh-cn/release-notes
  • https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/OpenHarmony-v5.0.0-release.md
  • 了解OpenHarmony开源项目

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表