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官网的方法,仅作记录。
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的编译、移植和部署,建议参考官方文档或相关社区资源,获取最准确和最新的信息。