《瑞萨RA产品家族初学者指南》系列文章已收录成合集,欢迎点击上方查看合集并订阅!
11. 安全性和TrustZone
本章目录
什么是TrustZone,它有什么作用?
安全环境和非安全环境的划分
器件生命周期管理
TrustZone用例
11.2.2 从安全代码到非安全代码的回调
外设位于安全环境,但提供中断服务的回调函数位于非安全环境,我们该如何处理这种情况?通常,在FSP回调中,回调结构由ISR在堆栈中分配,然后将由回调函数使用。由于中断服务程序(ISR)和回调函数位于不同的环境中,如果回调函数试图访问安全环境中的回调结构,将发生安全故障。
FSP通过将回调结构分配到两种环境都可以使用的内存区域解决了这个问题。通过使用callbackSet() API对其进行初始化,这是一个允许访问安全环境的保护函数(有关保护函数的介绍,请参见下文第11.2.3章)。该调用如下所示:
在模块的配置结构中已经提供了回调函数指针和上下文指针,但二者必须再次创建,因为安全端的配置结构与非安全端的结构是分开构建的。指向易失性回调内存的指针指向某个位置,可在该位置将内存分配给可从两种环境访问的结构。这样便可消除安全故障。
11.2.3 保护函数
保护函数的应用程序编程接口(API)允许从非安全项目访问位于安全环境中的驱动程序。瑞萨实现的这项功能是独一无二的,并且正在申请专利。灵活配置软件包(FSP)将自动为FSP配置器中标记为非安全可调用的所有堆栈顶部模块和/或驱动程序API生成保护函数,并将其添加到NSC区域的项目中。此外,FSP将为相应的NSC实例创建非安全模块实例。
这些实例的使用方法没有特别之处,但其p_ctrl和p_cfg成员设置为FSP_SECURE_ARGUMENT,相当于NULL,并且其p_api成员指向保护函数而不是实际的成员函数。保护函数本身将p_ctrl和p_cfg成员硬编码到安全环境内存中。在安全和非安全内存中都存在驱动程序,并在不同端使用不同通道的情况下,这可消除通过操纵p_ctrl和/或p_cfg结构以直接从非安全代码访问安全通道的可能性。保护函数还会检查所有输入指针,以确保调用方不会覆盖安全内存。
此外,如果设计人员希望仅向非安全程序员公开有限范围的API,则可以选择添加访问控制的附加级别或删除保护函数。继续以SCI为例,安全环境的程序员可以打开一个通道并配置为所需的波特率,但通过删除g_uart0_write_guard() API之外的所有API,使得只有写API可供非安全应用程序的开发人员使用。
11.3 器件生命周期管理
器件生命周期定义了器件寿命的不同阶段,并控制调试接口、串行编程接口和瑞萨测试模式的功能。出于安全原因,这样便可将位于安全环境中的代码的编写与在非安全环境中运行的应用程序的编写分开,并且可以由两个独立的团队来开发产品:由安全开发人员团队创建信任根(RoT)或孤立的子系统,并由非安全环境的设计人员创建使用该RoT或子系统的应用程序。灵活配置软件包(FSP)和e2 studio支持这种设计划分。
安全环境的代码准备就绪后,可将其预先烧录到器件中,并将生命周期设置为NSECSD,从而锁定安全环境,或者作为捆绑包由非安全项目引用。应用程序设计人员将以此作为起点,在非安全环境中编写应用程序,对其进行调试,然后将其烧录到器件中。如果需要,他们还可以禁用所使用的闪存模块的编程和擦除功能。最后一步,将生命周期的状态设置为已部署、调试锁定或引导锁定。这样一来,整个器件可获得保护,并且不能对编程接口和器件进行调试、读取或编程。图11-9显示了可能的状态和转换,而图11-10中的表格提供了对每个生命周期的解释。
图11-9:器件生命周期管理的不同状态
有三种不同的调试访问级别,它们视生命周期的状态而变化:
DBG2:允许调试器连接,访问存储器和外设没有任何限制。
DBG1:允许调试器连接,但访问只限于非安全内存区域和外设。
DBG0:不允许进行调试连接。
图11-10:器件周期管理不同阶段的描述
可以使用瑞萨闪存编程器或瑞萨器件分区管理器执行从一种状态到另一种状态的转换,但后者可选择的状态有限。可以通过使用身份验证密钥来保护状态之间的转换。有关不同DLM状态和器件特定转换的更多信息,请参见相应微控制器的用户手册。
原文标题:瑞萨RA产品家族初学者指南-第11章(3)
文章出处:【微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !