高通SOC啟動流程


背景

開始接手高通開發的有關工作,為了調試底層驅動,因此有必要了解高通平台上電啟動的流程是怎么樣的。

以 MSM8953 為例子。

MSM:mobile station modems,移動基帶處理器,即:帶基帶的手機處理器

Reference:https://www.cnblogs.com/asreg/articles/9531152.html

有關概念

Secure Boot :安全啟動。

  • 目的:廠家發布的產品,只能跑他們自家的軟件,從而防止第三方進行惡意修改,進而影響到系統穩定、安全。
  • 原理:SecureBoot 與系統啟動流程息息相關,通過鏡像校驗鏈,一步一步建立起一個可信的運行環境,從而保證安全類應用的執行安全。
  • 流程:高通的 Secure Boot 原理與 展銳 的基本一樣:
    • 通過將密鑰及安全配置文件寫到 efuse (只能寫一次)
    • 此后的每次啟動時,鏡像執行時會使用密鑰校驗認證后面的鏡像,判斷其是否是終端廠家的軟件,如果不是,則終止啟動流程。

加密:

  • 密鑰,對稱加密,非對稱加密(公鑰、私鑰)

啟動框圖

處理器核心流程

啟動相關image介紹

1、APP PBL Primary BootLoader): 位於rom(只讀)中,是芯片上電后執行的真正第一行代碼,在正常啟動流程中會加載 SBL1

如果啟動異常會虛擬出9008端口用於緊急下載模式,短接板子上的force_boot_from_usb引腳(MSM8953 為gpio37)到1.8v以達到強制進入緊急下載模式的目的。 在緊急下載模式時可以使用QFILE工具進行Download。

2、SBL1( Second BootLoader stage 1) :位於EMMC中,由PBL加載,初始化 buses、DDR、clocks等,會虛擬出9006端口,用於不能開機時dump ram。

3、QSEE/TrustZone :安全相關,如fuse(安全熔絲)。QSEE 指的是 Qualcomm Secure Execution Environment

4、DEVCFG :OEM配置信息(如OEMLock)。

5、 Debug Policy: 調試相關。

6、APPSBL :BootLoader,通常使用LK(LittleKernel)。

7、HLOS( High Level Operating System) :即為Linux/Android。

8、Modem PBL :Modem處理器的PBL。

9、MBA(Modem Boot Authenticator) :Modem處理器啟動認證。

注意:

  • PBL中是含有EMMC驅動的,有訪問EMMC的能力,自身運行在MCU內部SRAM中。
  • PBL首先從EMMC加載SBL1到L2(內部緩存並非DDR),SBL1同樣運行在片內SRAM。

可以看到MSM8953中的處理器有5個子系統,分別為:

啟動流程

軟件層面的啟動流程為:PBL --> SBL --> QSEE/TE --> LK --> Kernel --> Android

啟動流程:

1、系統上電,使MSM8953從上電復位開始運行。

2、在Cortex A53中運行的PBL會加載各部分到對應的內存中:

  • a) 從啟動設備(如EMMC)加載SBL1 segment1到L2(即為TCM,Tightly-Coupled Memory,緊耦合內存)。
  • b) 加載SBL1 segment2到RPM處理器的RAM中。

3、SBL1 segment1會初始化DDR,並完成如下加載:

此時DDR才允許使用,而EMMC在一開始就可以使用了。

  • a)從啟動設備加載QSEE image到DDR。
  • b)從啟動設備加載DEVCFG image到DDR。
  • c)從啟動設備加載Debug Policy image到DDR。
  • d)從啟動設備加載HLOS APPSBL(Bootloader) image到DDR。
  • e)從啟動設備加載RPM firmware image到RPM的RAM中。

4、SBL1移交運行控制權給QSEE。QSEE建立安全運行環境,配置xPU,支持fuse。

  • 因為SBL1運行在AArch32模式,而QSEE運行在AArch64模式。為了切換到AArch64模式,SBL1會啟動重映射器,操作RMR寄存器,然后觸發warm-reset,QSEE就能夠運行在AArch64模式了。

5、QSEE通知RPM啟動RPM固件的執行。

6、QSEE移交運行控制權給HLOS APPSBL(Bootloader)。

  • APPSBL只能在AArch32模式開始運行。
  • 這時AArch32的運行模式切換是在EL3/Monitor模式完成的。通過查看APPSBL的ELF頭能夠得知其需要運行在32位指令集架構下。EL3/Monitor模式改變到32位模式,然后再啟動APPSBL。

7、APPSBL加載、驗證kernel。APPSBL通過SCM調用改變到HLOS kernel需要的AArch64模式。這和之前LK直接跳轉到kernel運行是不同的。

8、HLOS kernel通過PIL加載MBA到DDR。

9、HLOS kernel對Hexagon modem DSP進行解復位。

10、Modem PBL繼續它的啟動。

11、HLOS kernel 通過PIL加載AMSS modemimage到DDR。

12、Modem PBL驗證MBA然后跳轉到MBA。

13、HLOS通過PIL加載WCNSS(Pronto)image到DDR。

14、HLOS對WCNSS(Pronto)進行解復位以便Prontoimage開始執行。

15、HLOS通過PIL加載LPASS image到DDR。

16、HLOS對LPSAA進行解復位以便LPASSimage開始執行。

附錄:各子系統構件框圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM