实现完全 MCU 分区隔离:MPU 管理

这是关于为基于 MCU 的系统实现高安全性的系列文章中的第二篇。在这篇文章中涉及的安全基础,划分MCU软件,父/子任务,utasks和ptasks的优势。在本文中,我们将详细介绍 MPU 管理。如第一篇文章所述,这不是教程。为此,建议参考文章末尾的参考资料。

图 1 显示了任务控制块 (TCB)内存保护阵列 (MPA)MPA 模板之间的关系


图 1:模板、MPA 和 TCB 关系。(来源:作者) 

请注意,MPA 模板可能适用于单个 MPA 和任务,也可能在任务及其 MPA 之间共享。通常,在后一种情况下,任务将在同一分区中。还有一个不需要模板的默认 MPA。当没有为任务创建 MPA 时使用它。在接下来的部分中,我们将讨论如何定义模板。

定义区域

正如本系列的第一篇文章中所讨论的,定义分区的第一步是定义分区需要的代码、数据和 IO 区域以及某些标准区域,这些区域将在下面讨论。为此,第一步是定义部分

部分

为了定义部分,没有必要重新组织包含来自其他分区的代码或数据的模块。为此,可以使用编译指示,如下(注意:所有代码和说明均针对 IAR EWARM 工具套件)

#pragma default_function_attributes = @ ".t2a_text"
无效 ttCD18_t2a(无效)
{
…
}
#pragma default_function_attributes =

同样,对于数据:

#pragma default_variable_attributes = @ ".t2a_data"
u32 irq;
TCB_PTR 父级;
u32 tskctr;
#pragma default_variable_attributes =

分散在许多模块中的同一节 pragma 定义由链接器合并为一个节。如果模块在各处的编译指示变得过于混乱,那么可以将一个分区的代码和数据分组到相同的分区模块中。然后,可以使用命令行选项,而不是编译指示。例如,在一个分区模块的项目文件中的 Options / C/C++ Compiler / Extra Options 中,如下:

--section.bss=.t2a_bss
--section.data=.t2a_data
--section.text=.t2a_text
--section.rodata=.t2a_rodata
--section.noinit=.t2a_noinit

只需重命名编译器分配的节名称。(一定要覆盖Inherited settings。)如果一个分区的几个模块被分组到一个项目文件节点中,那么上面的内容只需要放在那个节点的选项中。或者,代替上述内容,将以下内容放入额外选项中:

-f $PROJ_DIR$\..\..\..
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TC397是Infineon Technologies推出的一款微控制器产品系列。要进行MPU(Memory Protection Unit)的配置以实现对缓存的有效分区隔离,可以按照以下步骤进行: 1. 启用MPU:首先,需要在TC397的系统设置中启用MPU功能。这通常涉及到在相关的寄存器或配置文件中设置相应的位或标志,以使MPU功能生效。 2. 配置MPU区域:接下来,需要配置MPU的区域以实现对缓存的分区隔离。每个区域都有一组属性,如起始地址、大小、访问权限等。根据需求,可以配置多个区域来实现不同缓存区的隔离。 3. 配置缓存属性:为了实现对缓存的有效分区隔离,需要设置MPU区域的缓存属性。这些属性指定了在该区域内如何处理缓存,例如是否启用缓存、是否支持写操作等。根据需求,可以设置不同区域的缓存属性以实现分区隔离。 4. 设置访问权限:MPU还允许设置每个区域的访问权限,以控制对缓存的读写操作。可以设置只读、只写或读写等权限,以限制特定区域的访问权限。这样可以确保不同缓存区的数据在运行时不被非法访问或修改。 5. 编译和调试:完成MPU配置后,需要重新编译和构建应用程序,确保配置的生效。同时,还需要进行严格的测试和调试,以验证缓存分区隔离的有效性和正确性。 需要注意的是,具体的MPU配置步骤可能因TC397产品系列和所使用的开发工具而有所差异。建议参考相关的文档和技术资料,以获取详细的配置指导和实施步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值