本文将会介绍,如何下载源代码和工具链,让磁盘占用尽可能小的同时,还可以进行轻量系统上的 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 协议下载必须配置):
注册 gitee 帐号;
设置 gitee 账号的 SSH 公钥和邮箱,具体操作参考gitee帮助中心;
配置本地的 git 用户信息,执行如下命令:
需要注意,邮箱要和 gitee 账号设置的邮箱一致。
创建目录,用于存放 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目录,并重命名为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 会话,环境变量的修改将会生效。
完成以上所有解压之后,可以将相应的压缩包删除掉。
下载、解压、删除完上述所有压缩包后,磁盘空间占用如下:
可以看到仅有 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
ckgw.cdhgs.com
ckgw.borkjc.com
ckgw.huoyiyingshi.com
ckgw.chinachaiyao.com
ckgw.njhhcw.com
ckgw.kangshungcsl.com
ckgw.haixiaocdn.com
ckgw.jszcxny.com
ckgw.baiyichi.com
ckgw.chengducxwc.com
ckgw.seemlgo.com
ckgw.shyachao.com
ckgw.dhl-d.com
ckgw.tajqzl.com
ckgw.hzsunbyte.com
ckgw.tjzxjy.com
ckgw.qrpress.com
ckgw.zhanhao118.com
ckgw.marsdrinkschina.com
ckgw.xjlqcl.com
ckgw.5000news.com
ckgw.2500trip.com
ckgw.htsyfs.com
ckgw.hmgjjd.com
ckgw.tcccpsb.com
ckgw.hfsmttp.com
ckgw.nnlianbao.com
ckgw.xinchengabc.com
ckgw.njns56.com
ckgw.gzlcjzs.com
ckgw.xinlvchuang.com
ckgw.juanbanjicj.com
ckgw.tongtaijituan.com
ckgw.lydsmp.com
ckgw.shinenergygroup.com
ckgw.jingranchimian.com
ckgw.tj-shengming.com
ckgw.njxlkhs.com
ckgw.shzljr.com
ckgw.guanlinyouxuan.com
ckgw.ynyoutu.com
ckgw.jiadalong.com
ckgw.jumeizi.com
ckgw.zhs888.com
ckgw.cnaoxin.com
ckgw.afu365.com
ckgw.tzhyex.com
ckgw.xincaiit.com
ckgw.senmaohuanbao.com
ckgw.bjqunlemuye.com
ckgw.lxtxqh.com
ckgw.yuchentimes.com
ckgw.hebeihongqi.com
ckgw.ssyhmma.com
ckgw.hyl98.com
ckgw.youhezhixuan.com
ckgw.jilinsport.com
ckgw.wychyq.com
ckgw.gdhrgk.com
ckgw.jzha101.com
ckgw.lutuohb.com
ckgw.sgxinfeng.com
ckgw.bjyongxuan.com
ckgw.jxtrfund.com
ckgw.fyjyzsgs.com
ckgw.zgygzl.com
ckgw.clwzycgp.com
ckgw.wencfcw.com
ckgw.zmuoo.com
ckgw.xphysc.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分组,默认没有下载这个代码仓。
【解决方法】
手动修改.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)导致的。排查过程:
【解决方法】执行命令:
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
标签:5.0,OpenHarmony,repo,com,ckgw,源码,linux,轻量,下载 From: https://www.cnblogs.com/bkbk123/p/18538508