嵌入式技术是一项成熟的技术,无论是智能家电还是工业智能设备,嵌入式设备的工作寿命往往长达十余年甚至几十年,而使用虚拟化技术主要考虑兼顾不同时期运行在不同操作系统上的负载,因此嵌入式虚拟化技术的主流是虚拟机技术。嵌入式虚拟机发展的主要挑战可以总结为四个方面,即兼容性、实时性、隔离安全,以及小尺寸和低功耗。
●兼容性:虚拟机往往需要整合数个不同操作系统上的负载,其开发周期可能间隔数年甚至数十年。机器控制的应用往往基于Linux操作系统,其应用软件在2000年左右就已稳定使用,工业客户的升级意愿不高;而人机交互(Human Machine Interaction,HMI)应用往往基于Windows操作系统,其应用软件对图形、机器视觉算法和深度学习算法依赖度较高,往往跟随GPU的升级步伐每2~3年就有一次重大更新。在整合不同应用时,兼容性是必须要考虑的问题。
●实时性:在解决兼容性问题以后,实时性会成为另一个重要的难点。基于Linux的机器控制应用往往是通过在Linux的系统上打实时补丁,或者选用实时操作系统(Real Time Operation System,RTOS)来实现实时性。嵌入式虚拟机在系统设计架构中引入了一层虚拟机监控器(Hypervisor),那么如何能使RTOS保持其原来的软实时或者硬实时性能要求,则是对Hypervisor的设计挑战。
●隔离安全:在嵌入式设备中,不同应用的安全等级也会不一样,需要构建混合关键系统 。一个嵌入式虚拟机需要能够充分隔离不同虚拟机之间的负载,在紧急情况下,如果有某一虚拟机因为故障退出,其余虚拟机上的负载不会受到影响。特别是在有功能安全需求的场景下(比如机床、机器手臂、激光焊接机等),隔离安全将直接影响人身安全。
●小尺寸和低功耗:由于不少嵌入式设备受硬件限制,要求嵌入式虚拟机代码少、启动快、占用内存小。另外,如果设备是电池供电(如移动机器人、自主导航的小车等),出于节能的考虑,嵌入式虚拟机需要考虑支持低功耗设计。低功耗设计主要包括:单个虚拟机的快速唤醒和快速休眠(以及相应的数据存储、调用和传输)、多个虚拟机的负载均衡(高负载时,虚拟机可动态调用多个CPU核)和负载整合(低负载时,虚拟机可动态关闭某一个或者多个CPU核),也要进行通盘设计。
另外,嵌入式市场以Arm硬件平台为主,嵌入式虚拟机市场上大多都是闭源的商用软件,例如QNX、VxWorks、Helix、Green Hill和Mentor Hypervisor等。目前ACRN是唯一支持Intel x86平台的开源嵌入式虚拟机的技术。它还需要满足如下需求:
●在x86平台上支持实时操作系统;
●小尺寸,额外开销要小;
●通过工业IEC 61508功能安全认证;
●完全开源,友好的许可证。
本书将以ACRN为例介绍如何实现嵌入式虚拟机。