2將Application Project和
Bootloader關(guān)聯(lián)起來
接下來,我們要利用該Bootloader調(diào)試目標(biāo)Application Project,如何才能將Bootloader和Application關(guān)聯(lián)起來呢?就需要借助剛才提到的Bootloader Project Build所生成的***.bld文件。
除了新建Project,也可以將任意一個(gè)現(xiàn)有的Project跟Bootloader關(guān)聯(lián)起來,此時(shí),該P(yáng)roject編譯的地址為Primary Slot起始地址加上Header大小。
Application Project會利用.bld中的內(nèi)容替代原始的鏈接腳本文件(linker script file)。編譯的起始地址來自標(biāo)號FLASH_IMAGE_START,中的值為0x00010200,可以看到,Header大小0x200已經(jīng)包含進(jìn)來。
另外,由于需要使用Python對Application Image進(jìn)行處理,因此需要在本地安裝Python以及相關(guān)插件的支持。該操作僅需執(zhí)行一次。
具體的步驟如下,在Project Tree界面下找到ramcu-toolsMCUbootscripts,鼠標(biāo)點(diǎn)擊右鍵,Command Window,則會在打開命令行界面,并進(jìn)入scripts文件夾。鍵入如下命令,安裝Python所需的lib。
pip3 install --user -r scripts/requirements.txt
Python安裝所需Lib的提示信息
Python命令中包含e2 studio中的Placeholder,針對某個(gè)具體的Project,在執(zhí)行的時(shí)候會解析為Workspace下的Project路徑以及Project名稱。
通過環(huán)境變量將Application Project關(guān)聯(lián)起來
打開Application Project的屬性界面,在C/C++ Build → Build Variables下添加.bld文件。
添加.bld文件到Application Project的Build Variables
同時(shí),對Application Project Image進(jìn)行簽名操作所需的公鑰放在Bootloader中,因此也需要將該文件鏈接到Application Project中,具體的實(shí)現(xiàn)方式如下:
添加Public Key for Sign
注意,此時(shí)Public Key for Sign依然位于Bootloader Project所在路徑,該配置只是引入該文件的地址,使得在Application Project中調(diào)用Python腳本對Image進(jìn)行簽名操作時(shí)找到該P(yáng)ublic Key。
另外,Image文件的版本信息可以通過添加Environment variable實(shí)現(xiàn),配置方式如下:
將Image版本號添加到Environment variable
最終生成的版本信息會以4字節(jié)添加到Header中。
為保證每次Environment variables有變化或者Bootloader生成的***.bld發(fā)生改變時(shí),Application Project都可以重新編譯,需在Pre-build中增加以下內(nèi)容:
rm -f ${ProjName}.elf
Pre-build step添加刪除***.elf的操作
完成了以上的所有基礎(chǔ)配置后,可以編譯Application Project。在Console界面查看Build Log,可以發(fā)現(xiàn)編譯完成后,增加了對Image文件的處理。
對Image簽名操作對應(yīng)的Python內(nèi)容
此時(shí)生成的***.bin.signed文件包含了Header,TLV和Trailer等內(nèi)容,可以被Bootloader識別并運(yùn)行。利用工具打開該文件,可以發(fā)現(xiàn)它不同于原始的Application Image文件:
.bin.signed文件結(jié)構(gòu)
開始的0x200字節(jié)是Header信息,在e2 studio中通過Environment variable傳入的版本信息1.0.0在0x14地址偏移上。關(guān)于其他部分的細(xì)節(jié),感興趣的朋友可自行查閱。
Application Image開始的0x200處,第二個(gè)4字節(jié)即當(dāng)前的中斷向量表起始地址,可以看到是小端格式的0x00012215,在Primary Slot地址空間(0x00010000~0x87FFF)內(nèi)。
3調(diào)試Application Project
由于芯片上電后需要從0地址(具體地說是0004h地址處)的中斷向量開始運(yùn)行,因此,調(diào)試Application Project時(shí)需要下載Bootloader 文件,我們在Application Project的Debug Configuration中添加相關(guān)部分。
Application Project Debug Configuration Startup選項(xiàng)卡配置
增加對于Bootloader的加載,類型選項(xiàng)設(shè)定為Image and Symbols,這樣調(diào)試狀態(tài)下可以跟蹤Bootloader中代碼運(yùn)行的狀態(tài)。
同時(shí),將Application Project對應(yīng)的***.elf → Load type設(shè)定為Symbols only,僅下載標(biāo)號。由于加載了Application Project對應(yīng)的symbol,因此我們可以調(diào)試時(shí)檢查代碼的運(yùn)行狀態(tài)。但實(shí)際下載到code flash的內(nèi)容是經(jīng)過了Python腳本處理,增加了Header,TLV和Trailer等信息的***.bin.signed文件,因此可以通過Bootloader的安全校驗(yàn)。
按下Debug按鈕,啟動調(diào)試,PC指針會停在Bootloader的Reset向量處,從地址0xa534(低于0x10000)可以判斷當(dāng)前位于Bootloader地址空間范圍內(nèi)。
調(diào)試Application Project
點(diǎn)擊Load Ancillary按鈕,將Application Project Debug文件夾下的***.bin.signed下載到芯片上,注意選擇地址為Primary Slot起始地址0x10000。
將1.0.0版本Image ***.bin.signed文件下載到Primary Slot的起始地址0x10000
在memory窗口檢查當(dāng)前Primary Slot中的內(nèi)容,可以看到Image版本為1.0.0。
Primary Slot中存儲了1.0.0版本的Image
點(diǎn)擊Resume,可以發(fā)現(xiàn)PC指針停在Primary Slot的Application Project Reset向量處,此時(shí)PC指針地址0x00012264位于Primary Slot地址空間范圍(0x10000~0x87FFF)。如下所示:
PC指針運(yùn)行在Primary Slot中
再次點(diǎn)擊resume,則可以觀察到代碼運(yùn)行在Primary Slot的Application Project中。
4升級并驗(yàn)證
由于升級方式是基于應(yīng)用層面的實(shí)現(xiàn),因此依賴客戶的設(shè)計(jì)。如果需要展示,則建議參考下方鏈接Application Note中的內(nèi)容,對應(yīng)的示例代碼包含了遵循XModem協(xié)議利用UART傳輸Image。
RA6 MCU Advanced Secure Bootloader Design using MCUboot and Code Flash Dualbank Mode
在調(diào)試狀態(tài)下,可以通過將待更新的Image文件下載到Secondary Slot中,重啟即可使得升級生效。
在Application Project上稍作修改,比如原始的Project在EK-RA6M4上使三個(gè)LED(紅綠藍(lán))一起閃爍,而我們將代碼更新為只有一個(gè)LED(藍(lán)色)閃爍。同時(shí),將Image Version從1.0.0更改為1.1.0,重新Build Project,確認(rèn)Debug文件夾下的.bin.signed重新生成了。
現(xiàn)在將1.1.0版本的Image燒錄到Secondary Slot中,點(diǎn)擊Load Ancillary,選中***.bin.signed,目標(biāo)地址選擇0x88000。
將1.1.0版本Image下載到Secondary Slot中
下載成功后查看Memory中的內(nèi)容,可以確認(rèn)Secondary Slot存儲了1.1.0版本的Image。
Secondary Slot保存了1.1.0版本的Image
按下Reset按鈕,使得Bootloader運(yùn)行,啟動代碼升級。
可以看到EK-RA6M4從三顆LED閃爍變?yōu)閮H有一顆藍(lán)色LED閃爍,表明升級成功。
升級完成后查看Secondary Slot對應(yīng)的Flash已經(jīng)擦除,Primary Slot中保存了1.1.0版本的Image文件,如下所示。
Primary Slot保存了1.1.0版本的Image,Secondary Slot被擦除
-
編譯
+關(guān)注
關(guān)注
0文章
657瀏覽量
32852 -
bootloader
+關(guān)注
關(guān)注
2文章
235瀏覽量
45611 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84627
原文標(biāo)題:MCUboot系列(2-2)RA Overwrite模式在FSP中的支持
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論