天天看點

[ATF]ARMv8 cpu cold boot

本文軟體分析使用arm-trust-firmwire v1.3版本。基于公開的fvp platform分析流程。

*   Boot Loader stage 1 (BL1) _AP Trusted ROM_
*   Boot Loader stage 2 (BL2) _Trusted Boot Firmware_
*   Boot Loader stage 3-1 (BL31) _EL3 Runtime Software_
*   Boot Loader stage 3-2 (BL32) _Secure-EL1 Payload_ (optional)
*   Boot Loader stage 3-3 (BL33) _Non-trusted Firmware
           

由于各個平台的cold boot流程有所差異。bl2所指的各有不同命名。

從bl2跳轉後就進入了bl31, bl31的入口即bl31_entrypoint

reset to bl31=0,隻有主cpu的cold boot會從bl31_entrypoint進來,是以在前面的引導啟動流程裡面應該已經設定了cpu endianness以及memory初始化。

reset to bl31=1,意味着大量的工作都在bl31的代碼中完成,如下圖檔的分析在定義reset to bl31以及armv8的代碼基礎來畫的流程。

cold boot 判斷:

在reset to bl31定義後,意味着cold boot/warm boot都是從bl31_entrypoint進入,在v1.3的版本coold boot是确定的,在cold boot第一次起來後,cpu reset 後的warm boot跳轉到warm boot的位址了。

Platform_mem_init :

這個mem init主要是指ddr相關的配置,這可以在這裡完成也可以在bl2的代碼完成。

Bl33_image_ep_info:

這個結構體儲存的資訊需要關注,從bl31到bl32/bl33的相關資訊在這裡面。

cold boot 需要重點配置的子產品:

cci>mmu>gic>security>timer>pmu。

smc的接口初始化在cold boot裡面完成。

[ATF]ARMv8 cpu cold boot