RA Swap模式在FSP中的支持(1)

描述

接下来我们需要在hal_entry.c中增加对函数mcuboot_quick_setup()的调用。在e2 studio界面下,Project Explorer中找到Developer Assistance找到Call Quick Setup,鼠标左键点选,保持左键按下的状态,拖动到hal_entry.c文件的hal_entry()函数定义之前。

源码

利用Developer Assistant向源码中增加mcuboot_quick_setup定义

然后在hal_entry()入口处增加对函数mcuboot_quick_setup的调用。

源码

在hal_entry()入口处增加调用mcuboot_quick_setup

Build Project可以顺利完成,提示“0 errors, 0 warnings”。在Debug文件夹下确认包含同名的***.bld文件,用文本编辑器打开,检查内容。

源码

Bootloader Project Build生成的.bld文件

.bld文件是XML格式的,主要包含两部分:

第一部分是symbol,主要是Bootloader对Flash Layout的设定,FLASH_IMAGE_START值为0x00018200,即位于Primary Slot的Application Project实际Link(链接)地址。FLASH_IMAGE_LENGTH值为0x0002FE00,即Primary Slot大小(0x30000)减掉Header Size(0x200)。

第二部分是对Application Image进行签名所用到的Python命令,该命令的输入是Application Project Build生成的原始Binary(二进制)文件,输出是同名的签名后的文件,后缀是.bin.signed。同时传入的参数还有文件版本,签名所用的密钥等。由于RA4M2搭载了支持TrustZone的Cortex-M33内核,因此文件的结构包含了对TrustZone的支持。对于不启用TrustZone的应用场景,我们仅需关注Python命令的第一部分。

2将Application Project和Bootloader关联起来

接下来,我们要利用该Bootloader调试目标Application Project,如何才能将Bootloader和Application关联起来呢?就需要借助刚才提到的Bootloader Project Build所生成的***.bld文件。

除了新建Project,也可以将任意一个现有的Project跟Bootloader关联起来,此时,该Project编译的地址为Primary Slot起始地址加上Header大小。

Application Project会利用.bld中的内容替代原始的链接脚本文件(linker script file)。编译的起始地址来自标号FLASH_IMAGE_START,图中的值为0x00018200,可以看到,Header大小0x200已经包含进来。

另外,由于需要使用Python对Application Image进行处理,因此需要在本地安装Python以及相关插件的支持。该操作仅需执行一次。

具体的步骤如下,在Project Tree界面下找到ramcu-toolsMCUbootscripts,鼠标点击右键,Command Window,则会在打开命令行界面,并进入scripts文件夹。键入如下命令,安装Python所需的lib。

pip3 install --user -r scripts/requirements.txt

源码

Python安装所需Lib的提示信息

Python命令中包含e2 studio中的Placeholder,针对某个具体的Project,在执行的时候会解析为Workspace下的Project路径以及Project名称。

通过环境变量将Application Project关联起来

打开Application Project的属性界面,在C/C++ Build → Build Variables下添加.bld文件。

源码

添加.bld文件到Application Project的Build Variables

同时,对Application Project Image进行签名操作所需的公钥放在Bootloader中,因此也需要将该文件链接到Application Project中,具体的实现方式如下:

源码

添加Public Key for Sign

注意,此时Public Key for Sign依然位于Bootloader Project所在路径,该配置只是引入该文件的地址,使得在Application Project中调用Python脚本对Image进行签名操作时找到该Public Key。

另外,Image文件的版本信息可以通过添加Environment variable实现,配置方式如下:

源码

将Image版本号添加到Environment variable

最终生成的版本信息会以4字节添加到Header中。

为保证每次Environment variables有变化或者Bootloader生成的***.bld发生改变时,Application Project都可以重新编译,需在Pre-build中增加以下内容:

rm -f ${ProjName}.elf

源码

Pre-build step添加删除***.elf的操作

完成了以上的所有基础配置后,可以编译Application Project。在Console界面查看Build Log,可以发现编译完成后,增加了对Image文件的处理。

源码

对Image签名操作对应的Python内容

此时生成的***.bin.signed文件包含了Header,TLV和Trailer等内容,可以被Bootloader识别并运行。利用工具打开该文件,可以发现它不同于原始的Application Image文件:

源码

.bin.signed文件结构

开始的0x200字节是Header信息,在e2 studio中通过Environment variable传入的版本信息1.0.0在0x14地址偏移上。关于其他部分的细节,感兴趣的朋友可自行查阅。

Application Image开始的0x200处,第二个4字节即当前的中断向量表起始地址,可以看到是小端格式的0x00018ab9,在Primary Slot地址空间(0x00018000~0x87FFF)内。

未完待续

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分