0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Cortex-M v7 MPU以实现现代嵌入式系统

星星科技指导员 来源:嵌入式计算设计 作者:Micro Digital 2022-06-09 17:20 次阅读

Cortex-M v7 内存保护单元 (MPU) 很难使用,但它是 Cortex-M3、-M4 和 -M7 处理器可用的硬件内存保护的主要手段。这些处理器广泛用于中小型嵌入式系统。因此,学习有效地使用 Cortex-M v7 MPU 以实现现代嵌入式系统所需的可靠性、安全性和安全性非常重要。

以前的博客介绍了 MPU和术语、MPU 多任务处理和定义 MPU 区域。在第一篇博客中,定义了特权任务 ( ptasks) 和非特权任务 ( utasks)。前者以特权线程模式运行,后者以非特权线程模式运行[2]。任务的模式umode由其任务控制回(TCB)中的标志确定,并在实时操作系统(RTOS)调度程序调度时生效。umode可以在创建任务后随时设置标志pmode。

ptasks可以直接调用系统服务,但是utasks不能。有两个原因:

保护 RTOS 及其数据免受utasks. 这可能是未知谱系的软件 (SOUP),或者它可能容易受到恶意软件的攻击(例如,TCP/IP 堆栈)。

限制此软件可以使用的 RTOS 服务。不希望utasks能够执行可能损害正常系统操作的操作,例如断电或删除任务。

本博客讨论了实现上述保护的机制。应该注意的是,MPU 安全性的主要目标是将尽可能多的应用程序代码放入utasks.

utask MPA 地区

每个任务都有自己的内存保护数组 (MPA),它是从 MPA 模板初始化的。一个utask(例如ut2a)的典型 MPA 模板如下:

poYBAGKhu7iAfH8uAAGRE4WhScc353.png

该模板在创建任务后加载到任务的 MPA 中,然后在分派该任务时加载到 MPU 中。MPA[0]任务堆栈的区域是在任务首次启动时定义并放入的。因此,上面utask可以访问它自己的堆栈、它自己的代码和数据区域、公共代码和数据区域,而没有其他任何东西。区域 5、6 和 7 被禁用或特权。因此,这utask被阻止直接访问系统服务和数据。后者适用于 all utasks,尽管它们的模板可能不同。

umode 服务

utasks必须使用软件中断 (SWI) 应用程序编程接口 (API) 来访问系统服务,并且他们永远无法直接访问系统数据。此外,只有不受限制的系统服务才能被utasks. 这些障碍有助于保护操作系统 (OS) 免受不受信任的代码的影响。

SWI API 是通过 Cortex-M SVC 指令“ SVC n”实现的,其中n指定要执行的系统服务。

对于 smx RTOS 内核,头文件 ,xapi.h包含所有 smx 服务的原型函数。在开头包含此文件pcode允许它访问其中任何一个。对于ucode,xapiu.h被定义。它由 。 中允许的系统服务的映射宏组成umode。例如:

pYYBAGKhu5KAACnTAAA680Xm4HM785.png

这个宏覆盖了函数原型,xapi.h因此对于应用程序模块的其余部分,它不是直接调用系统服务,而是调用一个 shell 函数:

pYYBAGKhu5iAQ3zAAABaFHMjhxM187.png

该外壳函数用于调用n == ID系统服务的 SVC 指令。NI(Not Inline) 是一个由编译器阻止函数内联的宏。请注意,shell 函数具有相同的名称,只是它的前缀smxu_不是smx_. 贝壳位于该ucom_code区域中,因此它们可以通过utasks.

应用程序模块可以以pcode开头ucode,也可以完全是pcode或ucode。无论哪种方式,ucode都以:

poYBAGKhu56AYBiiAAAw5iEyBMY249.png

在那之后不能直接调用任何系统服务。以上所有内容都是在编译时完成的,因此变成了硬编码,因此可以抵抗恶意软件和错误,特别是如果代码位于 ROM 中。

混合pcode/ucode模块很方便,因为系统的功能部分通常会有一个根任务,它是一个ptask为该部分创建、初始化和启动所有其他任务的任务,其中大部分可能是utasks. 因此,所有相关的任务都可以放在一起。内在的想法是系统部分的某些任务可能是执行关键任务功能的精心构建的任务。这些任务可能是ptasks。系统部分的其他任务可能正在执行非关键功能,例如收集要发送到云的统计信息。这些将是utasks.

有些任务可能会随着项目的发展而开始存在ptasks并被迁移到。utasks通常更容易在其中调试代码pmode然后将其移至umode. 此外,任务可以启动ptasks并执行pcode,设置自己的umode标志,然后重新启动自己utasks并执行ucode。

另一个有趣的特性是xapiu.h可以部署多个文件并由不同的utasks. 这允许不同级别的信任。因此,与可信度较低的任务相比,可信度更高的任务可以访问更多的 RTOS 服务。这允许收紧 SOUP 或高度易受攻击的任务的绞索。但是,这仅在编译时有效。为了防止恶意软件,还需要有对应于不同xapiu.h文件的不同跳转表(参见下面的图 5)以及为每个任务选择跳转表的机制。

utask服务调用机制

如上所述,软件中断 API 的基本概念非常简单。但是当调用的系统服务可能导致任务切换时,事情就变得更加复杂了——尤其是对于 Cortex-M 架构,它要求 RTOS 调度程序驻留在PendSV_Handler. 同样复杂的是,处理程序以特权模式运行并使用系统堆栈 (SS)[3] 而不是当前的任务堆栈 TS。

如下图所示,SVC_Handler()由 SVC 指令调用并以处理程序模式运行:

poYBAGKhu6SAU26XAACFXiExuEE915.png

开始运行时,由于处理器堆叠SVC_Handler(),系统服务参数处于 TS 中。处理程序将参数 0 到 3 移动到thru中,并将第 5 个参数(如果有)移动到系统堆栈的顶部,SS(这是系统服务期望找到这些参数的地方)。然后通过跳转表调用系统服务(SSR),使用传递给它的索引(ID)(见上文)。r0r3SVC_Handler()ssrt[]n

系统服务正常执行并返回SVC_Handler(),将系统服务返回值从r0TS 移动到正确位置。处理器执行的处理程序返回操作将TS 中所有堆叠的寄存器取消堆叠,因此返回值以r0.

如果系统服务导致任务调度程序需要运行 ( sched 》 0) 或中断导致链接服务例程 (LSR) 调度程序需要运行 ( lqctr 》 0),PendSV_Handler() 则将被挂起。在这种情况下,处理器尾链 [4] 从SVC_Handler()到PendSV_Handler(由图中的虚线所示),而不是返回到utask.

在这种情况下,控制不会返回到utask尚未调用的点,而是返回到在PendSV_Handler()。 这可能会导致当前任务被挂起,而另一个任务被恢复运行(如图右侧所示)。抢占任务可以是 autask或 a ptask。最终,挂起的utask将被恢复、取消堆栈,并从调用点继续运行,前提是它没有被抢占任务停止或删除。(注意:以上所有操作都是在特权模式下完成的,因此可以防止受到感染的恶意软件的侵害ucode。)

ptask服务调用机制

相比之下,下图显示了从ptask.

pYYBAGKhu6qAGjaGAACHcwOkSMQ318.png

请注意,这更简单(更快):SVC_Handler()不涉及。ptask直接调用系统服务,如果设置sched,PendSV_Handler()则挂起。从那里开始,操作与 a 的操作相同utask。

交叉操作

无论系统服务是从utasks还是调用,系统服务的操作都是一样的ptasks。例如,autask可以测试一个信号量并在它上面挂起。Aptask可以发出信号量并且utask将恢复。或相反亦然。Aptask可能具有比 a 更高或更低的优先级utask,调度程序将根据其优先级调度它(特权在这里没有优先级!)。不同的是,ptask执行受信任的代码 ( pcode) 并且通常可以完全访问内存、外围设备和系统服务,而utask执行非特权代码 ( ucode) 并且只能访问 MPU 允许的内容。此外,MPU 只能通过 更改pcode。

以免担心ptasks不受约束的代理,请注意,即使启用了后台区域,也可以阻止通过 MPU 访问区域。因此,对一个任务进行读/写 (RW) 的区域可能对另一个任务是只读 (RO) 并且从不对两者执行 (XN)。另一方面,ptasks确实可以直接访问所有 smx 服务。随着系统安全性的加强,应考虑限制ptasks以及utasks.

审核编辑:郭婷

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

    关注

    68

    文章

    19136

    浏览量

    228958
  • 嵌入式
    +关注

    关注

    5064

    文章

    18996

    浏览量

    302608
  • API
    API
    +关注

    关注

    2

    文章

    1481

    浏览量

    61776
收藏 人收藏

    评论

    相关推荐

    嵌入式系统与物联网的结合

    随着科技的飞速发展,嵌入式系统和物联网(IoT)已经成为现代技术领域的重要组成部分。嵌入式系统是指嵌入
    的头像 发表于 11-06 10:23 188次阅读

    什么是嵌入式?一文读懂嵌入式主板

    现代科技浪潮中,嵌入式技术已成为支撑各种智能设备和系统运行的核心力量。那么,究竟什么是嵌入式嵌入式
    的头像 发表于 10-16 10:14 454次阅读

    嵌入式系统的硬件架构

    嵌入式系统是一种专用的计算机系统,它以应用为中心,现代计算机技术为基础,能够根据用户的具体需求(如功能、可靠性、成本、体积、功耗、环境等)
    的头像 发表于 09-29 16:29 310次阅读

    嵌入式系统的未来趋势有哪些?

    智能家居领域,嵌入式系统可以集成语音识别和自然语言处理技术,去实现智能家电的语音控制。 2. 更强大的处理能力 在未来的嵌入式系统将具备更加
    发表于 09-12 15:42

    七大嵌入式GUI盘点

    采用纯C语言开发。它的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,实现最大的兼容性(与C++兼容),模拟器可在没有嵌入式硬件的PC上启动
    发表于 09-02 10:58

    专家力荐|《嵌入式系统原理与开发——基于RISC-V和Linux系统》新书发售

    当前,嵌入式系统已成为智能设备的核心之一,RISC-V+Linux的开源力量为嵌入式系统注入强大的创新动力。作为中国RISC-
    的头像 发表于 07-24 08:20 506次阅读
    专家力荐|《<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>原理与开发——基于RISC-<b class='flag-5'>V</b>和Linux<b class='flag-5'>系统</b>》新书发售

    飞凌嵌入式Forlinx pinMux,更好用的MPU引脚复用配置工具

    飞凌嵌入式打造了一款专门针对ARM嵌入式MPU引脚复用的软件工具——Forlinx pinMux
    的头像 发表于 07-05 10:28 1687次阅读
    飞凌<b class='flag-5'>嵌入式</b>Forlinx pinMux,更好用的<b class='flag-5'>MPU</b>引脚复用配置工具

    嵌入式系统怎么学?

    嵌入式系统之间或与外部设备的数据通信。 7、传感器和执行器:了解各种传感器(如温度传感器、加速度传感器等)和执行器(如电机、舵机等)的工作原理和接口方式,
    发表于 07-02 10:10

    嵌入式系统软硬件基础知识大全

    嵌入式系统现代科技发展的一个重要分支,广泛应用于工业控制、消费电子、医疗设备、汽车电子等领域。本文试图全面解析嵌入式系统的软基础知识,以期
    发表于 05-09 14:12

    简谈Xilinx Zynq-7000嵌入式系统设计与实现

    描述,所以就形成了C语言描述嵌入式系统结构的功能,而用HDL语言描述硬件的具体实现的设计方法,这也是基于全可编程SoC和传统上基于SoC器件实现
    发表于 05-08 16:23

    嵌入式微处理器有哪些类型 嵌入式微处理器有哪些产品

    在不同的领域和应用中发挥作用,如消费电子产品、智能家居、工业自动化、汽车电子、医疗器械等。 以下是一些常见的嵌入式微处理器类型和产品: ARM Cortex-M系列: ARM Cortex-M系列是一种低成本、低功耗的
    的头像 发表于 04-21 14:48 1843次阅读

    简谈Xilinx Zynq-7000嵌入式系统设计与实现

    今天给大侠带来简谈Xilinx Zynq-7000嵌入式系统设计与实现,话不多说,上货。 Xilinx的ZYNQ系列FPGA是二种看上去对立面的思想的融合,ARM处理器的串行执行+FPGA
    发表于 04-10 16:00

    嵌入式系统发展前景?

    的发展前景也十分广阔。 随着物联网和智能设备的快速发展,嵌入式系统将更为普遍地应用于各种设备和设施,包括家用电器、医疗设备、交通工具等。这些设备将通过嵌入式系统
    发表于 02-22 14:09

    请问mbed物联网操作系统会成为cortex-m中的android吗?

    mbed 物联网操作系统会成为cortex-m中的android吗?
    发表于 01-17 07:14

    什么是嵌入式系统嵌入式系统的具体应用

    嵌入式,一般是指嵌入式系统。用于控制、监视或者辅助操作机器和设备的装置。
    的头像 发表于 12-20 13:33 2367次阅读