OH----基于RK3568的AB分区功能,bsp部分

news2024/11/25 2:49:01

1、背景:

OH master 主线 ,RK3568平台添加AB分区功能,uboot部分完成对ab分区标志位的读取解析,并加载和进入对应的分区,如: kernel_a 或者 kernel_b

2、环境:

rk3568 Uboot代码下载:

https://gitee.com/organizations/hihope-rockchip/projects

在这里插入图片描述
编译:

device_rockchip_third_party_uboot 改名为uboot
device_rockchip_third_party_rkbin 改名为rkbin
将它们放在同一级目录下:
在uboot下执行: make.sh rk3568

3、完成AB分区功能的解题思路:

、机器在正常开机使用状态,上层可以往bootctrl分区写入启动分区的flag
编辑此区域
、机器重启时会读取bootctrl分区内的flag标志,确认启动的具体分区
编辑此区域
、具体细节思路

在这里插入图片描述

4、uboot部分工作:

、从emmc中读取到bootctrl分区
、从bootctrl分区中读取到bootslot标志值
在这里插入图片描述
从emmc flash中读取到有_a或者_b后缀名的分区

在这里插入图片描述

通过bootslot值判断是A分区还是B分区,然后拷贝对应的镜像到它的内存地址

在这里插入图片描述

5、编译部分添加enable_absystem宏控制是否使能此功能

、vendor下的rk3568/config.json中添加宏定义开关

在这里插入图片描述

build下面添加enable_absystem宏的传递:

hb_internal/preloader/preloader.py && config/BUILDCONFIG.gn && tools/product_config_version_convert.py 中添加对应的值传递

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在device下面接收enable_absystem宏的值,来判断在我们的编译产物中需要哪些镜像

rk3568/kernel/BUILD.gn中:
if (enable_absystem) {
args += [ "enable_absystem" ]
}

rk3568/kernel/build_kernel.sh中:
if [ "enable_absystem" == "${12}" ]; then
cp ${3}/loader/parameter_ab.txt ${2}/parameter_ab.txt
cp ${3}/loader/config_ab.cfg ${2}/config_ab.cfg
else
cp ${3}/loader/parameter.txt ${2}/parameter.txt
cp ${3}/loader/config.cfg ${2}/config.cfg
fi

6、修改分区表和工具配置cfg

新增 rk3568/loader/config_ab.cfg && rk3568/loader/parameter_ab.txt文件来作为ab分区的配置文件

分区表修改,添加bootctrl分区,重新划分flah地址

在这里插入图片描述
在这里插入图片描述

7、在cmdline中添加bootctrl分区

bootargs = "earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 hardware=rk3568 default_boot_device=fe310000.sdhci rw rootwait ohos.required_mount.system=/dev/block/platform/fe310000.sdhci/by-name/system@/usr@ext4@ro,barrier=1@wait,required ohos.required_mount.vendor=/dev/block/platform/fe310000.sdhci/by-name/vendor@/vendor@ext4@ro,barrier=1@wait,required ohos.required_mount.misc=/dev/block/platform/fe310000.sdhci/by-name/misc@none@none@none@wait,required ohos.required_mount.bootctrl=/dev/block/platform/fe310000.sdhci/by-name/bootctrl@none@none@none@wait,required";

8、bootctrl分区内容读取地址注意

在上层的interfaces/innerkits/fs_manager/fstab_mount.c文件中,有对bootctrl分区的写入操作,需要注意写入地址,需要按照uboot读取方式去写,uboot下是按照块来读的,所以在这里需要是块size大小的倍数:
const off_t PARTITION_ACTIVE_SLOT_OFFSET = 1024;

uboot中common/bootctrl/bootctrl.h定义:
#define BOOTCTRL_AB_PARTITION_CURRENT_SLOT_OFFSET (1024/512)
common/bootctrl/bootctrl.c中读取:
int read_ab_slot(struct blk_desc *dev_desc, int32_t *value, u32 size)
{
return read_bootctrl_partition(dev_desc, BOOTCTRL_AB_PARTITION_CURRENT_SLOT_OFFSET, value, size);
}

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

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

相关文章

股票L2接口和L1接口有什么差距?

股票L2数据的主要特点是能看到资金流向和十档买卖盘,比L1数据更加清晰和全面。 但是就现在的股票市场而言,也不能全部听信L2数据。 很多数据也是庄家做出来的,就是为了给散户看,所以全面分析基本面和技术面才是最重要的。 而且…

[附源码]计算机毕业设计个人博客系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

【CSS】多行文字保持垂直居中,移动端布局,grid布局,居中总结

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录多行文字垂直居中方法一方法2方法3方法四移动端布局viewport标签典型的手机网页设计grid布局grid…

基于C语言+SQL Server2008实现(控制台)图书管理系统【100010024】

第1章 概述 1.1项目背景 随着科技的发展,尤其是计算机技术的迅猛发展,图书馆管理的问题从以往的人工管理,到现在的电脑化,系统化,是对图书馆管理方法的质的飞跃,这些技术不仅让图书馆管理变得更加方便、快…

【Java EE初阶】创建线程的五种方式

文章目录1. 继承Tread,重写run()2. 实现Runnable接口,重写run()3. 使用匿名内部类,继承Thread4. 使用匿名内部类,实现Runnable5. 使用lambda表达式1. 继承Tread,重写run() 示例:pandas 是基于NumPy 的一种工具,该工具…

Kafka系列之:使用Kafka Manager实现leader分区平衡和broker节点上分区平衡

Kafka系列之:使用Kafka Manager实现leader分区平衡和broker节点上分区平衡 一、需求背景二、leader分区不平衡三、实现leader分区不平衡四、分区在节点不平衡五、实现分区在节点平衡一、需求背景 kafka节点扩容,分区不平衡现在需要leader分区平均分配在每个节点上同时分区副本…

基于Python+Django的项目申报审核平台系统

在各学校的教学过程中,django项目校内申报平台系统是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的django高校学生项目校内申报平台&#xf…

OMV 5.6入坑指南(一)-openmediavalut 5.6安装

一、DIY NAS服务器 百度网盘里攒了一堆电影、电视剧,想下载到电脑里,买了个4T硬盘,然后发现不够用,然后又买了个还是不够用,然后自己又不想开电脑看电视电影,平时看电视电影都是在ipad上看的,台…

可视化管线

VTK中的可视化管线可用于读取或创建数据、分析和创建此数据的派生版本,并将数据写入磁盘或将其传递给渲染引擎进行显示。例如,您可以从磁盘读取一个三维数据体,对其进行处理以创建一组三角形,这些三角形通过该数据体表示一个等值曲…

全栈Jmeter接口测试(六):json断言元件,jmeter参数化实现

Jmeter(12):json断言元件 json断言元件介绍: json断言元件与响应断言元件的功能类型,它只针对响应正文为json数据格 式的内容进行断言功能。 添加路径:右击http请求——断言——json断言 如下图展示: json断言元件字…

JAVA毕业设计——基于SpringBoot和thymeleaf的疫情信息管理系统 (源码+数据库)

github代码地址 https://github.com/ynwynw/CoronavirusManage-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于SpringBoot及thymeleaf搭建的疫情信息管理系统 (源码数据库)034 一、系统介绍 疫情信息管理系统应当具备两种对象,疫情管理…

【论文精读10】MVSNet系列论文详解-PatchmatchNet

PatchmatchNet,论文名为:PatchmatchNet: Learned Multi-View Patchmatch Stereo,本篇论文结合了较多过往文章的优化思想和类似模块,因此可能要更复杂一些。 本文是MVSNet系列的第10篇,建议看过【论文精读1】MVSNet系列…

【嵌入式linux】修改网口MAC地址

使用带有网络功能的设备时,如果局域网内可能会连接很多台设备,为了保证网络通信正常,要确保每台设备的硬件MAC地址都不相同,一般在批量生产的时候可以根据产品序列号(sn号)固化每台设备的MAC地址,防止出现MAC冲突的问题…

【云原生】Prometheus PromQL讲解与实战操作

文章目录一、PromQL介绍二、四种指标类型1)counter(计数器)2)gauge (仪表类型)3)Histogram(直方图类型) 和 Summary(摘要类型)三、表达式四种数据…

8Manage PMO:多项目管理工作经验分享

在现代企业日常项目管理中,同时开展不同业务项目可说已经是“家常便饭”,项目经理手上开展多个项目,便需要兼顾各项目的人力资源、进度、问题、风险等。而在这种情况下,面对多项目管理该如何有效进行管理,有没有多项目…

换天空的几个方式技巧

1.魔棒工具 现将图层复制一层,用魔棒工具选中被复制的一层图中的天空将他删除。(如果天空有一些未选中的位置,那么我们按住shift用鼠标去点击需要删除的位置他就会一起选中) 这个就是我们删除之后的效果。 然后我们打开一张需要加…

体验了一下火爆全球的 ChatGPT,我震惊了

这几天,要说编程圈最热的话题,莫过于OpenAI的ChatGPT,写小说,写代码,找BUG,写论文,画漫画,谱曲……简直没有它干不了的事。 趁着下班时间,我也光速注册体验了一下&#…

VS Code 1.74 发布!

欢迎来到 VS Code 11月更新,此版本更新包括自定义资源管理器自动显示、隐藏活动栏和面板徽章、合并编辑器撤消/重做、管理不安全的存储库、Go to Definition on return、远程隧道等等,让我们一起看看完整更新吧! 自定义资源管理器自动显示 引…

Linux Centos离线地图开发

相关教程: 1、如何搭建离线地图开发环境 视频教程 2、下载离线地图数据(金字塔瓦片数据) 视频教程 3、下载离线地图地形数据库(实现地表高低起伏) 4、添加离线地图数据到本地服务器 (含3D) 视频…

NamedParameterJdbcTemplate —— SqlParameterSource实现具名参数查询

文章目录NamedParameterJdbcTemplate —— SqlParameterSource实现具名参数查询一、数据库准备二、java Bean实体类准备三、要执行的SQL语句四、定义业务接口service五、定义一个SqlParameterSource实现具名参数的实体类六、定义controller接口七、业务实现(1&#…