转载-Qualcomm MSM8953启动流程:PBL-SBL1-(bootloader)LK-Android
文章轉(zhuǎn)載鏈接:
https://blog.csdn.net/RadianceBlau/article/details/73229005
對于嵌入式工程師了解芯片啟動過程是十分有必要的,在分析、調(diào)試各種問題的時候都有可能涉及到這方面的知識,同時這部分知識也是比較復雜的,因為其中涉及到芯片內(nèi)部架構(gòu),啟動各個階段軟件代碼執(zhí)行順序,啟動模式等等。下面以比較常用的Qualcomm MSM8953芯片的啟動過程為例,進行宏觀分析,下面是啟動流程:
(1)處理器核心
從上面的框圖可以看到MSM8953中的處理器有5個,分別為:
APPS,Cortex A53 core,運行android;
RPM(Resource Power Manager),CortexM3 core,主要用于低功耗應用;
Modem(MSS_QDSP6),高通自有指令集處理器,處理3G、4G通信協(xié)議等;
Pronto(WCNSS) ,處理wifi相關(guān)代碼;
LPASS,音頻相關(guān)。
對應下面芯片硬件結(jié)構(gòu)圖中各個處理器的框圖來看就很清晰了:
(2)啟動image介紹
PBL(Primary Boot Loader),位于rom中,是芯片上電后執(zhí)行的真正第一行代碼,在正常啟動流程中會加載SBL1。如果啟動異常會虛擬出9008端口用于緊急下載(短接板子上的force_boot_from_usb引腳(MSM8953 為gpio37)到1.8v可以強制進入緊急下載模式);
SBL1(Second BootLoader stage 1), 位于eMMC中,由PBL加載,初始化buses、DDR、clocks等,會虛擬出9006端口,用于不能開機時dump ram;
QSEE/TrustZone,安全相關(guān),如fuse;
DEVCFG OEM配置信息(如OEMLock);
Debug Policy 調(diào)試相關(guān);
APPSBL, 即為BootLoader,目前使用LK(little kernel);
HLOS(High LevelOperating System) ,即為Linux/Android;
Modem PBL,即為Modem處理器的PBL;
MBA(Modem BootAuthenticator),Modem處理器啟動鑒權(quán)。
(3)啟動流程
系統(tǒng)上電,使MSM8953從上電復位開始運行。
在Cortex A53中運行的PBL會加載:
a、從啟動設備(如eMMC)加載SBL1 segment1到L2(即為TCM);
b、加載SBL1 segment2到RPM處理器的RAM中。
SBL1 segment1會初始化DDR,然后完成如下加載:
a、從啟動設備加載QSEE image到DDR;
b、從啟動設備加載DEVCFG image到DDR;
c、從啟動設備加載Debug Policy image到DDR;
d、從啟動設備加載HLOS APPSBL image到DDR;
e、從啟動設備加載RPMfirmware image到RPM的RAM中。
SBL1移交運行控制權(quán)給QSEE。QSEE建立安全運行環(huán)境,配置xPU,支持fuse。
a、SBL1運行在AArch32模式,而QSEE運行在AArch64模式。為了切換到AArch64模式,SBL1會啟動重映射器,操作RMR寄存器,然后觸發(fā)warm-reset,QSEE就能夠運行在AArch64模式了。
QSEE通知RPM啟動RPM 固件的執(zhí)行。
QSEE移交運行控制權(quán)給HLOS APPSBL:
a、 APPSBL只能在AArch32模式開始運行;
b、這時AArch32的運行模式切換是在EL3/Monitor模式完成的。通過查看APPSBL的ELF頭能夠得知其需要運行在32位指令集架構(gòu)下。EL3/Monitor模式改變到32位模式,然后再啟動APPSBL。
APPSBL加載、驗證kernel。APPSBL通過SCM調(diào)用改變到HLOS kernel需要的AArch64模式。這和之前LK直接跳轉(zhuǎn)到kernel運行是不同的。
HLOS kernel通過PIL加載MBA到DDR。
HLOS kernel對Hexagon modem DSP進行解復位。
Modem PBL繼續(xù)它的啟動。
HLOS kernel 通過PIL加載AMSS modemimage到DDR。
Modem PBL驗證MBA然后跳轉(zhuǎn)到MBA。
HLOS通過PIL加載WCNSS(Pronto)image到DDR。
HLOS對WCNSS(Pronto)進行解復位以便Prontoimage開始執(zhí)行。
HLOS通過PIL加載LPASS image到DDR。
HLOS對LPSAA進行解復位以便LPASSimage開始執(zhí)行。
下面是流程的簡化圖,其中區(qū)分了AArch32和AArch64位的QSEE/TrustZone:
(4)關(guān)于eMMC和DDR的初始化時間問題
從上面的描述中已經(jīng)可以看清,為避免迷惑,在分離出來看看:
PBL中是含有eMMC驅(qū)動的,有訪問eMMC的能力,自身運行在MCU內(nèi)部SRAM中;
除了PBL程序的img在MCU片內(nèi)ROM外,其余img均存儲在eMMC中;
PBL首先從eMMC加載SBL1到L2(內(nèi)部緩存并非DDR),SBL1同樣運行在片內(nèi)SRAM;
有SBL1初始化DDR各種時序后,DDR自此可用(eMMC一直可用);
再由SBL1加載其余各個img到DDR,然后按照linux的正常順序啟動。
關(guān)于ARMv8架構(gòu)的知識,推薦如下博客:
http://blog.csdn.net/forever_2015/article/details/50285865
總結(jié)
以上是生活随笔為你收集整理的转载-Qualcomm MSM8953启动流程:PBL-SBL1-(bootloader)LK-Android的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ANSI C中的CRC16参考实现
- 下一篇: kafka通过零拷贝实现高效的数据传输