Qualcomm的MSM8k以及SDM平台的启动过程其实比较复杂,但是如果想改动其实并不能改很多,有一部分高通甚至只给了BIN并没有SRC。所以今天就选继PBL后最重要也是能改动的最底层部分,即SBL来做一些分析以及介绍。由于NDA的缘故,其中仅能挑选公开部分代码片段。可能有疏漏,请尽情指正!

启动过程

由于我并不涉及到BP部分的开发,那全程就只从AP的角度做分析以及介绍。
MSM_BootProgress

SBL的功能

初始化DDR/硬件/加载RPM/加载TrustZone/加载ABL以继续引导

SBL入口

此部分源码位于boot_images/core/boot/secboot3/hw/<Part_Number>/sbl1/sbl1.s

IMPORT |Image$$SBL1_SVC_STACK$$ZI$$Limit|
IMPORT |Image$$SBL1_UND_STACK$$ZI$$Limit|
IMPORT |Image$$SBL1_ABT_STACK$$ZI$$Limit|
IMPORT boot_undefined_instruction_c_handler ;导入了外部Symbol
IMPORT boot_swi_c_handler
IMPORT boot_prefetch_abort_c_handler
IMPORT boot_data_abort_c_handler
IMPORT boot_reserved_c_handler
IMPORT boot_irq_c_handler ;PBL传递来的中断请求参数
IMPORT boot_fiq_c_handler ;PBL传递来的快速中断请求参数
IMPORT boot_nested_exception_c_handler
IMPORT sbl1_main_ctl ;!注意此处!此处导入SBL1主要功能
IMPORT boot_crash_dump_regs_ptr

SBL1_MAIN_CTL

此部分主要做初始化DDR的工作
此部分源码位于boot_images/core/boot/secboot3/hw/<Part_Number>/sbl1/sbl1_mc.c

/* 初始化DDR部分 */
static boot_ram_init_data_type sbl1_ram_init_data_ddr =
{
  NULL,   //load_rw_base;
  NULL,  //image_rw_base;
  0,        //image_rw_len;
  (uint8*)&Image$$SBL1_DDR_ZI$$Base,  //image_zi_base;
  &Image$$SBL1_DDR_ZI$$ZI$$Length     //image_zi_len;
};
/* 初始化Logger部分,数据传送到SERIAL */
static uint32 sbl_start_time = 0;
static boot_log_init_data boot_log_data =
{
  (void *)SBL1_LOG_BUF_START,
  SBL1_LOG_BUF_SIZE,
  (void *)SBL1_LOG_META_INFO_START,
  SBL1_LOG_META_INFO_SIZE,
  NULL
};
/* 加载SBL1_Config_Table */
#define CPSR_EA_BIT     (1<<8)

extern boot_configuration_table_entry sbl1_config_table[];

SBL1_CONFIG_TABLE

此部分存储了ABL\TrustZone\RPM等Image的相关参数
此部分源码位于boot_images/core/boot/secboot3/hw/<Part_Number>/sbl1/sbl1_config.c

extern uint8 qsee_partition_id[]; //QSEE分区ID
extern uint8 rpm_partition_id[]; //Resource Power Manager分区ID
extern uint8 appsbl_partition_id[]; //Application Secondaty BootLoader分区ID
extern uint8 apdp_partition_id[]; //Debug Policy分区ID
extern uint8 devcfg_partition_id[]; //Trust Zone Config分区ID

boot_configuration_table_entry sbl1_config_table[];

此文就是一篇概览,也就是大概阅读了一下源码写下的随笔,同时由于惧怕高通的NDA,源码也不能放出太多,到此为止吧!

知识共享许可协议
本文及其附件均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

添加新评论