OpenharmonyOS+RK3568,【编译&烧录】

文章目录

  • [1. 摘要 ✨](#1. 摘要 ✨)
  • [2. 代码下载 📩](#2. 代码下载 📩)
  • [3. 编译 🖥️](#3. 编译 🖥️)
  • [4. 修改&适配 ✂️](#4. 修改&适配 ✂️)
    • [4.1 编译框架基本概念](#4.1 编译框架基本概念)
    • [4.2 vendor & device 目录](#4.2 vendor & device 目录)
    • [4.3 内核编译](#4.3 内核编译)
      • [4.3.1 如何修改、适配自己的开发板?](#4.3.1 如何修改、适配自己的开发板?)
    • [4.4 修改外设驱动](#4.4 修改外设驱动)
  • [5. 烧录&验证 📋](#5. 烧录&验证 📋)
  • 参考

1. 摘要 ✨

本篇主要记录如何编译OpenHarmony 4.1 版本,并且在RK3568上烧录、运行的过程。

其中,涉及到一些解决问题的思路和学习笔记,如果对你有帮助请点赞、转发、收藏,也非常欢迎各位小伙伴评论,交流。😊💐👍👍👍


2. 代码下载 📩

请参考官方文档【1】
注意:版本要下载正确[OpenHarmony-v4.1-Release]

bash 复制代码
repo init -u [email protected]:openharmony/manifest.git -b OpenHarmony-v4.1-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

3. 编译 🖥️

关于编译,可能遇到的问题会比较多,不过也不要担心,只要严格按照文档中的步骤进行操作,安装必须的依赖,就不会有问题。

参考【2】。

建议使用安装Ubuntu的虚拟机或者Ubuntu主机,博主使用WSL2编译遇到各种问题,解决花费了大量时间,得不偿失

最重要的不步骤是安装库和工具集:

✅ 使用如下apt-get命令安装后续操作所需的库和工具:

bash 复制代码
sudo apt-get update; sudo apt-get install binutils; sudo apt-get install binutils-dev; sudo apt-get install git; sudo apt-get install git-lfs; sudo apt-get install gnupg; sudo apt-get install flex; sudo apt-get install bison; sudo apt-get install gperf; sudo apt-get install build-essential; sudo apt-get install zip; sudo apt-get install curl; sudo apt-get install zlib1g-dev; sudo apt-get install gcc-multilib; sudo apt-get install g++-multilib; sudo apt-get install gcc-arm-linux-gnueabi; sudo apt-get install libc6-dev-i386; sudo apt-get install libc6-dev-amd64; sudo apt-get install lib32ncurses5-dev; sudo apt-get install x11proto-core-dev; sudo apt-get install libx11-dev; sudo apt-get install lib32z1-dev; sudo apt-get install ccache; sudo apt-get install libgl1-mesa-dev; sudo apt-get install libxml2-utils; sudo apt-get install xsltproc; sudo apt-get install unzip; sudo apt-get install m4; sudo apt-get install bc; sudo apt-get install gnutls-bin; sudo apt-get install python3.9; sudo apt-get install python3-pip; sudo apt-get install ruby; sudo apt-get install genext2fs; sudo apt-get install device-tree-compilersudo apt-get install make; sudo apt-get install libffi-dev; sudo apt-get install e2fsprogs; sudo apt-get install pkg-config; sudo apt-get install perl; sudo apt-get install openssl; sudo apt-get install libssl-dev; sudo apt-get install libelf-dev; sudo apt-get install libdwarf-dev; sudo apt-get install u-boot-tools; sudo apt-get install mtd-utils; sudo apt-get install cpio; sudo apt-get install doxygen; sudo apt-get install liblz4-tool; sudo apt-get install openjdk-8-jre; sudo apt-get install gcc; sudo apt-get install g++; sudo apt-get install texinfo; sudo apt-get install dosfstools; sudo apt-get install mtools; sudo apt-get install default-jre; sudo apt-get install default-jdk; sudo apt-get install libncurses5; sudo apt-get install apt-utils; sudo apt-get install wget; sudo apt-get install scons; sudo apt-get install python3.9-distutils; sudo apt-get install tar; sudo apt-get install rsync; sudo apt-get install git-core; sudo apt-get install libxml2-dev; sudo apt-get install lib32z-dev; sudo apt-get install grsync; sudo apt-get install xxd; sudo apt-get install libglib2.0-dev; sudo apt-get install libpixman-1-dev; sudo apt-get install kmod; sudo apt-get install jfsutils; sudo apt-get install reiserfsprogs; sudo apt-get install xfsprogs; sudo apt-get install squashfs-tools; sudo apt-get install pcmciautils; sudo apt-get install quota; sudo apt-get install ppp; sudo apt-get install libtinfo-dev; sudo apt-get install libtinfo5; sudo apt-get install libncurses5-dev; sudo apt-get install libncursesw5; sudo apt-get install libstdc++6; sudo apt-get install gcc-arm-none-eabi; sudo apt-get install vim; sudo apt-get install ssh; sudo apt-get install locales; sudo apt-get install libxinerama-dev; sudo apt-get install libxcursor-dev; sudo apt-get install libxrandr-dev; sudo apt-get install libxi-dev

✅ 将Python 3.8设置为默认Python版本。

查看Python 3.8的位置:

bash 复制代码
which python3.8

如果无输出请在环境中安装python3.8或以上版本,以下安装命令可作为python3安装的参考:

bash 复制代码
sudo apt-get install python3
sudo apt-get install python-is-python3

查询python是否可用符合版本要求

bash 复制代码
python --version

如果输出高于3.8,则版本符合要求,若低于3.8可用以下方式安装Python3.8:

bash 复制代码
cd
mkdir python_install     #新建路径,存储python的安装包
cd python_install

wget https://mirrors.huaweicloud.com/python/3.8.10/Python-3.8.10.tgz    #从官网获取Python3.8安装包,此处以3.8.10版本为例
tar -xzf Python-3.8.10.tgz 
cd Python-3.8.10

./configure --enable-optimizations --prefix=/usr/local/python3.8    #编译和安装python3.8
make -j$(nproc)
sudo make install

/usr/local/python3.8/bin/python3.8 --version    #确认python3.8是否安装成功

sudo update-alternatives --install /usr/bin/python python /usr/local/python3.8/bin/python3.8 1     #将Python和Python3切换为Python 3.8:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/python3.8/bin/python3.8 1

环境依赖安装、配置好后,OpenHarmony仓也有编译前置依赖,直接执行脚本即可:

bash 复制代码
bash build/prebuilts_download.sh

然后,再安装编译工具hb:

✅ 在源码根目录运行如下命令安装hb并更新至最新版本。

bash 复制代码
python3 -m pip install --user build/hb

✅ 设置环境变量。

bash 复制代码
vim ~/.bashrc

将以下命令拷贝到.bashrc文件的最后一行,保存并退出。

bash 复制代码
export PATH=~/.local/bin:$PATH

执行如下命令更新环境变量。

bash 复制代码
source ~/.bashrc

✅ 在源码目录执行"hb help",界面打印以下信息即表示安装成功。


最后,参考【3】,编译源码:

bash 复制代码
/build.sh --product-name rk3568 --ccache

经过几个小时的编译,可以看到,终端提示编译成功。


查看,编译后的镜像:



固件 说明
boot_linux.img 这是包含 Linux 内核的镜像文件,负责启动 Openharmony 系统的核心功能
chip_ckm.img
chip_prod.img 该镜像文件用于芯片制造商在芯片生产过程中烧录到芯片中的系统镜像
config.cfg 烧写工具的配置文件,可以直接导入烧写工具显示需要烧写的选项
eng_system.img 这是用于工程调试和测试的系统镜像文件,包含了额外的调试工具和功能
MiniLoaderAll.bin 这是一个引导加载程序,负责启动 Openharmony 系统的初始化过程
parameter.txt 包含分区信息
ramdisk.img 该镜像文件包含一个临时文件系统,用于在系统启动过程中提供临时存储 和加载所需的文件
resource.img 该镜像文件包含 Openharmony 系统所需的资源文件,如字体,图标,音 频等。
sys_prod.img 这是用于生产环境的系统镜像文件,用于制造商在设备生产过程中烧录到 设备中。
system.img 这是 Openharmony 系统的主要镜像文件,包含了操作系统的核心组件, 库和应用程序
uboot.img 这是 U-boot 引导加载程序的镜像文件,用于初始化硬件设备和加载操作 系统
updater.img 这是用于系统升级的镜像文件,包含了系统更新时所需的文件和信息
userdata.img 该镜像文件包含用户的数据和设置,如应用程序数据,用户配置等
vendor.img 该镜像文件包含设备供应商提供的特定驱动程序,库和配置文件


进行到这一步,说明编译环境,编译依赖都没问题。

那想要让OpenHarmony在我们的板子上跑起来,还需要修改一下内核配置、外设驱动等,下面我们继续。


4. 修改&适配 ✂️

4.1 编译框架基本概念

OpenHarmony 的编译框架是基于模块化的,从大到小依次划分为产品,子系统集(领域), 子系统,部件,模块,特性。这种模块化的树状编译框架,非常方便根据目标产品硬件资源 的大小进行灵活的裁剪,从而实现"统一 OS,弹性部署"的目标。

✅ 产品:产品是基于解决方案为开发板的完整产品,主要包含产品对 OS 的适配、部件拼装 配置、启动配置和文件系统配置等。build.sh 编译的时候通过--product-name 编译选项指 定;hb 编译的时候通过 hb set 进行设置。

✅ 子系统集:OpenHarmony 技术架构中有四大子系统集:"系统基本能力子系统集"、"基 础软件服务子系统集"、"增强软件服务子系统集"、"硬件服务子系统集" 。四大子 系统不会直接出现在编译选项或者参数中,而是有对应的一级源代码文件夹:"系统基本 能力子系统集"对应源码 foundation 文件夹;"基础软件服务子系统集"和"硬件服务子 系统集"对应源码 base 文件夹;"增强软件服务子系统集"对应源码 domains 文件夹。

✅ 子系统:子系统是一个逻辑概念,它具体由对应的部件构成。在多设备部署场景下,支持 根据实际需求裁剪某些非必要的子系统或部件。

✅ 部件:对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和 编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。

✅ 模块:模块就是编译子系统的一个编译目标,部件也可以是编译目标。

✅ 特性:特性是部件用于体现不同产品之间的差异。

各部分间的关系:

一个产品(product)可以包含 n 个子系统(subsystem),一个子系统可以包含 n 个部件 (component),一个部件只能属于一个子系统。一个部件可以包含 n 个模块(module),一个模块 只能属于一个部件。 不同产品中的相同部件可以通过特性(feature)进行差异化定义 ,子系统集(domain)在源 码一级根目录有体现。

如下图所示:

总结一下就是:

  • 子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统。
  • 部件是模块的集合,一个模块只能归属于一个部件。
  • 通过产品配置文件配置一个产品包含的部件列表,部件不同的产品配置可以复用。
  • 部件可以在不同的产品中实现有差异,通过变体或者特性feature实现。
  • 模块就是编译子系统的一个编译目标,部件也可以是编译目标。

关于编译,后面我们单独开个专题讲


4.2 vendor & device 目录

在编译的时候,输入编译命令,如下所示:

bash 复制代码
/build.sh --product-name rk3568 --ccache

从编译日志中,重点要了解和学习的目录为 vendor 和 device 目录。

bash 复制代码
vendor/hihope/rk3568
......
device/board/rockchip/rk3568

endor 目录是以 vendor/{产品解决方案厂商}/{产品名称}来存放的。 进入 vendor/hihope/rk3568 目录下,有三个很重要的文件。 产品解决方案,在 config.json 文件中进行配置。

ohos.build 文件是子系统的配置文件,每个子系统有 ohos.build 配置文件,该文件中有添 加的组件配置。

device/board/hihope/rk3568/device.gni

device/board/hihope/rk3568/config.gni config.gni 文件配置开发板相关的编译配置。


4.3 内核编译

linux 内核编译脚本的是放在 device/board/hihope/rk3568/kernel 目录下的build_kernel.sh文件。

OpenHarmony 编译脚本是通过打补丁的方式来适配不同的平台, 不同的平台有自己的内核补丁。
注意,理解这一点很重要

编译脚本会先把 kernel/linux/linux-5.10 拷贝到 out/kernel/src_tmp/linux-5.10/, 然后打上 3568 的内核补丁patch -p1 < kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch后编译生成自 己的镜像,然后编译内核镜像。


4.3.1 如何修改、适配自己的开发板?

✅ 首先进入内核基础目录 kernel/linux/linux-5.10 打上 kernel.patch,这样我们就有了一个完 整的内核代码;

✅ 进入 kernel/linux/linux-5.10/arch/arm64/boot/dts/rockchip 目录,加入自己的板级 dts 和 相关 dtsi 配置;

✅ 修改后生成新的内核补丁 kernel.patch,新的 kernel.patch 替换掉 kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch;

经过上述步骤,这样完全编译出的镜像就支持自己的板子了。


4.4 修改外设驱动

TBD.


5. 烧录&验证 📋

我们使用RKDevTool工具烧写镜像:


右键,导入配置,然后点击执行。


参考

【1】OpenHarmony/docs/sourcecode-acquire.md

【2】基于命令行开发,搭建开发环境

【3】编译构建指导

相关推荐
雪域迷影1 天前
OpenHarmony全局资源调度管控子系统之内存管理部件
openharmony
jklinux2 天前
OpenHarmony-简单的HDF驱动
openharmony·hdf驱动
晚秋大魔王3 天前
openharmony 4.1 运行busybox工具包(保姆教程)
openharmony·busybox·开源鸿蒙
PLUS_WAVE9 天前
【CUDA 编译 bug】ld: cannot find -lcudart
服务器·c++·bug·环境·编译·cuda·ld
雪域迷影9 天前
OpenHarmony之电源模式定制开发指导
openharmony·电源模式
智驾9 天前
Openharmony 和 HarmonyOS 区别?
harmonyos·openharmony
TARDIS_202012 天前
OpenHarmony-Risc-V上运行openBLAS中的benchmark
risc-v·openharmony
少年的云河月13 天前
OpenHarmony Camera开发指导(五):相机预览功能(ArkTS)
harmonyos·openharmony·camera·相机开发
少年的云河月16 天前
OpenHarmony Camera开发指导(四):相机会话管理(ArkTS)
harmonyos·相机·openharmony·camera