高通XBL阶段读取分区

【需求】:

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

这里主要以裸分区为例,比如oem分区。

1、创建一个1MB大小的oem.img,写入内容"test oem partition"

创建方式:

c 复制代码
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文件:

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分区:

c 复制代码
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分区流程

c 复制代码
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
 ** ==========================================================================

启动效果如下:

相关推荐
冠希陈、1 小时前
PHP 判断是否是移动端,更新鸿蒙系统
android·开发语言·php
晚霞的不甘4 小时前
Flutter for OpenHarmony从零到一:构建《冰火人》双人合作闯关游戏
android·flutter·游戏·前端框架·全文检索·交互
2601_949833394 小时前
flutter_for_openharmony口腔护理app实战+饮食记录实现
android·javascript·flutter
独自破碎E4 小时前
【滑动窗口+字符计数数组】LCR_014_字符串的排列
android·java·开发语言
stevenzqzq4 小时前
compose 中 align和Arrangement的区别
android·compose
VincentWei954 小时前
Compose:MutableState 和 mutableStateOf
android
jian110584 小时前
Android studio配置flutter,mac Android studio 发现苹果手机设备
android·flutter·android studio
2501_940007895 小时前
Flutter for OpenHarmony三国杀攻略App实战 - 性能优化与最佳实践
android·flutter·性能优化
Rysxt_6 小时前
UniApp获取安卓系统权限教程
android·uni-app
毕设源码-朱学姐7 小时前
【开题答辩全过程】以 基于安卓的教师上课辅助系统为例,包含答辩的问题和答案
android