• 正文
    • 1、FSBL介紹
    • 2、FSBL模式
    • 3、FSBL+Appliction
    • 4、就地執(zhí)行
    • 5、總結(jié)
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

STM32也能運(yùn)行雙系統(tǒng)嘛?FSBL引導(dǎo)加載程序的簡(jiǎn)單介紹以及用途推測(cè)!

03/15 11:25
1295
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1、FSBL介紹

FSBL是STM32N6微控制器引導(dǎo)過(guò)程中的“第一階段引導(dǎo)加載程序”的簡(jiǎn)稱(chēng),負(fù)責(zé)上電時(shí)系統(tǒng)的初始化、配置硬件,并將應(yīng)用程序代碼從外部Flash/ROM加載到內(nèi)部或外部存儲(chǔ)器中執(zhí)行。當(dāng)系統(tǒng)復(fù)位時(shí),引導(dǎo) ROM 遵循特定的步驟序列。 這段話(huà)似乎難以理解,我們接下來(lái)引用圖解。(本文以介紹和猜測(cè)為主暫無(wú)代碼驗(yàn)證)

2、FSBL模式

STM32N6的存儲(chǔ)分布大體如圖所示,其中地址0x18000000起至0x1801FFFF為BOOTRAM對(duì)應(yīng)系統(tǒng)引導(dǎo)程序。

0x70000000之后為外部FLASH,F(xiàn)SBL的二進(jìn)制文件從這里開(kāi)始總共511KB。

這里的FSBL的二進(jìn)制文件包含了代碼部分以及簽名頭,F(xiàn)SBL的二進(jìn)制文件必須經(jīng)過(guò)簽名之后才可以被STM32的BOOTROM引導(dǎo)程序啟動(dòng)。這缺少的1K空間就是給簽名用的。

之后我會(huì)出文章演示使用STM32CubeProgram進(jìn)行文件簽名。

BOOTLoader會(huì)將FSBL代碼復(fù)制到搬運(yùn)至內(nèi)部SRAM2,地址0x34180000中開(kāi)始,因此這個(gè)地址非常的重要,代表著FSBL代碼區(qū),之后跳轉(zhuǎn)到FSBL代碼區(qū)運(yùn)行。

這種方法的劣勢(shì)很多,主要是FSBL的空間只有511KB,想要擴(kuò)大空間就需要參考接下來(lái)的模式。

3、FSBL+Appliction

在此基礎(chǔ)上,我們可以編寫(xiě)主要的程序代碼,將其二進(jìn)制文件燒錄至外部FLASH。

該模式下啟動(dòng)步驟總共有四步:首先是BOOTLoader跳轉(zhuǎn)到外部FSBL代碼區(qū),將外部存儲(chǔ)的FSBL二進(jìn)制文件拷貝到內(nèi)部存儲(chǔ)的0x34180000處。

FSBL開(kāi)始執(zhí)行,然后拷貝Application的完整內(nèi)容到內(nèi)部SRAM。然后跳轉(zhuǎn)到APP代碼進(jìn)行執(zhí)行。

這樣子做的好處是可以解決FSBL只能存放最多511KB代碼的問(wèn)題。

因?yàn)閮?nèi)部存儲(chǔ)的其他存儲(chǔ)空間(不包括0x34180000開(kāi)始的FSBL代碼區(qū))可以用來(lái)存放Application的代碼,空間很大,在這種分配模式下,F(xiàn)SBL和Application的代碼量可以達(dá)到2MB。

4、就地執(zhí)行

第三種FSBL的啟動(dòng)模式,F(xiàn)SBL+XiP(Execute in Place),顧名思義:就地執(zhí)行。

與前一種方法對(duì)比,F(xiàn)SBL+XiP不再將外部Flash的App代碼復(fù)制到內(nèi)部Flash中,而是在FSBL執(zhí)行后將程序指針設(shè)置為外部Flash中的APP代碼中的第一條開(kāi)始執(zhí)行。當(dāng)然這里是否能在外部Flash中存放多份代碼,多份執(zhí)行這里有待嘗試。

由于博主暫時(shí)沒(méi)試過(guò)這個(gè)功能,這里就不做過(guò)多贅述(博主需要仔細(xì)研究一下)

5、總結(jié)

總而言之,F(xiàn)SBL的作用主要是負(fù)責(zé)引導(dǎo)程序,用戶(hù)決定系統(tǒng)如何啟動(dòng)。其通過(guò)密碼學(xué)算法校驗(yàn)應(yīng)用程序的完整性和合法性,防止惡意代碼或篡改后的固件運(yùn)行。STM32在代碼安全性中真的花了很大的功夫,不夠博主在代碼安全性方面真的概念不多,因此就只點(diǎn)一下。

應(yīng)用FSBL之后可以應(yīng)該實(shí)現(xiàn)引導(dǎo)程序的多樣化并且有很多應(yīng)用場(chǎng)景,例如無(wú)線升級(jí)之后,F(xiàn)SBL可以檢測(cè)代碼是否進(jìn)行了升級(jí)決定啟動(dòng)方式,以及可以設(shè)置兩份代碼區(qū),當(dāng)主要代碼損壞之后運(yùn)行備份代碼區(qū)等等功能。

當(dāng)主程序超出內(nèi)部Flash容量時(shí),F(xiàn)SBL負(fù)責(zé)將代碼從外部存儲(chǔ)器加載到RAM中執(zhí)行。

所以依據(jù)這些特性將FSBL理解足夠深透的話(huà)應(yīng)該可以實(shí)現(xiàn)很多很棒的功能,例如雙系統(tǒng)(裸機(jī)+RTOS)類(lèi)似當(dāng)電腦裝了雙系統(tǒng)之后上機(jī)的引導(dǎo)程序那樣子。

或者實(shí)現(xiàn)業(yè)務(wù)代碼和啟動(dòng)邏輯的分離,修改FSBL而不影響主代碼的內(nèi)容。

當(dāng)然更多的內(nèi)容和使用方法還有待繼續(xù)探索!

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶(hù)資源
  • 寫(xiě)文章/發(fā)需求
立即登錄