1 主机环境

CPU:E5-2680v3

内存:64GB(最低32GB以上因为编译快结束的阶段会占用24GB内存)

硬盘:512GB(最低300GB以上)

系统:Ubuntu 20.04

在之前的时候只能在Ubuntu 20.04上编译,现在在Ubuntu 22.04上也能编译了(仍然推荐使用20.04)

2 前置准备

2.1 配置gitee ssh公钥

使用gitee官网的方法,仅作记录。

SSH Key SSH 公钥

Gitee 提供了基于SSH协议Git服务,在使用SSH协议访问仓库之前,需要先配置好账户/仓库的SSH公钥。

2.1.1通过命令 ssh-keygen 生成 SSH Key:

ssh-keygen -t ed25519 -C "Gitee SSH Key"
  • -t key 类型

  • -C 注释

输出,如:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/git/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/git/.ssh/id_ed25519
Your public key has been saved in /home/git/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:ohDd0OK5WG2dx4gST/j35HjvlJlGHvihyY+Msl6IC8I Gitee SSH Key
The key's randomart image is:
+--[ED25519 256]--+
|    .o           |
|   .+oo          |
|  ...O.o +       |
|   .= * = +.     |
|  .o +..S*. +    |
|. ...o o..+* *   |
|.E. o . ..+.O    |
| . . ... o =.    |
|    ..oo. o.o    |
+----[SHA256]-----+
  • 中间通过三次回车键确定

2.1.2查看生成的 SSH 公钥和私钥:

ls ~/.ssh/

输出:

id_ed25519  id_ed25519.pub
  • 私钥文件 id_ed25519

  • 公钥文件 id_ed25519.pub

2.1.3读取公钥文件 ~/.ssh/id_ed25519.pub

cat ~/.ssh/id_ed25519.pub

输出,如:

ssh-ed25519 AAAA***5B Gitee SSH Key

复制终端输出的公钥。

2.1.4读取公钥文件 ~/.ssh/id_ed25519.pub

cat ~/.ssh/id_ed25519.pub

输出,如:

ssh-ed25519 AAAA***5B Gitee SSH Key

复制终端输出的公钥。

2.1.5复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,添加生成的 public key 添加到仓库中。

添加后,在终端(Terminal)中输入, 首次使用需要确认并添加主机到本机SSH可信列表。

ssh -T git@gitee.com

若返回 Hi XXX! You've successfully authenticated, but http://Gitee.com does not provide shell access. 内容,则证明添加成功。

2.2安装repo工具

curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo   
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests

2.3安装必备工具

下面是官方给出的需要依赖的库,其实并不全,不过影响不大,如果缺少依赖库的话,可以根据编译时的报错知道缺少了什么库。

 sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby default-jdk libssl-dev libtinfo5 genext2fs u-boot-tools mtools mtd-utils scons gcc-arm-none-eabi abootimg libelf-dev

3 获取OpenHarmony源码

拉取的是openharmony 5.0.0,最新版本是openharmony5.0.3

拉取命令:

mkdir openharmony 
cd openharmony 
repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony-5.0.0-Release  --no-repo-verify 
repo sync -c   
repo forall -c 'git lfs pull'

4 获取编译工具链

在编译openharmony时会使用这些下载的工具链。

下载命令:

bash build/prebuilts_download.sh

下载完成:

5 下载移植代码

下载命令:

git clone -b OpenHarmony-5.0-Release https://gitee.com/ohos-porting-communities/vendor_opc.git vendor/opc 
git clone -b OpenHarmony-5.0-Release https://gitee.com/ohos-porting-communities/device_board_opc.git device/board/opc 
git clone -b OpenHarmony-5.0-Release https://gitee.com/ohos-porting-communities/device_soc_opc.git device/soc/opc  


#下载香橙派5Plus内核 
git clone -b OpenHarmony-5.0-Release https://gitee.com/ohos-porting-communities/linux_5.10_opi.git kernel/linux/linux-5.10-opi

6 修改部分文件

6.1 在openharmony根目录下执行下面的命令:

cd build 
git apply ../device/board/opc/common/patches/001-build.diff

它会增加一个移植使用的子系统:

6.2 删除vendor/opc/opi5plus/config.json中的"init_feature_loader = true"这行配置

PS:其实第一个feature也可以删除,因为我们并没有使用ab分区,ab分区通常是用来进行OTA的。

6.3 用vendor/hihope/rk3568/security_config/sanitizer_check_list.gni替换vendor/opc/opi5plus/security_config/sanitizer_check_list.gni

上面这三步缺一不可,若不这样修改就会编译报错。

7 编译OpenHarmony

编译命令:

./build.sh --product-name opi5plus --build-type release --ccache

编译成功:

8 烧写到Orange Pi 5 Plus

烧写之前一定一定要清空flash

我使用Windows上的RKDevTool

进行烧写。当然也可以使用linux上的命令行工具rkdeveloptool进行烧写,不过会有点麻烦(需要使用rkdeveloptool逐个将image烧到存储介质对应的位置上),因为我用的是物理机编译,window烧录,所以选择使用较为方便的RKDevTool作为烧写工具。

此外我使用emmc作为启动使用的存储介质。

下面是使用rkdeveloptool作为烧写工具时可以参考的内容:

  • 这个是rkdeveloptool的链接:

GitHub - rockchip-linux/rkdeveloptool​

github.com/rockchip-linux/rkdeveloptool

  • 各个镜像在存储介质中的位置可以参考out/opi5plus/packages/phone/images/parameter.txt中的CMDLINE

使用RKDevTool进行烧写(编译完成后产生的镜像放在out/opi5plus/packages/phone/images目录下):

9 开机

不出意外的话应该可以正常开机了

以上来源为:**openharmony官方编译指南和社区大佬的文章**。如需了解更多关于OpenHarmony的编译、移植和部署,建议参考官方文档或相关社区资源,获取最准确和最新的信息。