先看arm官網提供的一張圖:
上圖詳細概括了arm官方推薦的armv8的啟動層次結構:
官方將啟動分為了BL1,BL2,BL31,BL32,BL33階段,根據順序,芯片啟動后首先執行BL1階段代碼,接著驗簽啟動BL2,BL2根據具體設計啟動BL31或者BL33,BL32只有在有BL31時才可能會存在并被驗簽加載啟動。
armv8分為Secure World和Non-Secure World(Normal World),四種異常級別從高到低分別為EL3,EL2,EL1,EL0。
? Secure World就是可以執行可信的firmware和app,比如密碼支付,指紋識別等一系列依賴安全保證的服務。
? Non-Secure World就是我們常見的u-boot,linux,qnx等裸機程序或者操作系統。
? EL3具有最高管理權限,負責安全監測和安全模式切換。
? EL2主要提供了對虛擬化的支持。
? EL1是一個特權模式,能夠執行一些特權指令,用于運行各類操作系統,在安全模式則是可信任OS。
? EL0是無特權模式,所有APP應用都在EL0。
上圖中的BL1,BL2,BL31,BL32,BL33分別對應如下功能:
? BL1:是一切信任的根,一般就是固化在ROM中的一段啟動加載代碼,用于引導bl2,并對bl2進行驗簽保證可信任執行;
?BL2:一般是在flash中的一段可信安全啟動代碼,它的可信建立在bl1對它的驗證,主要完成一些平臺相關的初始化,比如對ddr的初始化等,并在完成初始化后尋找BL31或者BL33進行執行;如果找到了BL31則不會繼續調用BL33,如果沒有BL31則BL33必須有;
?BL31:BL31不像BL1和BL2是一次性運行的,它作為最后一道可信任固件存在,在系統運行時通過smc指令陷入EL3調用系統安全服務或者在Secure World和Non-Secure World之間進行切換;在完成BL31初始化后會去尋找BL32或者BL33進行驗簽后加載執行;
? BL32:OPTee OS + 安全app,它是一個可信安全的OS運行在EL1并在EL0啟動可信任APP(上述的指紋驗證等app),并在Trust OS運行完成后通過smc指令返回BL31,BL31切換到Non-Seucre World繼續執行BL33;
? BL33:非安全固件,也就是我們常見的UEFI firmware或者u-boot也可能是直接啟動Linux
kernel;啟動BL1,BL2,BL31,BL32則是一個完整的ATF信任鏈建立流程(ARM Trusted Firmware),像常見的PSCI(Power State Coordination Interface)功能則是在ATF的BL31上實現;
最后一張圖完整展示整個調用流程:
BL2根據是否存在BL31和BL32可選擇性的加載不同firmware;
綜上所述可知u-boot是一個運行在非安全世界的bootloader,負責加載各類操作系統,并提供豐富的驅動接口;
并根據是否存在安全固件還可以進行不同的boot流程,如下。
?u-boot,u-boot-spl,u-boot-tpl的關系:對于一般嵌入式而言只需要一個u-boot作為bootloader即可,但是在小內存,或者有atf的情況下還可以有spl,tpl;
? spl:Secondary Program Loader,二級加載器
? tpl:Tertiary Program Loader,三級加載器
出現spl和tpl的原因最開始是因為系統sram太小,rom無法在ddr未初始化的情況下一次性把所有代碼從flash,emmc,usb等搬運到sram中執行,也或者是flash太小,無法完整放下整個u-boot來進行片上執行。
所以u-boot又定義了spl和tpl,spl和tpl走u-boot完全相同的boot流程,不過在spl和tpl中大多數驅動和功能被去除了,根據需要只保留一部分spl和tpl需要的功能,通過CONFIG_SPL_BUILD和CONFIG_TPL_BUILD控制;
一般只用spl就足夠了,spl完成ddr初始化,并完成一些外設驅動初始化,比如usb,emmc,以此從其他外圍設備加載u-boot,但是如果對于小系統spl還是太大了,則可以繼續加入tpl,tpl只做ddr等的特定初始化保證代碼體積極小,以此再次從指定位置加載spl,spl再去加載u-boot。
從目前來看,spl可以取代上圖中bl2的位置,或者bl1,根據具體廠商實現來決定,有一些芯片廠商會將spl固化在rom中,使其具有從emmc,usb等設備加載u-boot或者其他固件的能力。
當然在有atf的情況下可以由atf加載u-boot,或者由spl加載atf,atf再去加載u-boot。
甚至在快速啟動的系統中可以直接由spl啟動加載linux等操作系統而跳過啟動u-boot;
在上圖中arm官方只是給出了一個建議的啟動信任鏈,具體實現都需要芯片廠商來決定;
后續分析啟動流程中會在具有SPL和TPL的地方拓展它們的分叉執行路徑盡量把SPL和TPL的功能也一并分析;
-
芯片
+關注
關注
456文章
50965瀏覽量
424829 -
ARM
+關注
關注
134文章
9111瀏覽量
368034 -
Uboot
+關注
關注
4文章
125瀏覽量
28259 -
系統
+關注
關注
1文章
1017瀏覽量
21376
發布評論請先 登錄
相關推薦
評論