带内存保护的带内存保护的FreeRTOS在在TMS570上的移植上的移植
本文介绍了带内存保护功能的操作系统FreeRTOSMPU在TMS570上的移植方法,重点分析了FreeRTOSMPU的
特点,并给出了部分关键模块的移植实现;通过任务调度测试和MPU测试证实了移植的成功,从而实现了任务
与任务之间、任务与内核之间的隔离与保护,提高了系统的可靠性。
引言
本文以不带内存保护的嵌入式实时操作系统FreeRTOS为研究对象,在TMS570处理器平台上移植了带内存保护功能的操作系
统FreeRTOSMPU,不仅可以保护RTOS内核代码不被任务破坏并防止内核数据崩溃,也可以保护系统外设不被任务无意地修
改,确保检测出任务堆栈溢出[2],从而提高系统的可靠性。
1 FreeRTOSMPU简介
1.1 FreeRTOS简介
FreeRTOS操作系统是一个开源、轻型、简单、可移植、可裁减的免费实时操作系统,能够很好地移植到各种体系结构的微型
处理器[3]。FreeRTOS仅仅包含了任务调度、任务管理、时间管理、内存管理和任务间的通信和同步等基本功能[4],不提供
输入/输出管理、文件系统、网络等额外的服务,用户可根据需要自行实现。
1.2 MPU概览
MPU(Memory Protection Unit,内存保护单元)是CortexR4F内核的一个组件,可以用来捕获非法或者危险的内存访问。通过
MPU可以设置保护区域的属性和访问权限,当处理器访问内存的一个区域时,MPU比较该区域的访问权限和当时的处理器模
式。如果请求符合区域访问标准,则MPU允许内核读/写主存;否则,MPU产生一个异常信号。
MPU在执行其功能时,是以region为单位的。一个region其实就是一段连续的地址,只是它们的位置和范围都要满足一些限制
(对齐方式,最小容量等)。CortexR4的MPU共支持8个regions,还允许把每个region进一步划分成更小的子region。此外,
还允许启用一个背景region(即没有MPU时的全部地址空间),不过它只能由特权级享用。在启用MPU后,就不得再访问定
义之外的地址区间,也不得访问未经授权的region。否则,将以“访问违例”处理,触发MPU错误。MPU定义的regions可以相
互交迭。如果某块内存落在多个region中,则访问属性和权限将由编号最大的region来决定[5]。
MPU可以通过下列方法提高系统的可靠性[6]:
◆ 阻止应用程序破坏操作系统使用的代码和数据;
◆ 阻止一个任务访问其他任务的数据区,从而把任务隔开;
◆ 可以把关键数据区设置为只读,从根本上消除了被破坏的可能;
◆ 检测意外的存储访问,如堆栈溢出、数组越界等。
1.3 FreeRTOSMPU简介
FreeRTOSMPU操作系统是在FreeRTOS操作系统的基础上加入内存保护模块而来的,其特点如下[2]:
① 可以创建任务运行在特权模式下或者用户模式下,用户模式下的任务只能访问它们自己的堆栈和最多3个用户自定义的内存
区域,在任务被创建时用户自定义的内存区域被指定给任务,但是在运行时可以重新配置;
② 用户模式下的任务不能共享数据存储,但是用户模式下的任务可以使用标准队列和信号量机制来传递信息;
③ 特权模式下的任务可以自己进入用户模式,但是一旦进入用户模式,它就不能再回到特权模式;
④ 位于Flash区域的FreeRTOS API只有在进入特权模式下才能访问;
⑤ 位于RAM区域的RTOS内核维护的数据只有在进入特权模式下才能访问;
⑥ 系统外设只有在处理器进入特权模式下才能访问,标准外设可以被任何代码访问,也可通过一个用户自定义的内存区域来显
式地保护。
与没有内存保护模块的标准FreeRTOS操作系统相比,FreeRTOSMPU可以用来保护RTOS内核代码不被任务破坏并防止内核
数据崩溃,也可以保护系统外设不被任务无意地修改,确保检测出任务堆栈溢出,从而提高了软件的可靠性。当然,不足之处
是引入内存保护模块后,操作系统运行需要的RAM、ROM资源会增加,上下文切换时还需要进行MPU相关的设置,因此任务
切换时间增加。
2 TMS570硬件架构简介
TMS570LS系列是TI公司推出的基于ARM CortexR4F处理器的锁步双内核微处理器。本系统使用的TMS570LS20216最高运行
频率达到160 MHz,配置2 MB带 ECC的内置Flash和160 KB带 ECC的RAM,带有TI核心安全策略,其可提供双核锁步CPU
架构、硬件PBIST、MPU和片上时钟及电压监控等一些关键功能的安全特性来满足汽车电子、铁路和航天应用的需求[7]。