前面介紹了MCUboot的基礎(chǔ)知識,您可通過上方鏈接回顧,本章將著重介紹其中的Overwrite模式,以及在FSP中如何配置、如Flash怎樣劃分、安全校驗(yàn)的方式等。本文以RA6M4 1M Code Flash產(chǎn)品為例,使用Flat mode(不啟用TrustZone)說明Overwrite模式進(jìn)行升級時的注意事項。
首先回顧一下Overwrite模式升級的流程。
MCUboot Overwrite模式解
從代碼框架來看,整體劃分為三部分,Bootloader,Primary Slot(保存了低版本的User Application v1.0)和Secondary Slot(保存了待更新的高版本User Application v2.0)。
初始狀態(tài)下,芯片中燒錄了Bootloader和Primary Slot,代碼從Bootloader處啟動,跳轉(zhuǎn)至Primary Slot中的User Application v1.0。在User Application v1.0運(yùn)行過程中,接收來自外部的更高版本Firmware v2.0,并燒寫到Secondary Slot中,燒寫完成后,執(zhí)行軟件復(fù)位Software reset,代碼重新從Bootloader開始運(yùn)行。此時Bootloader判斷Secondary Slot中代碼的版本(v2.0高于v1.0),檢查其完整性等等,校驗(yàn)通過后,將Primary Slot擦除,并將Secondary Slot中的內(nèi)容拷貝到Primary Slot中。之后跳轉(zhuǎn)至Primary Slot中的新代碼v2.0執(zhí)行。比較升級操作的初始狀態(tài)和終止?fàn)顟B(tài),發(fā)現(xiàn)Primary Slot中運(yùn)行的代碼從低版本的v1.0變?yōu)楦甙姹镜膙2.0。
在e2 studio中進(jìn)行開發(fā)時,Bootloader和User Application為相互獨(dú)立的Project,但位于同一個Workspace中。先Build Bootloader Project,然后Build位于Primary Slot的User Application Project,由于Bootloader規(guī)定了對于整個存儲空間的劃分,同時包含了對User Application Image進(jìn)行簽名/驗(yàn)簽所用的密鑰,因此Application Project會依據(jù)Bootloader build輸出的Bootloader Data File代替原有的Linker Script File(鏈接腳本文件)進(jìn)行l(wèi)ink,并利用Bootloader包含的密鑰進(jìn)行Image映像文件的處理。
1新建Bootloader并配置MCUboot參數(shù)
由于Bootloader是整個系統(tǒng)的關(guān)鍵,因此我們第一步創(chuàng)建Bootloader Project并配置一些關(guān)鍵選項如Flash Layout和加密算法等。
對于Bootloader Project,可以在e2 studio中新建并命名。在FSP的Stack選項卡下,點(diǎn)擊New Stack → Bootloader → MCUboot,即可將該功能添加進(jìn)來。
FSP中添加MCUboot
添加MCUboot之后,由于它依賴一些底層驅(qū)動,如Flash,Crypto等,因此會在初始界面提示錯誤,按照提示信息逐個修復(fù)即可,此處不詳細(xì)展開。
FSP中MCUboot
將所有的錯誤修正后,配置MCUboot的關(guān)鍵屬性。
FSP中MCUboot General屬性
展開Common選項下的General屬性,對于幾個可配置的關(guān)鍵選項,說明如下:
升級模式Upgrade Mode,可以從Overwrite、Swap和Direct XIP中選擇,此次選擇Overwrite Only。該選項是決定Bootloader大小的關(guān)鍵性因素,Overwrite模式最小,Swap模式最大。
Validate Primary Image,建議設(shè)定為Enabled,除非資源非常緊張,開啟這部分功能帶來的代碼量增加不過幾十字節(jié)而已。
Downgrade Prevention(Overwrite Only),假如設(shè)定為Disabled,則每次Secondary Slot中有新的Image,都會拷貝到Primary Slot中(安全校驗(yàn)通過的前提下)。假如設(shè)定為Enabled,則Bootloader會檢查Secondary Slot中存儲的Image版本,高于Primary Slot中Image版本的情況下才會拷貝??筛鶕?jù)實(shí)際需要選擇。
FSP中MCUboot Signing and Encryption Options屬性
展開Common選項下的Signing and Encryption Options屬性,對于幾個可配置的關(guān)鍵選項,說明如下:
簽名類型Signature Type,規(guī)定了對于Application Image進(jìn)行簽名所用的方式,可從None,ECDSA P-256,RSA 2048,RSA 3072四項中任選其一。假如使能簽名,則代碼量最小的是ECDSA P-256
Encryption Scheme,根據(jù)對于Application Image是否加密進(jìn)行設(shè)定。默認(rèn)是Disabled,假如使能,則可以從ECIES-P256和RSA-OAEP (RSA 2048 only)中任選其一。Encryption Enabled情況下,Bootloader代碼量會明顯增加
接下來配置Flash Layout
對于Flash Layout來說,由于升級模式已鎖定Overwrite,在此基礎(chǔ)上決定Bootloader的大小因素就只剩下校驗(yàn)算法的選擇了。
由于Bootloader占據(jù)從0地址開始的空間,而RA6M4在低地址上的8個block大小均為8KB,因此我們將Bootloader大小設(shè)定為64KB,即0x10000。由于高地址上的Block大小為32KB,因此對于1MB code flash的RA6M4來說,可以將剩下的30個(37-8+1)Block等分,Primary Slot和Secondary Slot各占15 Blocks(0x78000字節(jié))。
RA6M4線性模式下Code Flash地址空間
FSP中MCUboot Flash Layout設(shè)置
Bootloader Flash Area Size (Bytes):
設(shè)定為0x10000即可
Image 1 Header Size (Bytes):
前面的劃分Primary Slot和Secondary Slot包含Header,對于Cortex-M33內(nèi)核的產(chǎn)品,有中斷向量表對齊的要求,因此我們建議將Header size統(tǒng)一設(shè)定為0x200,以支持Application的所有中斷。
Image 1 Flash Area Size (Bytes):
根據(jù)前面的計算結(jié)果,填入0x78000 (15個32K block)
由于Scratch Area僅針對Swap模式有效,因此在Overwrite模式下設(shè)定為0即可。
至此,對于Bootloader的配置已經(jīng)完成了。
接下來我們需要在hal_entry.c中增加對函數(shù)mcuboot_quick_setup()的調(diào)用。在e2 studio界面下,Project Explorer中找到Developer Assistance找到Call Quick Setup,鼠標(biāo)左鍵點(diǎn)選,保持左鍵按下的狀態(tài),拖動到hal_entry.c文件的hal_entry()函數(shù)定義之前。
利用Developer Assistant向源碼中增加mcuboot_quick_setup定義
然后在hal_entry()入口處增加對函數(shù)mcuboot_quick_setup的調(diào)用。
在hal_entry()入口處增加調(diào)用mcuboot_quick_setup
Build Project可以順利完成,提示“0 errors, 0 warnings”。在Debug文件夾下確認(rèn)包含同名的***.bld文件,用文本編輯器打開,檢查內(nèi)容。
Bootloader Project Build生成的.bld文件
.bld文件是XML格式的,主要包含兩部分:
第一部分是symbol,主要包含Bootloader對Flash Layout的設(shè)定,F(xiàn)LASH_IMAGE_START值為0x00010200,即位于Primary Slot的Application Project實(shí)際Link(鏈接)地址。FLASH_IMAGE_LENGTH值為0x00077E00,即Primary Slot大小(0x78000)減掉Header Size(0x200)。
第二部分是對Application Image進(jìn)行簽名所用到的Python命令,對于該命令來說,輸入是Application Project Build生成的原始Binary(二進(jìn)制)文件,輸出是同名的簽名后的文件,后綴是.bin.signed。同時傳入的參數(shù)還有文件版本,簽名所用的密鑰等。由于RA6M4搭載了支持TrustZone的Cortex-M33內(nèi)核,因此文件的結(jié)構(gòu)包含了對TrustZone的支持。對于不啟用TrustZone的應(yīng)用場景,我們僅需關(guān)注Python命令的第一部分。
-
芯片
+關(guān)注
關(guān)注
456文章
51242瀏覽量
427508 -
FlaSh
+關(guān)注
關(guān)注
10文章
1644瀏覽量
148719 -
FSP
+關(guān)注
關(guān)注
0文章
34瀏覽量
7180
原文標(biāo)題:MCUboot系列(2-1)RA Overwrite模式在FSP中的支持
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論