高通XBL阶段读取分区

2024-02-25 08:20
文章标签 读取 阶段 分区 高通 xbl

本文主要是介绍高通XBL阶段读取分区,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【需求】:
在某些场景下,需要在XBL阶段读取分区数据,需要验证xbl阶段方案

这里主要以裸分区为例,比如oem分区。
1、创建一个1MB大小的oem.img,写入内容“test oem partition”
创建方式:

dd if=/dev/null of=oem.img bs=1024 count=1

oem.img内容:
在这里插入图片描述
2、XBL阶段读分区方案:
2.1、创建oem_partition_id
在https://www.guidgenerator.com/online-guid-generator.aspx网站自动生成,生成后加入boot_images/QcomPkg/XBLLoader/boot_gpt_partition_id.c文件:

diff --git a/BOOT.XF.4.1/boot_images/QcomPkg/XBLLoader/boot_gpt_partition_id.c b/BOOT.XF.4.1/boot_images/QcomPkg/XBLLoader/boot_gpt_partition_id.c
index bd0b029739..51e7c294da 100755
--- a/BOOT.XF.4.1/boot_images/QcomPkg/XBLLoader/boot_gpt_partition_id.c
+++ b/BOOT.XF.4.1/boot_images/QcomPkg/XBLLoader/boot_gpt_partition_id.c
@@ -223,5 +223,6 @@ struct coldplug_guid aop_recovery_partition_id =/*{B8B27C4C-4B5B-8AB2-502F-A792B590A896}*/{ 0xB8B27C4C, 0x4B5B, 0x8AB2, { 0x50, 0x2F, 0xA7, 0x92, 0xB5, 0x90, 0xA8, 0x96 } };        -
+struct coldplug_guid oem_partition_id = 
+	  { 0x1B15724C, 0x4447, 0x438C, { 0x9B, 0xCB, 0x70, 0x7C, 0x0E, 0x77, 0x5F, 0x6B } };

2.2、增加oem分区
partition_r_ext.xml文件增加oem分区:

diff --git a/QCM2290.LA.3.0/common/config/emmc/partition_r_ext.xml b/QCM2290.LA.3.0/common/config/emmc/partition_r_ext.xml
index 97660152ae..0d53760192 100755
--- a/QCM2290.LA.3.0/common/config/emmc/partition_r_ext.xml
+++ b/QCM2290.LA.3.0/common/config/emmc/partition_r_ext.xml
@@ -95,6 +95,7 @@<partition label="super" size_in_kb="4194304" type="89A12DE1-5E41-4CB3-8B4C-B1441EB5DA38" bootable="false" readonly="false" filename="super.img" sparse="true"/><partition label="privdata1" size_in_kb="102400" type="32AB90B5-5276-4EB8-8EF7-3391E02DE9B1" bootable="false" readonly="false" filename="privdata1.img" sparse="true"/><partition label="privdata2" size_in_kb="102400" type="BCA1B29C-AE01-4C39-8521-D9727CF98BD0" bootable="false" readonly="false" filename="privdata2.img" sparse="true"/>
+		<partition label="oem" size_in_kb="1024" type="1B15724C-4447-438C-9bCB-707C0E775F6B" bootable="false" readonly="false" filename="oem.img" sparse="false"/><partition label="userdata" size_in_kb="4194304" type="1B81E7E6-F50D-419B-A739-2AEEF8DA3335" bootable="false" readonly="false" filename="userdata.img" sparse="true"/></physical_partition></configuration>

2.3、读取oem分区流程

diff --git a/BOOT.XF.4.1/boot_images/QcomPkg/SocPkg/Library/XBLLoaderLib/sbl1_mc.c b/BOOT.XF.4.1/boot_images/QcomPkg/SocPkg/Library/XBLLoaderLib/sbl1_mc.c
index 9310f06ec2..b99fab70f8 100755
--- a/BOOT.XF.4.1/boot_images/QcomPkg/SocPkg/Library/XBLLoaderLib/sbl1_mc.c
+++ b/BOOT.XF.4.1/boot_images/QcomPkg/SocPkg/Library/XBLLoaderLib/sbl1_mc.c
@@ -1360,6 +1360,7 @@ void sbl1_populate_initial_mem_map(bl_shared_data_type* bl_shared_data)*   None* */
+void read_oem_partition(void);void sbl1_tlmm_init(bl_shared_data_type *bl_shared_data){/* Initialize Tlmm and gpio for low power config ,must be done after smem init*/
@@ -1367,6 +1368,7 @@ void sbl1_tlmm_init(bl_shared_data_type *bl_shared_data){BL_VERIFY(FALSE, BL_ERR_INIT_GPIO_FOR_TLMM_CONFIG_FAIL|BL_ERROR_GROUP_BOOT);}  
+  read_oem_partition();}@@ -1632,6 +1634,34 @@ void device_programmer_init (bl_shared_data_type* bl_shared_data, boot_pbl_share}  }+extern uint8 oem_partition_id[];
+void read_oem_partition(void)
+{
+  boot_boolean success = FALSE;
+  boot_flash_trans_if_type *trans_if = NULL;
+  uint8 oem_data_table[1024] = {0};
+  char data[1024] = "0";
+  boot_log_message("hanm:read_oem_partition1 ");
+
+  boot_set_entry_as_img_whitelist((uint64)(&oem_data_table), (uint64)(1024));
+
+  boot_flash_configure_target_image(oem_partition_id);
+  trans_if = boot_flash_dev_open_image(GEN_IMG);
+
+  if (trans_if != NULL) {
+    success = boot_flash_trans_read(trans_if,
+	                                oem_data_table,
+									0,
+									1024,
+									IMAGE_BODY_TYPE);
+
+	boot_log_message("hanm:read_oem_partition2");
+	snprintf(data, 1024, "%s", oem_data_table);
+	boot_log_message(data);
+	boot_flash_dev_close_image(&trans_if);
+  }
+}
+/*===========================================================================**  Function :  sbl1_main_ctl** ==========================================================================

启动效果如下:
在这里插入图片描述

这篇关于高通XBL阶段读取分区的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744908

相关文章

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

MySQL中的两阶段提交详解(2PC)

《MySQL中的两阶段提交详解(2PC)》:本文主要介绍MySQL中的两阶段提交(2PC),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言两阶段提交过程sync_binlog配置innodb_flush_log_at_trx_commit配置总结引言在Inn

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Mysql表如何按照日期字段的年月分区

《Mysql表如何按照日期字段的年月分区》:本文主要介绍Mysql表如何按照日期字段的年月分区的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、创键表时直接设置分区二、已有表分区1、分区的前置条件2、分区操作三、验证四、注意总结一、创键表时直接设置分区

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取