瑞萨RA产品家族初学者指南-第11章(2)

描述

 

 

《瑞萨RA产品家族初学者指南》系列文章已收录成合集,欢迎点击上方查看合集并订阅!

 

11. 安全性和TrustZone

 

本章目录

  1. 什么是TrustZone,它有什么作用?

  2. 安全环境和非安全环境的划分

  3. 器件生命周期管理

  4. TrustZone用例

 

11.2 安全环境和非安全环境的划分

 

现在我们已经清楚,程序需要划分为安全和非安全环境,我们该如何相应地对软件进行分区?为此,基于TrustZone的系统始终包含两个不同的项目:一个安全项目,另一个是非安全项目。二者都可以利用SRAM以及代码和数据闪存,但只有安全代码可以直接访问两个(安全和非安全)分区。

可借助e2 studio中的项目配置器设置这些项目。创建新项目后,系统将提示您选择项目应具有的类型:

  • 扁平化(非TrustZone)项目

  • TrustZone安全项目

  • TrustZone非安全项目

 

瑞萨

图11-4:通过项目配置器的“Type Selector”(类型选择器)页面,可以在扁平化、安全和非安全项目之间进行选择

 

请注意,如果选择扁平化(非TrustZone)项目,则微控制器将在引导后保持安全模式。另外,在设置TrustZone项目时需要格外小心,以确保正确管理安全和非安全分区之间的连接。在项目配置器中创建非安全项目时,将非安全项目与安全项目或捆绑包进行关联以实现此要求。在“Project Type Selection”(项目类型选择)屏幕上选择“TrustZone Non-secure Project”(TrustZone非安全项目)并单击“Next”(下一步)后,e2 studio将要求您为非安全项目指定一个对应的安全项目。

创建安全项目后,即可将安全的堆和驱动程序提供给非安全环境。为此,右键单击最上面的模块,从弹出的菜单中选择“Non-secure Callable”(非安全可调用)。选择该条目后,请注意左侧的小箭头:它指示此模块现在为非可安全调用模块(参见图11-5)。

 

瑞萨

图11-5:可以将安全项目中堆栈的最顶层模块设为非安全可调用模块

 

最后一点是,也可以在e2 studio内对内存进行分区:转到“Run → Renesas Device Partition Manager”(运行 → 瑞萨器件分区管理器),将运行一个实用程序。器件分区管理器可以在开发期间执行生命周期状态管理,另外还允许设置和查询IDAU区域,以及解锁已擦除的闪存模块。

 

瑞萨

图11-6:器件分区管理器可以定义各种内存分区的大小

 

如果要深入了解用于配置RA产品家族微控制器专用的Arm TrustZone的工具和相关工作流程,您可以识别下方二维码或复制对应的网址在浏览器中打开查看瑞萨网站上提供的RA Arm TrustZone工具入门,介绍有关使用工具和设置项目的基础知识:

瑞萨

https://www.renesas.cn/cn/zh/document/apn/ra-arm-trustzone-tooling-primer

 

11.2.1 跨边界的函数调用

现在,如果位于非安全环境的应用程序的一部分要调用位于安全环境的闪存外设,以对非安全数据闪存进行编程,会发生什么情况?为此,Arm v8M Cortex-M33内核的指令集中添加了一条新指令:SG或安全网关。该指令必须位于内存的安全和非安全部分之间的非安全可调用(NSC)区域。这可确保即使在安全环境的其他位置找到SG操作码,也不能将其用作入口点。在SG指令之后,可以对安全端的代码进行调用(参见图11-7)。

 

瑞萨

图11-7:从非安全环境中调用安全函数

 

将通过BXNS LR(BXNS = 跳转并交换到非安全状态)操作码从安全端返回到非安全端,此操作将跳转到BL Func_A_Entry分支期间放置在链接寄存器(LR)中的地址。在函数返回时,函数的返回状态被存储在LR中返回地址的LSB中。这一位的数值将和返回到调用函数时的状态进行比较,以防止从非安全代码调用的安全API返回到一个指向安全地址的假返回地址。

在第一条指令不是NSC区域中的SG操作码的情况下,执行位于非安全环境中的代码对安全环境中的代码的调用,则在带CM33内核的微控制器上会发生安全故障。将在安全状态下处理该故障。

还可以从安全代码调用非安全代码,但不建议这样做,因为这有可能导致数据泄露,导致安全问题。安全代码可以通过参数将某些寄存器值传输到非安全环境,并且编译器将从其余寄存器中清除其他安全数据。该机制还隐藏了安全软件的返回地址,从而确保非安全环境中的代码不会操纵返回地址(参见图11-8)。

 

瑞萨

图11-8:从安全环境中调用非安全函数

 

通过BLXNS(通过链接跳转并交换到非安全状态)指令从安全代码调用非安全代码的推荐方法是:在第一次启动时初始化安全环境中的代码,然后将程序控制传递给非安全环境。此后,从非安全环境到安全环境的任何数据传输均应通过FSP回调进行管理。

 


原文标题:瑞萨RA产品家族初学者指南-第11章(2)

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


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

全部0条评论

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

×
20
完善资料,
赚取积分