[ATF]-ATF启动--BL31跳转到optee和uboot
生活随笔
收集整理的這篇文章主要介紹了
[ATF]-ATF启动--BL31跳转到optee和uboot
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ATF
- 1、背景
- 2、ATF編譯
- 3、ATF的啟動(dòng)
- 4、獲取optee/uboot的跳轉(zhuǎn)地址
- 4、總結(jié)一下ATF啟動(dòng)流程
★★★ 鏈接 : 個(gè)人博客導(dǎo)讀首頁—點(diǎn)擊此處 ★★★
1、背景
在vendor某些廠商的設(shè)計(jì)中,ATF并不是BOOTROM加載后的第一個(gè)啟動(dòng)鏡像,可能是這樣的:
BOOTROM—>PL—>ATF—>optee—>uboot…, 在PL階段就已經(jīng)將ATF/optee/uboot鏡像的load到內(nèi)存了.
2、ATF編譯
由上述背景的原因,我們的ATF就不需要走BL1/BL2階段load optee/uboot鏡像到內(nèi)存了,直接走BL3即可.
所以bl1和bl2目錄也無需編譯.
我們的編譯方法是在make的時(shí)候傳入RESET_TO_BL31=1參數(shù):
make -C $DIRPATH RESET_TO_BL31=1 PLAT=xxxx clean make -C $DIRPATH RESET_TO_BL31=1 PLAT=xxx xxxx_VDK=0 xxxxxx=0 xxxxxx=0 HIGHADDR_DEVICE=1 all3、ATF的啟動(dòng)
從bl31.ld.S文件可知,ATF是從bl31_entrypoint開始啟動(dòng)的
func bl31_entrypointbl bl31_early_platform_setupbl bl31_plat_arch_setupbl bl31_main在bl31_main()函數(shù)中:
- runtime_svc_init()跳轉(zhuǎn)optee之前的準(zhǔn)備,然后再調(diào)用bl32_init跳轉(zhuǎn)到optee,optee
os初始化完成后再從此處回來。 - bl31_prepare_next_image_entry()跳轉(zhuǎn)uboot之前的準(zhǔn)備,返回到bl31_entrypoint后調(diào)用b
el3_exit跳轉(zhuǎn)到uboot, PC就不會(huì)再回此處了。下次PC再回來就是在REE進(jìn)行了smc調(diào)用,那時(shí)是直接跳轉(zhuǎn)到ATF的異常向量表.
4、獲取optee/uboot的跳轉(zhuǎn)地址
bl31_prepare_next_image_entry()可以獲取optee/uboot的跳轉(zhuǎn)地址,該地址最終來自于platform_def.h頭文件中寫死的地址
- #define BL32_BASE (PLAT_S_DRAM_BASE + BL31_SIZE + PLAT_TRUSTED_MAILBOX_SIZE)
- #define PLAT_NS_IMAGE_BASE 0x80000000
#define PLAT_NS_IMAGE_OFFSET (PLAT_NS_IMAGE_BASE + 0x9000000)
4、總結(jié)一下ATF啟動(dòng)流程
總結(jié)
以上是生活随笔為你收集整理的[ATF]-ATF启动--BL31跳转到optee和uboot的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux kernel内存管理学习篇
- 下一篇: [optee]-optee的加解密接口的