内存保护单元(MPU)是一种硬件机制,通过只允许代码访问需要的内存和外设来提高嵌入式设备的安全性。应用程序可以组织为进程(process),每个进程访问自己的内存和外设。MPU不仅阻止应用程序代码访问其指定区域以外的内存或外设,而且还可以用于检测堆栈溢出。我们基于ARM Cortex-M MCU中的MPU,讨论一下MPU所提供的一些特性。
MPU是什么?
内存保护单元(MPU)是一种硬件机制,只允许需要访问某些资源的代码访问相应的内存和外设。MPU常用于安全关键应用,如医疗设备、航空电子设备、工业控制、核电站等,提高嵌入式应用的稳定性和安全性。在IoT应用中,也可以通过MPU限制对内存和外设的访问,提高产品的安全性。例如,可以通过MPU机制隐藏加密密钥以拒绝攻击者访问;使用MPU隔离Flash控制器也可以防止攻击者更改应用程序,只允许受信任的代码执行代码更新。
通过MPU将RTOS任务划分为进程,如图1所示。每个进程可以包含任意数量的任务。进程内的任务可以访问分配给该进程的内存和外设。增加MPU时,从任务的角度几乎不用更改,除非任务之间存在交互。
使用MPU检测堆栈溢出
进程表
Cortex-M 特权等级
在用户模式访问RTOS服务
进程间通信
内存和I/O访问错误处理
void OS_MPU_FaultHandler (void)
{
// Terminate the offending task/process (1)
// Release resources owned by the task/process (2)
// Run a user provided ‘callback’ (based on the offending task) (3)
// If we have a file system: (4)
// Store information about the cause
// Do we restart the task/process? (5)
// Yes, Restart the task/process
// Alert a user (6)
// No, Reset the system (7)
使用建议
END
来源:麦克泰技术
版权归原作者所有,如有侵权,请联系删除。
▍推荐阅读
被一个gpio口搞死的一天
为什么Keil比IAR更受欢迎?
分享几个不错的嵌入式开源项目