OpenharmonyOS+RK3568,【编译烧录】

请添加图片描述

文章目录

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


1. 摘要 ✨

本篇主要记录如何编译OpenHarmony 4.1 版本,并且在RK3568上烧录、运行的过程。
其中,涉及到一些解决问题的思路和学习笔记,如果对你有帮助请点赞、转发、收藏,也非常欢迎各位小伙伴评论,交流。😊💐👍👍👍


2. 代码下载 📩

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

repo init -u git@gitee.com: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命令安装后续操作所需的库和工具:

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的位置:

which python3.8

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

sudo apt-get install python3
sudo apt-get install python-is-python3

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

python --version

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

cd
mkdir python_install     #新建路径,存储python的安装包
cd python_installwget 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 build/prebuilts_download.sh

然后,再安装编译工具hb:
✅ 在源码根目录运行如下命令安装hb并更新至最新版本。

python3 -m pip install --user build/hb

✅ 设置环境变量。

vim ~/.bashrc

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

export PATH=~/.local/bin:$PATH

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

source ~/.bashrc

✅ 在源码目录执行"hb help",界面打印以下信息即表示安装成功。
在这里插入图片描述


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

/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 目录

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

/build.sh --product-name rk3568 --ccache

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

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】编译构建指导

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习模型优化:如何让数据科学更智能?

深度学习模型优化:如何让数据科学更智能? 一、引言:为什么优化深度学习模型如此重要? 深度学习的应用已经渗透到数据科学的各个领域,从图像识别到自然语言处理,从推荐系统到金融风控,每一个智能模型都依赖于数据驱动的训练。然而,一个模型的性能不仅仅取决于其架构,…

学习Python的第二天之网络爬虫

30岁程序员学习Python的第二天之网络爬虫的信息提取 BeautifulSoup库 地址&#xff1a;https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/ 1、BeautifulSoup4安装 在windows系统下通过管理员权限运行cmd窗口 运行pip install beautifulsoup4 测试实例 import requests…

n8n 键盘快捷键和控制键

n8n 键盘快捷键和控制键 工作流控制键画布操作移动画布画布缩放画布上的节点操作选中一个或多个节点时的快捷键 节点面板操作节点面板分类操作 节点内部操作 n8n 为部分操作提供了键盘快捷键。 工作流控制键 Ctrl Alt n&#xff1a;创建新工作流Ctrl o&#xff1a;打开工作…

keil+vscode+腾讯ai助手

嵌入式软件开发 这个是之前一直想写的开发方式&#xff0c;不过上份工作一直在忙&#xff0c;没有抽出时间花在上面&#xff0c;现在空下来好好写一写吧&#xff01;标题软件安装 关于VSCode以及Keil的安装可以在以下链接中点击浏览 VSCode安装 Keil5安装 CubeMx安装 插件下…

Unity教程(二十三)技能系统 投剑技能(上)基础实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

Oracle01-入门

零、文章目录 Oracle01-入门 1、Oracle简介 &#xff08;1&#xff09;数据库基础 数据库基础请参考&#xff1a;https://blog.csdn.net/liyou123456789/article/details/131207068 &#xff08;2&#xff09;Oracle是什么 ORACLE 数据库系统是美国 ORACLE 公司&#xff…

springboot集成mybatis-plus详细使用

以下是 Spring Boot 集成 MyBatis-Plus 的详细步骤&#xff1a; 创建 Spring Boot 项目 可使用 Spring Initializr 快速创建项目&#xff0c;添加相关依赖。 引入依赖 在项目 pom.xml 文件中添加以下依赖&#xff1a; <!-- MyBatis-Plus 启动依赖 --> <dependenc…

【wsl】命令说明,wsl的虚拟机ubuntu十分好用

wsl官方说明地址 wsl虚拟机安装简单方便&#xff0c;十分推荐。 安装 在上方的官网链接有安装办法和各种操作指南&#xff0c;在此不再赘述。 安装wsl后从微软商店搜索ubuntu点击后就能直接安装虚拟机镜像&#xff0c;多快好省。 wsl命令 阅读官网文档时发现wsl十分强大 …

Open CASCADE学习|判断一点与圆弧的位置关系

一、引言 在计算机辅助设计&#xff08;CAD&#xff09;、计算机图形学以及机械制造等众多领域中&#xff0c;经常需要处理几何图形之间的位置关系判断问题。其中&#xff0c;判断一个点与圆弧的位置关系是一个基础且重要的任务。Open CASCADE 作为一个强大的开源几何建模内核…

<论文>(字节跳动)使用大语言模型进行时间序列理解和推理

一、摘要 本文介绍2024年12月字节跳动牵头发表的大模型论文《ChatTS: Aligning Time Series with LLMs via Synthetic Data for Enhanced Understanding and Reasoning》。论文提出了 ChatTS 模型&#xff0c;用合成数据提升对时间序列的理解和推理能力。作者在纽约出租车乘客数…

大数据应用开发和项目实战-电商双11美妆数据分析

数据初步了解 &#xff08;head出现&#xff0c;意味着只出现前5行&#xff0c;如果只出现后面几行就是tail&#xff09; info shape describe 数据清洗 重复值处理 这个重复值是否去掉要看实际情况&#xff0c;比如说&#xff1a;昨天卖了5瓶七喜&#xff0c;今天卖了5瓶七…

Vi/Vim 编辑器详细指南

Vi/Vim 编辑器详细指南 简介一、模式详解1. 命令模式(Normal Mode)2. 插入模式(Insert Mode)3. 可视模式(Visual Mode)4. 命令行模式(Ex Mode)二、核心操作1. 保存与退出2. 导航与移动3. 编辑与文本操作4. 搜索与替换三、高级技巧1. 多文件与窗口操作2. 宏录制3. 寄存器…

kotlin 01flow-StateFlow 完整教程

一 Android StateFlow 完整教程&#xff1a;从入门到实战 StateFlow 是 Kotlin 协程库中用于状态管理的响应式流&#xff0c;特别适合在 Android 应用开发中管理 UI 状态。本教程将带全面了解 StateFlow 的使用方法。 1. StateFlow 基础概念 1.1 什么是 StateFlow? StateF…

开发搭载OneNet平台的物联网数据收发APP的设计与实现

一、开发环境与工具准备 工具安装 下载HBuilderX开发版(推荐使用开发版以避免插件兼容性问题)安装Node.js和npm(用于依赖管理及打包)配置Android Studio(本地打包需集成离线SDK)项目初始化 创建uni-app项目,选择“默认模板”或“空白模板”安装必要的UI库(如uView或Van…

HHsuite3 的 HHblits 和 HHsearch比较

HHblits 与 HHsearch 的核心区别及远源同源检测能力对比 一、核心功能与定位差异 特征HHblitsHHsearch核心目标快速迭代搜索,构建高质量多序列比对(MSA)和 Profile HMM,用于大规模序列聚类与初步同源筛选。高精度 Profile HMM-HMM 比对,用于深度同源检测与结构 / 功能预测…

【从零开始学习RabbitMQ | 第二篇】生成交换机到MQ的可靠性保障

目录 ​编辑前言 交换机 Direct交换机与Fanout交换机的差异 Topic交换机 Topic交换机相比Direct交换机的差异 生成我们的交换机&#xff0c;队列&#xff0c;以及绑定关系 基于代码去生成交换机和队列 基于注解去声明队列和交换机 消息转换器 消息队列的高可靠性 发送…

LeetCode 热题 100 22. 括号生成

LeetCode 热题 100 | 22. 括号生成 大家好&#xff0c;今天我们来解决一道经典的算法题——括号生成。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求生成所有可能的并且有效的括号组合。这是一道非常经典的回溯法题目&#xff0c;非常适合用来练习递归和回溯的技巧。…

TestStand API 简介

TestStand API 简介 在自动化测试领域&#xff0c;TestStand 凭借其灵活的架构和强大的功能&#xff0c;成为众多开发者的首选工具。而 TestStand API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;则是打开 TestStand 强大功能的 “…

如何修改 JAR 包中的源码

如何修改 JAR 包中的源码 前言一、准备工作二、将 JAR 当作 ZIP 打开并提取三、重写 Java 类方法 A&#xff1a;直接替换已编译的 .class方法 B&#xff1a;运行时类路径优先加载 四、修改 MyBatis&#xff08;或其他&#xff09;XML 资源五、重新打包 JAR&#xff08;命令行&a…

存算一体架构下的新型AI加速范式:从Samsung HBM-PIM看近内存计算趋势

引言&#xff1a;突破"内存墙"的物理革命 冯诺依曼架构的"存储-计算分离"设计正面临根本性挑战——在GPT-4等万亿参数模型中&#xff0c;数据搬运能耗已达计算本身的200倍。存算一体&#xff08;Processing-In-Memory, PIM&#xff09;技术通过‌在存储介…