STMCU小助手
发布时间:2022-8-10 08:38
|
1. 引言- Q% M; ~ w T0 m 安全启动与安全更新是嵌入式设备的基本安全要求之一:安全启动提供信任根,保证每次设备启动运行的应用程序的完整性与合法性;安全更新则在固件升级环节避免系统软件被恶意修改或替换。& E) t7 s L0 L. @" n( F. L3 _ 为了方便客户在其嵌入式设备的设计中更加容易地集成安全启动和安全更新功能,STM32 提供了安全启动与安全更新的参考实现,支持众多 STM32 MCU 系列。其中 X-CUBE-SBSFU 是针对 Cortex V6/V7M 内核的 STM32 MCU 产品的参考方案。 F) b/ W% y, R1 M ]& D) x9 H4 V1 G 在 X-CUBE-SBSFU 使用技巧的第一篇,我们对软件包及软件架构等进行了介绍,让读者对这个软件包有个初步的认识;第二篇重点介绍了如何将 SBSFU 与应用程序集成,实现安全启动和安全升级的话题;第三篇主要介绍了如何将 SBSFU 参考实现从一个STM32 MCU 平台移植到另外一个 STM32 MCU 型号的硬件平台的内容。这一篇我们将以STM32H7 为例,讨论如何基于 STM32H7 单核的 SBSFU 参考实现移植到双核 STM32H7平台上,并与 STM32H7 上的双核应用进行集成。 2. 双核安全启动方案的选择0 { v) k) M8 G! g 从单核到双核的移植需要考虑两大方面因素,一方面是在第三篇中介绍过的单纯从一个硬件平台移植到另一个的过程;另一方面是关于双核的考虑。在 STM32H755 这样的双核架构的 MCU 中有 CM7 和 CM4 两个内核,分别运行不同的应用代码,这就意味着双核的安全启动至少需要考虑这样几个问题:( O R4 S+ B& `2 \6 d5 m • 两个核的启动顺序,安全启动代码从哪个核开始运行? • 运行在两个核上的应用程序 binary 的校验问题,是作为两个 image 分别校验还是合成一个 binary 进行启动校验以及升级?8 @4 `: g8 r8 m5 r • 运行在两个核上的应用代码地址如何配置?! |5 b- D& x4 y& q 这些问题的答案未必是唯一的,根据不同的需求可以采用不同的方式。本文的例子将采用如下的方案进行展开介绍: : \1 t; |0 b! i# T6 h • 上电后启动配置只运行 CM7 內核,即安全启动由 CM7 负责,SBSFU 的代码也只运行在 CM7 內核上; $ `8 g4 G* H! O2 h" f b9 o, z+ x o 从安全角度考虑,CM7 內核的 SBSFU 需要对选项字节的配置做安全检查,例如确保 CM4 內核的启动选项被禁止等; o 为了保证启动入口的唯一性,在最终产品的安全配置中应当设置RDP2,以避免 CM7/CM4 启动配置及启动地址被随意修改; % M0 U a$ u8 ~$ W8 K, m( R • 应用程序分为 CM7 內核和 CM4 內核两个部分,两个 binary 会被合并成一个image 进行统一的签名校验以及加解密,固件更新的过程也会使用合并的binary 镜像。 x n& @0 H% ?- O( n& q) x • 安全启动过程將对应用镜像文件进行校验,校验成功后将跳转至 CM7 內核的应用代码执行,并释放 CM4 內核。 o 这里也可以选择由 CM7 內核上运行的用户应用程序控制 CM4 內核的释放。- m) V( }5 J- W) W8 w# P • 启动流程如图 1 所示 * h6 m2 Y' i$ x2 y + R+ e+ s/ u$ {1 G8 l
3 h% g h* P" P& e$ A( J 采用这种方案的好处是比较简单,对现有的 SBSFU 参考实现改动比较小,由于 CM7內核启动时 CM4 內核还没有开始运行,所有的 SBSFU 代码都仅仅运行在 CM7 內核上,而且 CM7 和 CM4 內核的应用程序代码会合并成一个二进制文件,这样对于 SBSFU 来说并不需要关心被校验的代码是属于 CM7 內核还是 CM4 內核的,所以校验流程和单核的情况相比并没有变化,而 CM4 內核应用程序的启动地址也可以相对灵活选择。这样移植的过程主要还是集中在与单核芯片类似的硬件平台移植的部分。另外参考实现的 UserApp 部 分也是 H7 单核的,我们可以先保持 UserApp 为单核不变,方便验证第一步骤移植的有效性。 完整版请查看:附件; I- q) |& o! i 4 t- p" j/ K* B7 _3 ?5 z& ~" p- M5 d |
LAT1090 SBSFU4-2coreExample_v1.0.pdf
下载1.29 MB, 下载次数: 14
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版