MPU上的轻量级IO虚拟化启用微控制器外文翻译资料

 2021-11-26 22:28:14

英语原文共 4 页

MPU上的轻量级IO虚拟化启用微控制器

Francesco Paci 大学的博洛尼亚 意大利博洛尼亚 f.paci@unibo.it

达维德布鲁内利 大学 特伦托特伦 托, 意大利

卢卡贝尼尼 大学 博洛尼亚博洛尼亚, 意大利

瑞士联邦理工学院

瑞士苏黎世 luca.benini@unibo.it luca.benini@iis.ee.ethz.ch

摘要

在物联网(IOT)的互联网时代,数百万基于低成本和投影资源微控制器单元(MCU)去恶习和嵌入式平台将在连续操作中使用。即使无线固件更新是当今的常见功能,但许多应用程序可能不需要重新启动或支持硬件资源共享。在这样的上下文停止中, 更新和重新启动平台是不实际的,并且需要动态加载新用户代码。这又需要机制来保护MCU硬件资源以及连续执行的系统任务免受由动态加载的新用户代码引起的不受控制的扰动。在本文中,我们提出了一个框架,它提供了IO和平台外围设备的轻量级虚拟化,并允许动态加载新的用户代码。这项工作的目的是在没有MMU(存储器管理单元),IOMMU或专用指令扩展的低成本低功耗微控制器上支持典型的虚拟化就绪CPU的关键隔离功能。我们的方法只利用了内存亲tection单元(MPU),这是在所有一般可用ARM Cortex-M3和Cortex-M4微控制器。实验评估不仅证明了可行性,而且还证明了所提出的框架在内存需求和运行时方面的真正低影响高架。

关键词:虚拟化,MPU,微控制器,动态链

1 介绍

许多物联网应用程序设想大量部署 的 基于微控制器的 聪明 传感器 节点 在 难以到达的位置[1,2]。 这不仅意味着它们应该无人值守,无需直接维护,并且可能使用相同的电池多年; 而且,该软件可以更新(如果需要)仅远程; 在许多情况下,预计随着时间的推移 ,错误修复,功能改进,重新配置将是必要的。 显然,基于停止设备,更新固件和重新启动还要重新gramming嵌入式系统的传统做法,当数以百万计的低成本设备星罗棋布 ,预计将与新的功能更新很多次 ,他们的生活 变得不可行跨度。

此外,物联网设备有望在同一硬件上提供越来越多的服务。可能有 多个“应用任务”在同一硬件上运行,可能来自不同的开发人员来了,介绍保护从滥用资源,并保证足够的计算带宽,所有的任务或防止过度分配资源会的挑战导致集体 缺乏。

在这样一个情况下,知名虚拟化技术已经用过的在计算服务器,网关和其他高端的计算系统 [3] 成为基本的也在物联网的低端和超低成本可编程终端节点。首先,硬件资源的虚拟化对于安全地执行多功能软件和具有良好控制干扰的不同应用是必要的。 然后,执行新代码的能力,在运行时链接, 无需重新启动或更改整个固件就可以避免由于重新启动而导致的现场维护或定期停机,并允许在更灵活的范例中添加第三方开发的代码。

这两个 要求突出了IO虚拟化和动态链接在低成本,低功耗微控制器上的重要性。 但是, 硬件支持的虚拟化是众所周知的, 可 用于高端嵌入式系统的操作系统(例如ARM Cortex-A微处理器上的Linux), 提供机制对于动态在基于低资源微控制器的嵌入式平台(例如ARM Cortex-M MCU)中进行链接仍然是一个挑战,而且只有少数和有限解决方案有是建议。

这项工作中提出的虚拟化方法可以执行上该 FreeRTOS的 [4] 操作系统和它是基于该骨架呈现 在 [5] 哪一个 解决该能够远程下载新功能 。主要的本文的贡献是:

用于分隔内核空间的用户空间,让所有的物理外设virtualiza-重刑轻量级虚拟化层 。这样的virtualiza-重刑篡改保护,它可以扩展到管理硬件资源共享(多租户);

我们的解决方案与FreeRTOS集成,并利用操作系统提供的标准通信API。 因此,它也可以很容易地移植到其他微控制器上。

我们支持动态链接的新用户码,管理它的生活周期如好如它的有顺序地 关掉在试图违反受保护内存的情况区域;

本文的结构如下。 第2节概述了与我们的贡献相关的工作,3节深入介绍了框架体系结构并提供了该解决方案的所有技术细节,第4节详细介绍了我们的性能和内存占用,而第5节则总结了本文。

2 相关工作

基于高端CPU的嵌入式系统(如ARM Cortex-A系列)的虚拟化支持已经在学术文献中得到了广泛的探索,并且已经证明了工业成熟度[6]。 这类设备利用硬件扩展来提供硬件抽象和关键资源保护。 最近Cortex-A CPU功能本地 虚拟化支持喜欢 MMU和 IOMM地址转换,中断虚拟化,TrustZones [7,8]等.Cortex-M MCU没有 任何 这些硬件扩展。此外,可用 内存和计算资源是非常有限的 。我们的工作和调查以下处理的Cortex-M3和Cortex-M4类设备,其中,虚拟化并不是一个成熟的技术和一些妥协相对于全硬件支持的虚拟化相关的作品 必须是制作。

MCU上最常见的虚拟化方法之一是基于基于解释器的虚拟机有是 本来设想同该主要目的创建高水平使用方便语言和运行时间在比传C语言更高的抽象级别。蟒蛇 [9,10] Jav的 [11,12] 使用Javascript [13], LUA [14] 是 Virtual中使用的所有轻量级 多范式脚本语言机对于嵌入式系统。 其主要 bene- fit是跨平台支持。 他们被解释土生土长的虚拟机装上该微控制器,他们介绍高高在术语的潜伏的访问到了资源在对照至虚拟化层写的本地人码,但他们是设计对于简单软件应用程序的开发和满足日益增长的需求快速运行定制,无该需要的复杂或专用的编译工具链。这种虚拟化,通常情况下,是重点上提高可移植性,可扩展性, 便于使用在发展和保护但缺乏表现,多用户水平访问 和低级别硬件控制。 只要该裸露高水平资源能够由被利用用户。介绍 了传感器 Virtual Sense 节点,其上半自助旅游旅行OS [16]的顶部执行Java兼容称为 DAR- jeeling VM [12] 的虚拟机 。这项工作与我们的工作非常接近,重点是支持资源分配和保护MCU上的多个独立用户任务。 然而,这种解决方案,除了通过 翻译引入的开销 ,是面向共享大吉岭VM任务之间只有NET-工作组,而我们的工作是由一般到所有外设。

一个 良好的探索途径至降低该运行高架VM interpeters是及时或提前比较的 。例如,Micropython [9]开发人员在他们的平台中引入了装饰器的概念来发ARM本机 操作码并使用本机C类型,但并不支持所有本地C类型,并且此优化的实现依赖于平台。 溶液可以是与来自蟒称为C包裹函数延伸,但也有是缺点:封送处理和拆封的就计算资源而言,数据非常昂贵并且使用这种解决方案,程序员失去了低级别的抽象。 在相比之下,运用 我们的解,该开发者实施 C 功能哪一个将是执行在用户水平。通常,这些方法需要更高的内存占用来承载即时或提前编译过程,并且不能实现本机代码执行的性能。 此外,他们很难在环境中使用,其中实时约束不能容忍抖动介绍- 通过在线 duced 汇编。

本地人虚拟化是该最近的至硬件和非常适合资源和性能受限的设备。 这种技术通常依赖于MPU的使用,MPU是唯一可用于低端安全的硬件单元 系统。呈现一个完成操作系统去签对于WSN(无线传感器网络)和 优化同时的执行的线程哪一个能够是装动态的 。其工作依赖上, 一个习惯操作系统。 他们工作目标微传感器节点同 4KB 内存。 他们支持动态重新编程在变量/参数的运行时,以不同方式添加新功能从我们的工作, 一个重启是需要。此外他们没有明确地解决安全问题保护。

据我们所知,我们只找到一个与我们的解决方案类似,最近在广泛和一般意义上解决问题的工作。提出了一个依赖于TinyOS的嵌入式平台。他们使用的混合模式,它允许 有 Lua的VM,但代码的计算密集型部分可以用本机C. 为了 解决安全性,他们使用一个接收任务基于事件的系统调用,以单独的内核到用户空间的任务。我们的工作通过允许同时拥有系统调用的支持和基于事件的外围虚拟轴alization 从后者的区别 。 此外,安德森不提供有关基于事件的系统调用范例 的性能的任何信息 。

3 软件架构

在本节中,我们将 介绍运行时系统中的所有软件层,重点介绍软件保护。 图1显示了 从层三个视点堆叠,首先从硬件的角度来看,然后从地址空间的访问,在IO和Flash / RAM划分。 我们 将核心硬件与外围设备分成两不同的堆栈,以强调操作系统可以公开系统调用以访问核心硬件资源,而虚拟IO 层 则用于访问外围设备。 最后一个堆栈显示了对内存的访问是直接对于特权任务,而该访问来自用户模式的任务受到 MPU的 严格监管 。两种不同类型的任务定义:特权任务和用户模式的任务,这将在接下来的讨论 部分。

图1所示的 另一个重要层是 FreeR- TOS [18],这是一个众所周知的实时操作系统,适用于8到32位的各种嵌入式系统,包括低功率和超低功率微控制器。 我们实现基于STM32F4平台上我们的框架,即使在以下描述的一些细节都与此有关的具体的微控制器,我们的框架可以很容易地扩展为平台独立。

在3.1和3.2节中, 我们 关注第一和第三堆栈,即利用MPU和提供安全扩展, 而在部分 3.3 我们讨论该第二堆。

3.1 即时的 OS

使用 FreeRTOS的 主要原因 是它的多功能性:它是开源的,具有修改的GPL许可证,支持许多MCU,代码经常由 Real Time Engineers Ltd. 维护和升级 。此外,它是模块化的,并且有一些可用的 扩展(例如MPU)。可以添加到核心释放。 开源本质使可能至延伸它。它具有此外一个小内存占用和源包含少量文件。 调度程序支持实时操作,既可以通过可配置的系统时钟触发 ,也可以支持优先级 抢占。

3.2 FreeRTOS的 附加

为了 加强系统的安全性 ,FreeRTO的MP模块已集成,使存储器保护单元的 微控制器上提供的使用 和激活权限两个级别的任务EX- ecution。 然而,原始模块是一个实验版本,因为我们在我们的解决方案中遇到了一些限制 工作:

它不必 访问系统中的资源取之有道 。 它只提供一个系统调用。 这个系统调用加薪该特权的该呼叫者从用户模式特权,执行该呼叫和然后套该特权回来了至用户空间。这个行为具有足够在单个开发人员希望在任务之间保持分离的环境中保护 ,即单个公司开发所有固件的情况。 在这种情况下,我们希望 向第三方用户提供开发自己的代码的能力,知识这个后门的存在对于保护是非常危险的。

MPU的利用是静态的。主控板的保护部分不运行时通过与特权任务重新配置 API。

任务终止未正确处理。当usermode任务引发MPU陷阱时,异常结束系统执行。 因此,这将是极易造成拒绝服务攻击。

在下一小节中, 我们描述了我们针对这些限制提出的解决方案。该解决方案已经设计并实施。

3.2.1 MPU 延期

如已经说,这个模许可证至发放不同的访问特权上一个任务按任务基础。对于每任务MPU设置是存储在该任务描述,称为任务控制 块(TCB)在 FreeRTOS的。 什么时候 一个任务是创造