当前位置: 首页 > news >正文

高通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** ==========================================================================

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

相关文章:

  • 基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统
  • 创作纪念日:记录我的成长与收获
  • QT C++实战:实现用户登录页面及多个界面跳转
  • Rocky Linux安装部署Elasticsearch(ELK日志服务器)
  • 弹窗内容由后端返回,如何让点击按钮的事件交由前端控制?
  • 基于SSM的校园订餐系统(有报告)。Javaee项目。ssm项目。
  • 配置与管理Samba服务器
  • 后端程序员入门react笔记——react的diff算法(三)
  • Python异常处理知识点汇总,五分钟就能学会
  • Spring boot 实现监听 Redis key 失效事件
  • 从新手到专家:AutoCAD 完全指南
  • Bicycles(变形dijkstra,动态规划思想)
  • 【大厂AI课学习笔记NO.53】2.3深度学习开发任务实例(6)数据采集
  • Git+py+ipynb Usage
  • 消息中间件篇之RabbitMQ-高可用机制
  • centos安装java运行环境jdk+tomcat
  • CSS3 变换
  • Docker: 容器互访的三种方式
  • DOM的那些事
  • Go 语言编译器的 //go: 详解
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java-详解HashMap
  • SpingCloudBus整合RabbitMQ
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 编写符合Python风格的对象
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聊聊redis的数据结构的应用
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 微服务框架lagom
  • MPAndroidChart 教程:Y轴 YAxis
  • ​油烟净化器电源安全,保障健康餐饮生活
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (论文阅读40-45)图像描述1
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)appium-desktop定位元素原理
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)SpringBoot3---尚硅谷总结
  • (转)可以带来幸福的一本书
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET delegate 委托 、 Event 事件
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net反编译的九款神器
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .stream().map与.stream().flatMap的使用
  • @ConfigurationProperties注解对数据的自动封装
  • @RequestMapping 的作用是什么?