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