0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何才能将Bootloader和Application关联起来

瑞萨MCU小百科 来源:瑞萨MCU小百科 2024-06-12 14:32 次阅读

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,中的值为0x00010200,可以看到,Header大小0x200已经包含进来。

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

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

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

e7f28c72-2871-11ef-91d2-92fbcf53809c.png

Python安装所需Lib的提示信息

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

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

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

e821578c-2871-11ef-91d2-92fbcf53809c.png

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

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

e851eb7c-2871-11ef-91d2-92fbcf53809c.png

添加Public Key for Sign

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

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

e87a526a-2871-11ef-91d2-92fbcf53809c.png

将Image版本号添加到Environment variable

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

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

rm -f ${ProjName}.elf

e89b06ae-2871-11ef-91d2-92fbcf53809c.png

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

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

e8be85e8-2871-11ef-91d2-92fbcf53809c.png

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

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

e8e6691e-2871-11ef-91d2-92fbcf53809c.png

.bin.signed文件结构

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

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

3调试Application Project

由于芯片上电后需要从0地址(具体地说是0004h地址处)的中断向量开始运行,因此,调试Application Project时需要下载Bootloader 文件,我们在Application Project的Debug Configuration中添加相关部分。

e9047cf6-2871-11ef-91d2-92fbcf53809c.png

Application Project Debug Configuration Startup选项卡配置

增加对于Bootloader的加载,类型选项设定为Image and Symbols,这样调试状态下可以跟踪Bootloader中代码运行的状态。

同时,将Application Project对应的***.elf → Load type设定为Symbols only,仅下载标号。由于加载了Application Project对应的symbol,因此我们可以调试时检查代码的运行状态。但实际下载到code flash的内容是经过了Python脚本处理,增加了Header,TLV和Trailer等信息的***.bin.signed文件,因此可以通过Bootloader的安全校验。

按下Debug按钮,启动调试,PC指针会停在Bootloader的Reset向量处,从地址0xa534(低于0x10000)可以判断当前位于Bootloader地址空间范围内。

e923c73c-2871-11ef-91d2-92fbcf53809c.png

调试Application Project

点击Load Ancillary按钮e950f73e-2871-11ef-91d2-92fbcf53809c.png,将Application Project Debug文件夹下的***.bin.signed下载到芯片上,注意选择地址为Primary Slot起始地址0x10000。

e9646bc0-2871-11ef-91d2-92fbcf53809c.png

将1.0.0版本Image ***.bin.signed文件下载到Primary Slot的起始地址0x10000

在memory窗口检查当前Primary Slot中的内容,可以看到Image版本为1.0.0。

e983882a-2871-11ef-91d2-92fbcf53809c.png

Primary Slot中存储了1.0.0版本的Image

点击Resume,可以发现PC指针停在Primary Slot的Application Project Reset向量处,此时PC指针地址0x00012264位于Primary Slot地址空间范围(0x10000~0x87FFF)。如下所示:

e9a07aa2-2871-11ef-91d2-92fbcf53809c.png

PC指针运行在Primary Slot中

再次点击resume,则可以观察到代码运行在Primary Slot的Application Project中。

4升级并验证

由于升级方式是基于应用层面的实现,因此依赖客户的设计。如果需要展示,则建议参考下方链接Application Note中的内容,对应的示例代码包含了遵循XModem协议利用UART传输Image。

RA6 MCU Advanced Secure Bootloader Design using MCUboot and Code Flash Dualbank Mode

在调试状态下,可以通过将待更新的Image文件下载到Secondary Slot中,重启即可使得升级生效。

在Application Project上稍作修改,比如原始的Project在EK-RA6M4上使三个LED(红绿蓝)一起闪烁,而我们将代码更新为只有一个LED(蓝色)闪烁。同时,将Image Version从1.0.0更改为1.1.0,重新Build Project,确认Debug文件夹下的.bin.signed重新生成了。

现在将1.1.0版本的Image烧录到Secondary Slot中,点击Load Ancillary,选中***.bin.signed,目标地址选择0x88000。

e9f5b3dc-2871-11ef-91d2-92fbcf53809c.png

将1.1.0版本Image下载到Secondary Slot中

下载成功后查看Memory中的内容,可以确认Secondary Slot存储了1.1.0版本的Image。

ea1b0ae2-2871-11ef-91d2-92fbcf53809c.png

Secondary Slot保存了1.1.0版本的Image

按下Reset按钮ea37b1c4-2871-11ef-91d2-92fbcf53809c.png,使得Bootloader运行,启动代码升级。

可以看到EK-RA6M4从三颗LED闪烁变为仅有一颗蓝色LED闪烁,表明升级成功。

升级完成后查看Secondary Slot对应的Flash已经擦除,Primary Slot中保存了1.1.0版本的Image文件,如下所示。

ea525ede-2871-11ef-91d2-92fbcf53809c.png

Primary Slot保存了1.1.0版本的Image,Secondary Slot被擦除

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

    关注

    0

    文章

    657

    浏览量

    32851
  • bootloader
    +关注

    关注

    2

    文章

    235

    浏览量

    45605
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84621

原文标题:MCUboot系列(2-2)RA Overwrite模式在FSP中的支持

文章出处:【微信号:瑞萨MCU小百科,微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问如何一次同时烧录bootloaderapplication

    我们的bootloader和bootloadable的例程产生的bootloader程序和application程序如何合并成一个hex,一次烧录到芯片内?有什么AN或工具么?
    发表于 02-21 07:24

    OACAD和POWERPCB可以关联起来画板吗?

    如题,就像POWERLOGIC跟POWERPCB关联起来画板那样,orcad和powerpcb可以关联起来画板吗?
    发表于 01-25 20:41

    【MiCOKit试用体验】庆科WiKi之串口重新烧写系统(Bootloader,application,RF driver)

    本帖最后由 gjianw217 于 2015-10-11 20:52 编辑 【MiCOKit试用体验】庆科EMW3165基础篇(5)串口重新烧写系统(Bootloader,application,RF driver)
    发表于 10-11 16:12

    CC3200 Bootloader+OTA_Update Application Note

    CC3200 Bootloader+OTA_Update Application Note 学习笔记,附件中的文档详细的说明了CC3200的Bootloader加载及OTA升级方法
    发表于 06-21 08:28

    请问IAR配置和选择的文件是怎么关联起来的?

    使用zstack协议栈时,可以在workspace下选择是协调器/路由器/终端结点,选择不同的设备类型时,项目中选中的配置文件.cfg会不同。通过菜单栏的project--- edit configurations 可以在workspace下添加不同的选项,和选择的文件是怎么关联
    发表于 08-18 06:50

    使用Unified Bootloader Application 0.1.14和PIC16F18324寻址错误0xFE

    you can help me. For flashing the microcontroller I am using the Unified Bootloader Application
    发表于 10-26 16:16

    请问怎样才能将SharcAudioToolbox导入SigmaStudio?

    请问怎样才能将SharcAudioToolbox导入SigmaStudio?具体如何操作?
    发表于 12-03 09:29

    ApplicationBootloader中处理Deadman Timer和看门狗定时器有什么建议

    these two disabled for the bootloader, and enable them by software, when the main application
    发表于 12-20 16:21

    Bootloader PIC32MX550F256L:需要在Application中使用Bootloader的驱动代码

    , is there any possibility where i can make a common driver code for both bootloader and application. Thank you,Sunil Kumar
    发表于 01-08 14:42

    Application Hex记录和Bootloader Hex Record之间的区别?

    know there is certain Hex record format for Application firmware. And We are downloading Bootloader
    发表于 04-08 14:02

    怎样才能将独立看门狗冻结呢

    怎样才能将独立看门狗冻结呢?有什么方法吗?STM32 HAL在低功耗时也能调试设置吗?
    发表于 09-08 06:19

    bootloaderapplication不会跳转到应用程序中怎么解决?

    这里我附上了两个内存配置文件,bootloaderapplication。使用此配置,它不会跳转到应用程序中。它不断重启,请检查并告诉我此问题的解决方案。  
    发表于 05-05 13:40

    怎样才能APPLICATION flash部分中的程序在此处进行调试?

    问题: 当程序放在 APPLICATION 中时,程序可以编译但不能调试!(参见“ 2. 错误 I/II ”) 我们怎样才能APPLICATION flash 部分中的程序在此处进行调试?
    发表于 05-24 07:05

    请问怎样才能将SharcAudioToolbox导入SigmaStudio?具体如何操作?

    请问怎样才能将SharcAudioToolbox导入SigmaStudio?具体如何操作?
    发表于 11-30 07:47

    Bootloader是什么Bootloader的介绍和过程详细解

    本文档的主要内容详细介绍的是Bootloader是什么Bootloader的介绍和过程详细解主要内容包括了: 1. Bootloader简介2.几种发布的Bootloader
    发表于 12-11 17:33 48次下载
    <b class='flag-5'>Bootloader</b>是什么<b class='flag-5'>Bootloader</b>的介绍和过程详细解