老哥学习网 - www.lg9.cn 2024年05月22日 07:00 星期三
当前位置 首页 >公文范文 > 公文大全 >

嵌入式系统中虚拟化设备的设计与实现

发布时间:2023-06-15 19:20:10 浏览数:

陈宇,曾 颜,张先勇

(1.武汉邮电科学研究院,湖北武汉 430000;
2.烽火通信科技股份有限公司,湖北 武汉 430000)

嵌入式设备[1-3]的研发中需要大量设备,场地和成本的限制,对产品的交付时间和质量影响较大。为了减少这种因素的影响,设计一种虚拟化设备供其使用。目前,嵌入式领域的虚拟化技术[4-5]常用的有QEMU、SIMICS、DOCKER 等。QEMU 是一种开源虚拟化技术,具有跨平台、高速度、可移植等优点。因此QEMU 适合作为该文所要设计的虚拟化设备,同时利用KVM 对其性能加速。在使用QEMU 进行模拟时,代码复杂,涉及到各个模块的模拟实现,对嵌入式产品设备所用到的一些复杂功能硬件等的访问模拟也是复杂的。设计出嵌入式产品虚拟化设备[6-8]有利于推动未来嵌入式行业的提升。

1.1 嵌入式系统

嵌入式系统一般是指由硬件和软件组成的能够自己独立进行运作的设备。嵌入式系统中软件内容包括软件运行环境及其操作系统,硬件内容包括信号处理器、存储器、通信模块等有形可见的内容[9]。嵌入式系统是一种特殊的计算机系统,可以根据自己的需求灵活选择必要的软件或硬件模块。它是以应用为导向,以现代计算机技术为基础,再加上用户需求去变化。通常一个嵌入式系统本身就是一个功能齐全的个体,是几乎不需要依赖其他外部装置就可独立去运行的软硬件组合起来的系统[10]。嵌入式的灵活多样,用户的需求也是不断变化,因此就需要引入虚拟化技术到嵌入式系统中来。

1.2 虚拟化技术

虚拟化在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行,是在一定的宿主机上模拟出来能实现一定功能的技术。虚拟化技术的本质在于对计算机系统软硬件资源的划分和抽象。目前,常用的虚拟化技术主要分为硬件仿真技术、全虚拟化技术、半虚拟化技术、硬件辅助虚拟化等,该文要在嵌入式系统中采用虚拟化技术设计嵌入式虚拟化设备,采用的则是硬件仿真技术,该技术在宿主机操作系统上创建一个硬件VM 来仿真所想要的硬件,包括客户机需要的CPU 指令集和各种外设等[11-13]。该文所要使用的QEMU 虚拟化平台[14-15]是一种典型硬件仿真技术虚拟机产品,但是由于使用VM 来模拟所需要的硬件速度会非常慢,所以使用KVM 加速技术[16-17]为仿真平台性能加速。

1.3 QEMU技术与KVM技术

QEMU 是目前广为流行的开源虚拟化技术,具有跨平台、高速度、可移植等优点,QEMU 作为主机上的VMM(Virtual Machine Monitor),通过动态二进制转换来模拟CPU 处理器,并提供一系列的硬件模型。QEMU 本质上是宿主机操作系统上的一个应用程序,通过提取GUEST 操作系统的二进制代码并翻译成TCG 中间代码,再将TCG 中间代码翻译成HOST 对应架构的机器代码进行执行。QEMU 虚拟化技术,会使GUEST 自身不感知操作系统运行于QEMU 虚拟化环境还是物理环境。QEMU 开源代码处于不断演进的过程中,支持多种CPU 核的指令集模拟,以ARM v8 架构为例,目前支持cortex-A57、cortex-A53 和cortex-A72 三种ARM 核的模拟;
此外,每种架构下都支持多种较为完善的处理器模拟,以及丰富的外设模拟。对于不支持的处理器,也可基于相应的CPU 核模拟,自主构建处理器级别的硬件模拟。

KVM(Kernel-based Virtual Machine)即基于内核的虚拟机,是一种内建于Linux 中的开源虚拟化技术,可以帮助用户将Linux 切换到虚拟机监控模式(EL2),使宿主机硬件能够同时运行多个隔离的虚拟环境,即虚拟机(VM)。但是KVM 缺少设备相关的虚拟化以及相应的用户空间管理虚拟机的手段,因此完整的虚拟机系统构建需要借助QEMU 的相关功能。KVM 是同构虚拟化中非常流行的硬件加速技术,由于代码不需要经过翻译转换而是直接运行于宿主机的物理CPU 核中,因此虚拟机的CPU 性能可以接近甚至高于对应物理机的性能。不过,借助于QEMU 模拟的IO 设备性能,相比物理设备依旧会有一定程度的下降。

该文所要设计的虚拟化设备,其硬件环境需要ARM v8 架构的Linux 服务器作为宿主机,其中CPU核数不少于16,硬盘容量不低于500 GB,物理内存不低于32 GB。在软件环境方面,设备仿真平台主要分为处理器平台仿真、硬件适配和环境部署三个方面。其中需要模拟的主控设备采用的是LS1046处理器,处理器的仿真采用QEMU 虚拟化技术。QEMU 的开发与运行都是基于宿主机Linux 系统环境进行的,其中Linux 系统内核版本建议不低于3.10,该次开发使用的是开源的QEMU 源码,源码版本为3.1.0-rc4。硬件适配采用重定位共享库技术,共享库运行在操作系统中,接口库封装Linux 操作系统的交叉编译环境。环境部署主要包含虚拟仿真设备的部署与全系统的网络拓扑搭建,设备的部署采用shell 脚本实现;
而网络拓扑一部分属于处理器仿真,通过QEMU 实现;
另一部分位于HOST 环境,需基于bridge-utils 搭建虚拟网桥环境。

2.1 设备仿真平台架构

整个设备仿真平台架构如图1 所示。

图1 设备仿真平台架构

该框架主要分为HOST 硬件平台、HOST 软件系统、QEMU 硬件模拟和GUEST 软件系统四个层次。

1)HOST 硬件平台层

该层对于设备仿真平台而言主要提供CPU 和内存模拟的物理资源,其中CPU 核数、CPU 主频以及内存大小三方面硬件资源基本决定了设备仿真平台的整体性能。

2)HOST 软件系统层

宿主机的操作系统在设备仿真平台中主要拆分为两方面的功能:KVM 驱动是保障设备仿真平台性能的核心,实现CPU 和内存的硬件加速;
虚拟交换子系统则是设备仿真平台网络功能的基础,支撑设备仿真平台操作系统内部与外部物理环境网络通信以及仿真设备之间的网络通信功能。

3)QEMU 模拟硬件层

这一层负责模拟设备仿真平台中的硬件单元,主要分为模拟CPU、虚拟内存以及IO 设备三大部分,具体硬件单元的划分与物理设备一一对应。该层主要服务于GUEST 软件系统中的内核部分,使内核不感知是运行于实际物理设备还是虚拟仿真设备中,是设备仿真平台最核心的部分。

4)GUEST 软件系统层

该层是设备仿真平台的软件运行层,按功能垂直划分,最下层运行的是设备仿真平台的内核软件,负责与硬件的交互;
内核之上运行根文件系统,提供用户程序的运行环境;
最上层就是体现虚拟设备主体功能的应用层软件。

2.2 设备仿真平台QEMU模拟硬件模块架构

设备仿真平台的QEMU 模拟硬件模块架构主要分三个层面:

1)最外层为MACHINE,可对应于物理机处理器级别,包含LS1046 处理器与相关外部设备,如内存、网口设备、PCIe-PCI 桥、外部SATA 卡存储和CPLD等,此外还有ARM 架构的启动引导单元。

2)中间层为SOC,可对应于LS1046 处理器,包含四个Coretex-A72 ARM 核、中断控制器、串口控制器、PCIe 控制器、SATA 控制器以及CCSR 部分系统控制单元等。

3)最内层则为各具体硬件模块,这部分主要是实现硬件单元的地址空间读写访问、中断控制及相关功能逻辑的模拟。

上述QEMU 硬件模拟只覆盖到处理器级别,如果是针对单盘级的外围硬件,则需要在GUEST 软件系统层进行模拟,通过重定位共享库对设备中主控软件运行过程执行的硬件初始化函数以及硬件功能函数进行处理,屏蔽后续的硬件操作而直接返回适配和数据仿真结果。

设备仿真平台的QEMU 模拟硬件模块架构如图2 所示。

图2 仿真平台QEMU模拟硬件模块架构

硬件功能的仿真主要是在仿真平台GUEST 软件系统层中完成的,用来实现处理器外围硬件功能的模拟,从而使应用层获得一些仿真数据。

3.1 硬件仿真库框架

仿真库框架采用分层开放结构,仿真库整体框架如图3 所示。

图3 仿真库框架

SIMU &适配层提供双向映射,一方面提供了实际硬件驱动接口的桩函数,通过指定虚拟设备功能调用虚拟设备统一适配层接口,该接口映射到虚拟设备功能Python 脚本来访问虚拟硬件;
另一方面提供了适配层回调函数,当底层硬件有告警或消息上送时,触发回调函数通知适配层处理。通过动态链接库可以实现SIMU&适配层的功能。

仿真库SIMU 由虚拟驱动统一适配层、虚拟硬件接口层和虚拟硬件层三部分组成。

1)虚拟驱动统一适配层包括虚拟驱动接口动态库(simuDrv.so)、硬件功能映射表、回调功能映射表、定时器表、网络线程表和网络映射表,其中simuDrv.so提供C 调用Python 的统一接口,通过配置硬件功能映射表定制虚拟硬件,simuDrv.so 加载时,启动轮询线程,定时触发Python 脚本定时器,周期性检查回调功能映射表,读取虚拟硬件状态或消息触发回调,根据网络线程表启动收包线程,检查网络映射表处理收报并触发回调。

2)虚拟硬件接口层提供了硬件功能接口的通用Python 脚本,通过统一硬件接口映射到虚拟硬件,统一硬件接口simuDemo.py 提供了通用的功能,实现了对虚拟硬件文件数据的读写功能,覆盖了大部分硬件使用场景;
simuSocket.py 基于simuDemo.py 派生了网络收发报文接口;
如果需要额外的功能,可以根据需要从统一硬件接口派生特性硬件接口,Python 脚本支持生成线程,定制复杂场景,可以充分利用Python 的灵活性。

3)虚拟硬件层是由一系列仿真硬件的数据文件组成,与虚拟设备统一适配层中硬件功能映射表对应,这些数据文件按照内存格式存放数据,通过虚拟硬件接口层Python 接口访问,一般为读写操作。具有较复杂功能的硬件,可以在虚拟硬件接口层Python 中实现复杂的逻辑,模拟硬件动作。

3.2 硬件仿真库结构

仿真库文件目录下包括simuDrv.so 和基本配置config.ini、Python脚本库script、虚拟设备文件目录simu。

1)simuDrv.so 是虚拟驱动接口层动态库,提供了C 调用Python 统一接口,会给上层应用提供一些虚拟硬件读写、调试以及注册接口,simuDrv.so 会读取config.ini中Python环境参数和定时器轮询周期参数。

2)script中,虚拟硬件功能映射表用于C、Python、虚拟硬件数据文件绑定,利用虚拟功能列表和其对应的硬件地址方便上层应用操作虚拟硬件数据文件以及读取数据匹配地址和平行调用读写;
虚拟硬件回调配置文件用回调映射表处理一些需要回调的函数;
网络线程配置一般需要与回调配置联合起来使用,如收到报文后触发回调,其中有匹配硬件功能表和回调功能键值;
网络应用端口配置文件用于Python 接收、发送报文或者服务链调用时转发处理等的配置;
定时器配置表中的Python 脚本在定时器超时时触发调用;
simuParam.py 提供了上述配置获取接口,simuDrv.so 通过调用simuParam.py 中的API函数获取配置信息,从而实现相关映射;
虚拟硬件接口层通用接口,提供演示功能,其他定制功能可据此派生,simuSocket.py 通过simuDemo.py 派生了网络收发操作。

3)虚拟设备文件库simu 中存放虚拟设备数据文件,需要与script 中虚拟硬件功能映射表中的硬件功能是一致的。

3.3 硬件仿真示例

在虚拟驱动适配层增加温度芯片功能映射(read)和风扇芯片功能映射(read/write),同时在虚拟硬件层增加温度芯片和风扇芯片对应的数据文件,编辑温度芯片数据文件,应用层就可以读取到仿真设备当前的温度,计算风扇档位,对风扇升、降档。为了仿真设备温度的变化,可以在驱动适配层注册温度曲线回调,周期性改变温度数据。

通过实验得出以下结果:

1)实验在搭建的虚拟平台的服务器下启动虚拟机,在同一个虚拟环境下可以同时拉起不同的虚拟设备,并且CPU 处理器和内存的模拟都可以实现。

2)虚拟设备运行图如图4 所示,其内容描述是其中一个虚拟设备进程起来以后相关功能的初始化成功打印。目前,可以实现的功能是CPU 的映射、相关文件的读取、逻辑器件的文件下载以及可以识别虚拟设备的具体类型等;
同时还可以使用gdb 调试工具对问题进行诊断。

图4 虚拟设备运行图

3)虚拟设备中主控设备和普通业务设备都可以成功上网管。设备上网管以后就可以方便测试研发对其进行业务方面的处理,其中还可以收到设备告警上报相关内容,便于对设备的监控。

该文设计与实现了一种基于QEMU 虚拟平台的嵌入式虚拟化设备,可实现虚拟平台的运行,且虚拟设备完成一些基础功能,方便了测试和研发工作人员在设备研发过程中的调测。该设备也能使上层应用开发脱离硬件去做业务,使软硬件实现一定程度的解耦合。但是目前对于一些特殊功能芯片的硬件虚拟化,可能无法实现,只能以上层预想达到的结果作为返回,以实现具体的业务功能。

由于软件处于不断演化的过程,硬件接口函数会出现变化,重定位共享库可能无法适配新版本软件,导致硬件仿真出错。所以需要各模块协同,以完善软件架构,标准化硬件初始化和访问接口。

猜你喜欢 宿主机嵌入式虚拟化 Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机家庭影院技术(2021年7期)2021-08-14嵌入式计算机软件测试关键技术研究电脑知识与技术(2020年2期)2020-03-16基于OpenStack虚拟化网络管理平台的设计与实现电子制作(2019年10期)2019-06-17TS系列红外传感器在嵌入式控制系统中的应用电子制作(2019年7期)2019-04-25嵌入式PLC的设计与研究电子制作(2018年16期)2018-09-26对基于Docker的虚拟化技术的几点探讨电子制作(2018年14期)2018-08-21虚拟网络实验室在农村职校计算机网络技术教学中的应用研究广西教育·B版(2017年10期)2018-01-16嵌入式单片机在电机控制系统中的应用探讨电子制作(2017年8期)2017-06-05浅析虚拟化技术的安全保障电子制作(2017年7期)2017-06-05H3C CAS 云计算管理平台上虚拟化安全防护的实现电子制作(2017年24期)2017-02-02

推荐访问:嵌入式系统 虚拟 设备

相关文章:

Top