日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

linux驱动由浅入深系列:PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)

發布時間:2023/12/13 综合教程 58 生活家
生活随笔 收集整理的這篇文章主要介紹了 linux驱动由浅入深系列:PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://blog.csdn.net/radianceblau/article/details/73229005

http://www.aiuxian.com/article/p-1414261.html

http://www.xuebuyuan.com/2209890.html

對于嵌入式工程師了解芯片啟動過程是十分有必要的,在分析、調試各種問題的時候都有可能涉及到這方面的知識。同時這部分知識也是比較復雜的,因為其中涉及到芯片內部架構,啟動各個階段軟件代碼執行順序,啟動模式等等。下面以比較常用的Qualcomm MSM8953芯片的啟動過程為例,進行宏觀分析(大部分翻譯了高通的手冊^-^),下一篇文章進行代碼分析。

處理器核心

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

1, APPS Cortex A53 core,運行android

2, RPM(Resource Power Manager) CortexM3 core,主要用于低功耗應用

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

4, Pronto(WCNSS) 處理wifi相關代碼

5, LPASS 音頻相關

對映下面芯片硬件結構圖中各個處理器的框圖來看就很清晰了。

啟動相關image介紹

1,PBL(Primary Boot Loader) 位于rom中,是芯片上電后執行的真正第一行代碼,在正常啟動流程中會加載SBL1。如果啟動異常會虛擬出9008端口用于緊急下載(短接板子上的force_boot_from_usb引腳(MSM8953 為gpio37)到1.8v可以強制進入緊急下載模式)。

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

3,QSEE/TrustZone 安全相關,如fuse

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

6, Debug Policy 調試相關

7, APPSBL 即為BootLoader,目前使用LK(littlekernel)

8,HLOS(High LevelOperating System) 即為Linux/Android

9,Modem PBL 即為Modem處理器的PBL

10,MBA(Modem BootAuthenticator) Modem處理器啟動鑒權

啟動流程

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

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

a, 從啟動設備(如eMMC)加載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開始執行。

下面是流程的簡化圖,其中區分了AArch32和AArch64位的QSEE/TrustZone

關于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的正常順序啟動^-^....

附加介紹一:AArch64、AArch32

AArch64是ARMv8架構的一種執行狀態。

為了更廣泛地向企業領域推進,需要引入64位構架。同時也需要在ARMv8架構中引入新的AArch64執行狀態。AArch64不是一個單純的32位ARM構架擴展,而是ARMv8內全新的構架,完全使用全新的A64指令集。這些都源自于多年對現代構架設計的深入研究。更重要的是,AArch64作為一個分離出的執行狀態,意味著一些未來的處理器可能不支持舊的AArch32執行狀態。雖然最初的64位ARM處理器將會完全向后兼容,但我們大膽且前瞻性地將AArch64作為在ARMv8處理器中唯一的執行狀態。我們在這些系統中將不支持32位執行狀態,這將使許多有益的實現得到權衡,如默認情況下,使用一個較大的64K大小的頁面,并會使得純凈的64位ARM服務器系統不受遺留代碼的影響。立即進行這種劃分是很重要的,因為有可能在未來幾年內將出現僅支持64位的服務器系統。沒有必要在新的64位架構中去實現一個完整的32位流水線,這將會提高未來ARM服務器系統的能效。這樣回想起來,AArch64作為在Fedora ARM項目中被支持的ARM構架是一個很自然的過程:armv5tel、armv7hl、aarch64。新的架構被命名為:aarch64,這同ARM自己選擇的主線命名方式保持一致,同時也考慮到了ARM架構名與ARM商標分開的期望。

ARMv8-A將64位架構支持引入ARM架構中,其中包括:

64 位通用寄存器、SP(堆棧指針)和 PC(程序計數器)
64 位數據處理和擴展的虛擬尋址

兩種主要執行狀態:

AArch64 - 64 位執行狀態,包括該狀態的異常模型、內存模型、程序員模型和指令集支持
AArch32 — 32 位執行狀態,包括該狀態的異常模型、內存模型、程序員模型和指令集支持

這些執行狀態支持三個主要指令集

A32(或 ARM):32 位固定長度指令集,通過不同架構變體增強部分 32 位架構執行環境現在稱為 AArch32。
T32 (Thumb) 是以 16 位固定長度指令集的形式引入的,隨后在引入 Thumb-2 技術時增強為 16 位和 32 位混合長度指令集。部分 32 位架構執行環境現在稱為 AArch32。
A64:提供與 ARM 和 Thumb 指令集類似功能的 32 位固定長度指令集。隨 ARMv8-A 一起引入,它是一種 AArch64 指令集。
ARM ISA 不斷改進,以滿足前沿應用程序開發人員日益增長的要求,同時保留了必要的向后兼容性,以保護軟件開發投資。在 ARMv8-A 中,對 A32 和 T32 進行了一些增補,以保持與 A64 指令集一致。

附件介紹二:Exception Level

?ARMv8定義EL0-EL3共4個Exception Level來控制PE的行為.

ELx(x<4),x越大等級越高,執行特權越高

執行在EL0稱為非特權執行

EL2沒有Secure state,只有Non-secure state

EL3只有Secure state,實現EL0/EL1的Secure和Non-secure之間的切換

EL0 & EL1必須要實現,EL2/EL3則是可選實現

Exception Level與Security

Exception Level

EL0

Application

EL1

Linuxkernel- OS

EL2

Hypervisor(可以理解為上面跑多個虛擬OS)

EL3

Secure Monitor(ARM Trusted Firmware)

Security

Non-secure

EL0/EL1/EL2,只能訪問Non-secure memory

Secure

EL0/EL1/EL3,可以訪問Non-secure memory & Secure memory,可起到物理屏障安全隔離作用

關于ARMv8架構的知識,推薦如下博客:

http://blog.csdn.net/forever_2015/article/details/50285865

總結

以上是生活随笔為你收集整理的linux驱动由浅入深系列:PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。