高通平臺開發板學習教程

原文鏈接:https://blog.csdn.net/RadianceBlau/article/details/73229005

 

這一部分要求瞭解芯片的內部架構,啓動模式,啓動過程中代碼執行的順序等。

一、處理器的核心

1、APPS :運行Android

2、RPM:主要用於低功耗應該

3、Modem:高通自有指令集處理器,處理3G、4G通信協議等

4、Pronto:處理藍牙、WiFi

5、LPASS(ADSP):處理音頻

 

二、啓動過程

1、相關image介紹

(1)、PBL(Primary Boot Loader) 位於rom中,是芯片上電後執行的真正第一行代碼,在正常啓動流程中會加載SBL1。如果啓動異常會虛擬出9008端口用於緊急下載(一般是撥某個開關進入緊急下載模式,在該模式下將板子連接電腦,在電腦上可以看到9008端口的樣式,可用QFIL救磚)。

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

(3)、QSEE/TrustZone 安全相關,如fuse

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

(5)、 Debug Policy 調試相關

(6)、 APPSBL 即爲BootLoader,目前使用LK(littlekernel)(7)、HLOS(High LevelOperating System) 即爲Linux/Android

(8)、Modem PBL 即爲Modem處理器的PBL

(9)、MBA(Modem BootAuthenticator) Modem處理器啓動鑑權

2、啓動流程

1, 系統上電,\開發板從上電覆位開始運行。

2, 在APPS中運行的PBL會加載:

a, 從啓動設備(如eMMC、UFS)加載SBL1 segment1到L2(即爲TCM)

b, 加載SBL1 segment2到RPM處理器的RAM中。

3, 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中。

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

a, SBL1運行在AArch32(譯者注:名詞相關知識見文末“附件介紹一”)模式,而QSEE運行在AArch64模式。爲了切換到AArch64模式,SBL1會啓動重映射器,操作RMR寄存器,然後觸發warm-reset,QSEE就能夠運行在AArch64模式了。

5, QSEE通知RPM啓動RPM 固件的執行。

6, QSEE移交運行控制權給HLOS APPSBL。

a, APPSBL只能在AArch32模式開始運行。

b, 這時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開始執行。

3、關於eMMC和DDR的初始化時間問題

從上面的描述中已經可以看清,爲避免迷惑,在分離出來看看:

1,PBL中是含有eMMC驅動的,有訪問eMMC的能力,自身運行在MCU內部SRAM中。

2,除了PBL程序的img在MCU片內ROM外,其餘img均存儲在eMMC中。

3,PBL首先從eMMC加載SBL1到L2(內部緩存並非DDR),SBL1同樣運行在片內SRAM。

4,有SBL1初始化DDR各種時序後,DDR自此可用(eMMC一直可用)

5,再由SBL1加載其餘各個img到DDR,然後按照linux的正常順序啓動

 

來源:https://blog.csdn.net/RadianceBlau/article/details/73229005

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章