由于物聯(lián)網(wǎng)設(shè)備存儲空間有限,成本要求嚴苛,因此Bootloader需要滿足占用空間小、功能安全、極速啟動等需求。英特爾Slim Bootloader 就是專為物聯(lián)網(wǎng)應用案例量身定制,是一款開源的啟動固件解決方案,當系統(tǒng)上電時負責初始化系統(tǒng)的核心硬件組件,然后加載和啟動所需要的操作系統(tǒng)。
從構(gòu)建之初,Slim Bootloader就考慮了安全性、輕量級和高度優(yōu)化,可以利用EDK II框架中的強大工具和庫,可以根據(jù)系統(tǒng)的特殊需求進行隔離、配置和優(yōu)化,從而達到優(yōu)異的啟動性能,并最大限度地減少固件所占用的空間。同時具有模塊化、可擴展設(shè)計的優(yōu)點,根據(jù)源版本實現(xiàn)產(chǎn)品質(zhì)量參考,BSD許可證開源,實際產(chǎn)品可能會根據(jù)不同的許可證發(fā)布。
Intel物聯(lián)網(wǎng)部門 Bootloader 的架構(gòu)原則是通過簡單靈活的架構(gòu)實現(xiàn)快速廣泛的采用,并利用內(nèi)部和外部開發(fā)社區(qū),以安全為基礎(chǔ)進行設(shè)計和開發(fā)。
在設(shè)計中,Slim Bootloader具有幾大優(yōu)勢:
簡單快速,線性執(zhí)行流程實現(xiàn)可預測性,通過FSP API將復雜的芯片初始化代碼進行抽象,包括TempRamInit, FspMemoryInit, FspTempRamExit, FspSiliconInit, NotifyPhase;
具有靈活性,將初始化代碼分成具有標準化接口的模塊化階段:– Stage1A (SRAM/Flash) => Stage1B (Flash/CAR) => Stage2 (MEM),且不同的Payload用于引導不同的OS或應用程序;
可移植性,核心代碼高度模塊化,通過提供不同的靜態(tài)庫,不同的開發(fā)板/芯片可以用過hook函數(shù)實現(xiàn)平臺相關(guān)的初始化;配置(內(nèi)置或外置)支持多種開發(fā)板;
利用經(jīng)過驗證的代碼,F(xiàn)SP二進制文件,以及已被驗證的BIOS中的平臺庫(例如:GPIO init);
編譯框架,支持多種OS(Windows 和 Linux)和多種工具鏈;
安全性,通過Intel?BootGuard實現(xiàn)基于硬件的啟動完整性保護的安全啟動,支持verified boot和Measured boot。
下面針對初始化階段和啟動階段分別講述Slim Bootloader的優(yōu)勢:
初始化階段
高級架構(gòu)
如上圖所示,系統(tǒng)的初始化階段,電路板和芯片初始化,包括資源分配,GPIO、ACPI等。Payload階段包括通用媒介驅(qū)動、自定義功能、特定的OS加載協(xié)議等。其中*OS loader是默認Payload,也支持使用其他的payload。
啟動階段:
啟動階段
如圖所示,啟動階段包括第1A階段、第1B階段、第2階段、有效負載階段。在第1A階段,通過匯編代碼重置矢量階段,進行基本初始化,包括設(shè)置臨時存儲器、調(diào)試輸出;在第1B階段,進行內(nèi)存初始化,加載配置數(shù)據(jù);在第2階段,進行PostMemory,芯片初始化、ACPI,PCI枚舉等;OsLoader / FWU 有效負載包括操作系統(tǒng)啟動邏輯和媒體驅(qū)動程序。
Slim Bootloader可以利用EDK2構(gòu)建基礎(chǔ)架構(gòu),支持Windows和Linux環(huán)境,支持多種平臺,支持多個目標(D / R);必備工具包括VisualStudio(Windows)、GCC工具鏈(Linux)、NAMM、Python、iASL、OpenSSL;由pythonBuildLoader.py構(gòu)建qemu,圖片存放于Slimbootloader.bin中。
另外,Payload提供靈活的基礎(chǔ)架構(gòu)來擴展功能,英特爾SlimBootloader執(zhí)行基礎(chǔ)硬件初始化;有效負載執(zhí)行特定的加載/引導。可以看出,Payload是一個模塊化組件,能夠輕松更改默認有效負載,有效負載可以高度定制,以提供所需的確切功能;Payload可以是通用引導加載程序或特殊用途的特殊應用程序。