做嵌入式,2017年一定要关注ARM的这三大技术
内容:
使用最新的ARM C语言拓展(ACLE)技术
验证非可信指示
为异步非安全存储修改专门设计
建议1:使用最新的ARM C语言拓展技术
经过优化,ARMv8-M的TrustZone技术引入了全新指令,支持安全状态转换。软件开发商再也无需创建封装器来生成这些指令了,他们现在可以使用ARM C语言拓展功能(ACLE)中定义的全新编译器,让软件工具理解上述功能的安全使用,并生成所需的最佳代码。ACLE功能由多家编译器厂商实现并支持,代码非常便捷易用。
比如说,在创建可以从非安全状态调度的安全API时,应该使用一个名为“cmse_nonsecure_entry”的全新功能属性来做函数声明。安全状态调度功能使用结束时,处理器中的寄存器仍可能保留一些秘密信息。凭借正确的功能属性,编译器便可自动插入代码,清空R0-R3、R12和应用程序状态寄存器(APSR)中仍保留秘密信息的寄存器,但是寄存器将结果返还给非安全软件的情况除外。寄存器R4到R11有不同的处理方式,因为它们的内容在函数边界保持不变。如果它们的值在函数执行过程中改变,那么就必须在返还非安全调度功能之前改回原值。
建议2:验证非可信指标
有时候,非安全代码会提供错误的设计指示,试图接入安全存储。为了彻底杜绝这一可能,ARMv8-M引入了一个全新指令——测试目标(TT)指令。TT指令可以将一个地址的安全属性返还,安全软件即可由此判断该指示指向安全还是非安全地址。
为了提高指示检查效率,每个存储区都有一个安全配置定义的区域号。软件可以用区域号判断相邻的存储区是否具有类似的安全属性。
TT指令将来自地址值的安全属性和区域号(还有MPU的区域号)返还原软件。如果在存储段的起始和终止地址上使用TT指令,并确定两个地址都处于同一个区域号内时,软件便可迅速判断存储范围(如数据阵列或数据结构)是否完全位于非安全空间。
检查指示是否指向安全的区域边界
使用上述机制,凭借API调度进安全侧的安全代码即可判断,非安全软件区域发起的指示请求是否具备符合该API的安全属性。通过这种方法,我们可以阻止非安全软件在安全软件中使用API来读取或破坏安全信息。
建议3:为异步非安全存储修改专门设计
非安全中断服务程序可以修改正在被安全软件处理的非安全数据。因此,已经通过安全API验证的输入数据可以在经过验证之后被一个非安全的ISR更改。避免这种情况的一个方法就是在安全存储中为那份输入数据建立一个本地副本,并用安全副本进行处理(包括输入数据的验证)以避免非安全存储读取;无法创建该副本时(如在特定存储区域中处理大量数据),则可以选择另一种方法,即对安全属性单元进行编程,以确保该存储区域的安全。
确保整个系统的安全性并阻止安全数据泄漏至非安全侧,是安全软件开发商的责任。为实现这一目标,我们向安全软件开发商介绍TrustZone 技术3大关键理念与3个重要使用建议——保护调度函数寄存器数据的ACLE技术、验证指示的TT指令;最后一点开发商也必须牢记,非安全侧可能会通过干扰安全侧来修改数据。
拥有五大优势的Cortex-M33
Cortex-M33是首款采用TrustZone 安全技术和数字信号处理技术的ARMv8-M全功能实现处理器。该处理器可以支持大量灵活的配置选项,并在广泛应用中进行部署,此外还提供专用的协同处理器界面以支持经常需要加速和大量运算的运作。Cortex-M33是一款在性能、功耗、安全与生产力之间达到最佳平衡的处理器。
为了显著降低系统功耗,Cortex-M33处理器采用有序三阶管线技术。大部分指令在头两个阶段就能完成,而复杂的指令则需要3个阶段。此外,某些16位指令将采用双发射机制,以增强性能。处理器内核有两个AMBA 5 AHB5界面:C-AHB和S-AHB,完全对称,指令和数据提取性能不分伯仲。
在MPU、DSP、FPU、TrustZone、ETM、MTB、ITM、BPU、DWT和协同处理器界面功能中选择最佳组合方案,设计师即可迅速打造强大系统。在最低限度的控制系统中,NVIC可以被设定成只容纳一个外部中断;而在周边设备丰富的系统中,NVIC能够设定成可容纳至多480个外部中断,包含至多256个优先级。而对于那些依赖大量主动流程和线程以保持可靠运行的系统,设计师还可以增加MPU,用特权和非特权接入控制来强行隔离处理进程。如需更高级别的代码、数据和资源保护, TrustZone则是设计师的不二之选。
应用复杂度越来越高,片上调试和追踪技术的价值也日益凸显,对保障产品按期交付至关重要。Cortex-M33处理器的内置调试功能可以加速软件验证。设计师可以用JTAG端口或双插针串行调试端口来验证系统,还可以选择ETM或M
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)