CN117573292B - 一种Xen运行通用RTOS虚拟机的方法 - Google Patents
一种Xen运行通用RTOS虚拟机的方法 Download PDFInfo
- Publication number
- CN117573292B CN117573292B CN202410051019.2A CN202410051019A CN117573292B CN 117573292 B CN117573292 B CN 117573292B CN 202410051019 A CN202410051019 A CN 202410051019A CN 117573292 B CN117573292 B CN 117573292B
- Authority
- CN
- China
- Prior art keywords
- rtos
- gic
- virtual machine
- xen
- virtual
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 238000002955 isolation Methods 0.000 claims abstract description 5
- 230000006870 function Effects 0.000 claims description 26
- 238000013507 mapping Methods 0.000 claims description 15
- 238000012545 processing Methods 0.000 claims description 14
- 230000006399 behavior Effects 0.000 claims description 7
- 230000005856 abnormality Effects 0.000 claims description 3
- 238000010276 construction Methods 0.000 claims description 3
- 230000015556 catabolic process Effects 0.000 claims description 2
- 230000003068 static effect Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000033772 system development Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000004043 responsiveness Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种Xen运行通用RTOS虚拟机的方法,包括:S1,预设RTOS虚拟机的配置文件,配置文件中包括addr参数以及gic参数;S2,将addr参数以及gic参数通过所述配置文件传入到Xen中;S3,Xen根据所述addr参数以及配置文件中的memory参数创建RTOS虚拟机运行地址的二层内存映射,确保各RTOS虚拟机之间的隔离性;S4,Xen根据所述gic参数注册MMIO,并在RTOS内核访问gic硬件时,通过Xen进行拦截并交给虚拟gic处理,使得RTOS虚拟机能够通过虚拟gic处理RTOS内核有关的gic操作。通过上述方法,实现了RTOS虚拟机的全虚拟化运行。
Description
技术领域
本发明涉及虚拟机技术,具体为一种Xen运行通用RTOS虚拟机的方法。
背景技术
目前市场上的Embedded Hypervisor(嵌入式虚拟化)通常是Typel型的hypervisor(虚拟机监视器)。它具有轻量级、安全封装、交互性强以及系统组件之间的高宽带、低延迟通信等特点。对系统资源的影响最小,并支持实时延迟保证,能够在虚拟机之间实施调度策略,并为实时系统组件提供支持。Xen是著名的服务器虚拟化解决方案,近两年来它推出了ARM版本,可以应用于嵌入式领域。Xen是一个Type-1,并使用微内核架构的Hypervisor,它仅提供对CPU、内存及中断的虚拟化、以及域间通信功能,而将设备虚拟化工作交由特权域完成。Xen 使用 Domain 代表一个虚拟机,其中 Domain0(Dom0)是一个特殊的域,它有权访问所有主机硬件资源,驱动设备绝大多数位于Dom0。Dom0相当于BSP和驱动的代理,无论是Hypervisor还是其它域虚拟机都是可以通过借用Dom0的BSP达到硬件访问的目的。
实时操作系统(RTOS)是专为满足实时任务和应用程序的特定时间需求而设计的操作系统,与通用操作系统(如Linux和Windows)相比,RTOS具有一些显著的优势,特别适用于需要高度可预测性和响应性的嵌入式系统和实时应用程序。RTOS在实时任务和嵌入式系统中具有显著的优势,它们可以确保任务在规定的时间内完成,提供可预测的性能,并允许开发人员有效地管理系统资源。这使得RTOS成为许多领域的首选选择,包括航空航天、医疗设备、汽车控制、工业自动化和物联网应用。
想要将Xen应用在嵌入式领域,有一个重要的需求就是Xen能够支持RTOS虚拟机的运行,但是目前Xen在这方面的应用还不够灵活。以Xen传统的案例(GETTING STARTED WITHFREERTOS FOR XEN ON ARM)来说,它仅支持CORTEX_A15架构,而且需要修改FreeRtos系统本身的代码,以适配Xen的虚拟化环境。就目前主流的全虚拟化技术来说,它允许在虚拟机中运行完整的操作系统,而无需对客户操作系统进行修改。这种虚拟化方法旨在使虚拟机的行为尽可能的接近物理计算机,同时提供一种有效隔离虚拟机之间的方法,最重要的是作为虚拟化方案解决端,通常并不能拿到客户的操作系统源代码,仅仅能拿到客户提供的镜像文件,所以修改客户的操作系统,并不是一种好的解决方案,再通过增加一些简陋的RTOS系统甚至裸板系统(baremetal),这类系统通常是静态编译以后直接运行在静态编译的地址上,并没有进行代码重定向,而Xen分配虚拟机的内存地址是动态分配的,这时候就会产生RTOS的静态地址和虚拟机的动态地址不匹配的问题,最终导致虚拟机无法运行。
发明内容
为解决上述问题,本发明的目的是提供一种Xen运行通用RTOS虚拟机的方法,通过使用RTOS操作系统(也包含baremetal),使其能够在虚拟机中完整运行,而无需对客户操作系统进行修改,最终使Xen能够灵活的支持RTOS虚拟机的全虚拟化运行。
本发明提供的一种Xen运行通用RTOS虚拟机的方法,包括:
S1,预设RTOS虚拟机的配置文件,配置文件中包括addr参数以及gic参数;
S2,将addr参数以及gic参数通过所述配置文件传入到Xen中;
S3,Xen根据所述addr参数以及配置文件中的memory参数创建RTOS虚拟机运行地址的二层内存映射,确保各RTOS虚拟机之间的隔离性;
S4,Xen根据所述gic参数注册MMIO,并在RTOS内核访问gic硬件时,通过Xen进行拦截并交给虚拟gic处理,使得RTOS虚拟机能够通过虚拟gic处理RTOS内核有关的gic操作。
优选的,所述RTOS虚拟机运行在Xen中,在虚拟机中装有RTOS操作系统;
所述RTOS内核为RTOS操作系统的核心代码。
优选的,所述addr参数用于指定RTOS内核运行的物理地址;
所述物理地址是xen为RTOS虚拟机建立的中间物理地址;
所述gic参数的值用于指定RTOS内核中gic的物理地址;
所述memory参数用于指定RTOS虚拟机的运行内存大小。
优选的,步骤S3,包括:
S31,解析RTOS虚拟机的配置文件,得到addr参数的具体数值即addr地址,以及memory参数;
S32,构建RTOS虚拟机运行环境,获取构建函数中包含配置文件的addr参数以及memory参数;
S33,在Xen堆上根据memory参数分配memory大小的内存;
S34,将所述memory大小的内存映射到addr参数对应的中间物理地址上,用于RTOS虚拟机在所述中间物理地址中运行,而实际的物理地址在所述Xen堆上运行。
优选的,所述二层内存映射,包括第一层stag1和第二层stag2;
所述第一层stag1用于将虚拟地址映射到中间物理地址;
所述第二层stag2用于将中间物理地址转换为物理地址。
优选的,步骤S4,包括:
S41,通过Xen构建虚拟gic,用于通过模拟gic硬件的行为管理RTOS虚拟机内的中断;
S42,获取RTOS虚拟机配置文件中的gic参数,将gic参数中的gic地址与虚拟gic中的处理函数注册到MMIO中形成MMIO列表;
S43,RTOS内核在访问未经过第二层stage2映射的gic地址时发生数据异常;
S44,Xen拦截数据异常的操作,并在所述MMIO列表中进行遍历查询;
S45,判断数据异常的操作是否已经在MMIO列表中注册,若否,则返还错误给RTOS操作系统,执行结束;若是,则执行步骤S46;
S46,Xen调用虚拟gic的处理函数,并由所述处理函数模拟一个gic硬件后返还给RTOS内核。
优选的,一种Xen运行通用RTOS虚拟机的方法,还包括:
判断RTOS内核在运行过程中,虚拟gic处理的寄存器是否为GICD ICPENRn 寄存器和GICD ICPENDRN寄存器;
若是,则通过忽略RTOS虚拟机对所述GICD ICPENRn 寄存器和GICD ICPENDRN寄存器的操作,并向RTOS内核返回操作成功指令,用于避免系统崩溃。
本发明的有益效果:
1.通过该方法,不需要对RTOS虚拟机操作系统做任何修改,只需按照RTOS内核参数去修改配置文件,就可以直接运行RTOS虚拟机。真正做到了RTOS虚拟机的全虚拟化运行。
2.减少了RTOS系统开发的工作量,开发人员只需要关注RTOS系统本身的开发即可,而无需关注虚拟化相关的工作,使RTOS开发与虚拟化功能解耦。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为通过Xen运行RTOS虚拟机的步骤图;
图2为RTOS虚拟机在Xen中的内存布局和映射关系图;
图3为Xen内存虚拟化的二层映射图;
图4为虚拟gic的处理流程图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
由背景技术可知,由于Xen分配虚拟机的内存地址都是动态分配的,因此会产生静态的地址和虚拟机的动态地址不匹配的问题,最终导致虚拟机无法运行。
为了克服上述问题,本发明通过提供一种Xen运行通用RTOS虚拟机的方法,能够解决RTOS的静态地址和虚拟机的动态地址不匹配的问题。
本发明基于内存为2GB的ARMv8架构,虚拟化软件使用Xen 4.17.0版本。dom0为Linux5.0内核,domu的RTOS系统使用FreertosV10.0.1版本。根据RTOS镜像相关信息,为RTOS虚拟机分配内存。基于不修改RTOS操作系统的前提,将RTOS虚拟机的虚拟地址以及gic各区域地址分别作为addr参数和gic参数通过RTOS虚拟机的配置文件传入到Xen中, Xen根据RTOS虚拟机的需求,分配固定位置的内存地址,并创建RTOS虚拟机运行地址的二层映射,根据所述配置文件中的gic参数注册MMIO,实现虚拟gic功能。将RTOS镜像加载到上述分配的内存空间中,为RTOS虚拟机设置对象的上下文环境,其中,将RTOS虚拟机的PC指针指向RTOS镜像的起始位置,这样虚拟机运行以后就可以启动RTOS程序。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。
参见图1所示,本申请实施例公开了一种Xen运行通用RTOS虚拟机的方法,该方法包括:
步骤S1,预设RTOS虚拟机的配置文件,配置文件中包括addr参数以及gic参数;
步骤S2,将addr参数以及gic参数通过所述配置文件传入到Xen中。
在本实施例中,对RTOS虚拟机配置文件进行编写。首先在dem0运行的Linux系统中运行“xl create rtos.cfg”命令来创建一个RTOS虚拟机,其中rtos.cfg作为RTOS虚拟机的配置文件。具体配置内容如下:
name=“domrt”
vcpus=1
cpus=“2-3”
memory=50
kernel=“freertos_a64.bin”
iomem=[“0x2800d,1@0x2800d”]
addr=0x80100000
gic=[“0x30800000,0x300880000”]
其中,name为设置虚拟机的名称为domrt,vcpus是指虚拟机使用一个虚拟cpu,cpus指定vcpu只能运行在物理CPU的核2或者核3上,memory指定虚拟机的运行内存为50M,freertos_a64.bin是要运行的RTOS内核镜像文件。iomem指定RTOS内核使用的硬件串口地址在虚拟机下的内存地址。需要说明的是,addr参数和gic参数为本发明为RTOS虚拟机的运行而特意添加,addr参数的值用于设定RTOS内核运行的物理地址,gic参数用于设定RTOS内核中gic的物理地址。其中,RTOS虚拟机运行在Xen中,在虚拟机中装有RTOS操作系统,RTOS内核为RTOS操作系统的核心代码。
步骤S3,Xen根据所述addr参数以及配置文件中的memory参数创建RTOS虚拟机运行地址的二层内存映射,确保各RTOS虚拟机之间的隔离性。
在本实施例中,参照图2,为RTOS虚拟机在Xen中的内存布局和映射关系,需要说明的是,Xen的系统中存在两种虚拟机的类型,一种是dom0,即管理域,另一种可以称为domu(客户域)。dom0拥有Xen内所有硬件资源的权限,因此其他domu访问Xen内的硬件资源时必须向dom0发起申请。而domrt,为客户域的一种,但与传统客户域不同的是,它运行一个实时系统,也就是一个实时客户域。RTOS虚拟机用来运行RTOS实时系统。
在传统Xen的内存管理中,Xen从总的2048M的物理地址空间中为每个虚拟机分配运行内存。其中,dem0分配512MB内存,该内存按照1:1的映射关系在物理地址PA中分配0xa000000-0xc000000共512M空间供dom0使用,其余虚拟机的内存分配并不会遵循这项规则,而是从物理地址PA中动态分配一块50MB的内存供domrt使用,而这段50MB RAM的物理地址用户并不知道,对应的IPA地址一般为0x4000000,本实施例中RTOS内核的运行地址为0x80100000,而对于其他RTOS内核我们不能假定其运行地址。因此在本实施例中,需要通过在RTOS虚拟机的配置文件中添加addr参数用来指定 RTOS内核的运行地址。
Xen在创建RTOS虚拟机时,解析RTOS虚拟机的配置文件得到addr参数的具体数值,然后为这段内存建立二层内存映射。具体步骤如下:
步骤S31,解析RTOS虚拟机的配置文件,得到addr参数的具体数值即addr地址,以及memory参数;
步骤S32,构建RTOS虚拟机运行环境,获取构建函数中包含配置文件的addr参数以及memory参数;
步骤S33,在Xen堆上根据memory参数分配memory大小的内存;
步骤S34,将所述memory大小的内存映射到addr参数对应的中间物理地址上,用于RTOS虚拟机在所述中间物理地址中运行,而实际的物理地址在所述Xen堆上运行。
在本实施例中,参照图3,为Xen内存虚拟化的二层内存映射过程,ARM64在启动虚拟化以后,MMU的内存映射分配为两层。第一层称为stage1,它由操作系统创建,负责将操作系统的虚拟地址VA映射到中间物理地址IPA。第二层称为stage2,它由虚拟化层即Xen创建,负责将中间物理地址IPA转换到物理地址PA,这样即使每个虚拟机的IPA都一样,但是最终却将中间物理地IPA转换到物理地址PA,因此保证了各个虚拟机之间的隔离性。
在创建RTOS虚拟机函数create_domUs中使用construct_domU构建虚拟机的运行环境,当调用allocate_memory函数为虚拟机分配静态内存时,函数参数中已经包含了配置文件传过来的addr参数和memory参数,通过alloc_domheap_pages函数在Xen的堆上分配memory大小的内存,然后guest_physmap_add_page建立二层内存映射,将刚分配memory大小的内存映射到addr的中间物理地址IPA上。需要说明的是,create_domUs、construct_domU、allocate_memory以及alloc_domheap_pages函数属于包含关系,即由前者向后者调用。在做完二层内存映射以后,RTOS虚拟机就可以在0x80100000地址上运行,而实际的物理地址则是在Xen管理的堆上。其中,堆(Heap)是一种用于动态内存分配的区域,并由程序员显式管理的一块内存,用于存储动态分配的数据。Xen堆是指Xen在运行时进行动态内存分配和管理的区域。
步骤S4,Xen根据所述gic参数注册MMIO,并在RTOS内核访问gic硬件时,通过Xen进行拦截并交给虚拟gic处理。
在本实施例中,修改RTOS虚拟机的gic 拦截地址。在Xen虚拟化环境中,对于ARM架构的虚拟机,gic(通用中断控制器)虚拟化是一项重要技术,它负责模拟和管理虚拟机中的中断处理。gic虚拟化确保虚拟机能够正确处理中断,包括虚拟中断(来自虚拟设备)和物理中断(来自物理硬件)。
在Xen中已经为客户域虚拟gic的实现默认注册了gic的地址(gic distributor的地址为 0x3001000,redistributor地址为0x3020000)。由于Xen主要针对Linux系统,它会以这两个地址为客户域创建设备树节点,从而保证linux系统的虚拟gic地址也是0x3001000和0x3020000。但是RTOS操作系统并不会使用设备树,这样就导致了用户必须修改RTOS的代码,将RTOS操作系统访问gic硬件的地址修改为0x3001000和0x3020000以后,才能够实现RTOS虚拟机的gic硬件访问。但是,由于RTOS虚拟机本身的gic地址(0x30800000和0x30880000)并没有注册到MMIO列表中,所以在RTOS虚拟机访问gic地址时会出现错误。因此,在不修改代码的前提下,通过Xen的拦截以及注册MMIO实现虚拟gic。
步骤S41,通过Xen构建虚拟gic,用于通过模拟gic硬件的行为管理RTOS虚拟机内的中断;
在本实施例中,dom0中的Xen将gic硬件直接透传(即图2),而domrt中的RTOS内核也需要操作gic硬件。Xen Hypervisor为domrt提供了虚拟gic(即图2中的vgic),虚拟gic负责硬件gic行为,包括中断分发和处理。虚拟gic是虚拟后的gic实例,用于管理虚拟机内的中断。因为芯片上只有一个gic硬件,而且已经被dom0使用了,所以domrt只能通过虚拟gic的模拟访问gic硬件。
步骤S42,获取RTOS虚拟机配置文件中的gic参数,将gic参数中的gic地址与虚拟gic中的处理函数注册到MMIO中形成MMIO列表;
步骤S43,RTOS内核在访问未经过第二层stage2映射的gic地址时发生数据异常;具体的,如果是dom0访问的话,就不会存在数据异常,如果是domrt访问,则会存在数据异常,需要执行之后的步骤。
步骤S44,Xen拦截数据异常的操作,并在所述MMIO列表中进行遍历查询;
步骤S45,判断数据异常的操作是否已经在MMIO列表中注册,若否,则返还错误给RTOS操作系统,执行结束;若是,则执行步骤S46;
步骤S46,Xen调用虚拟gic的处理函数,并由所述处理函数模拟一个gic硬件后返还给RTOS内核。
在本实施例中,从RTOS虚拟机的配置文件中解析得到gic参数,gic参数是一个变长数组。在常规gic参数变长数组中,其中的元素从左到右依次代表GIC Distributor(分配器)、GIC Re-Distributor(再分配器)、GIC CPU Interface(CPU 接口)、GICH(GIC虚拟化控制寄存器)、GICV(虚拟接口控制寄存器)这些模块的起始地址。而在本实施例中只提供了RTOS虚拟机配置文件中需要的模块,即提供了Distributor和Re-Distributor。每个元素代表模块的空间地址大小都是64KB。
参照图4,为虚拟gic的处理流程。首先,在Xen中使用register_mmio_handler函数,将gic地址和虚拟gic处理函数注册到MMIO中。在domrt中,由于不会为domrt创建gic的stag2的映射(即图2中0x30800000开始的地址空间),因此,当domrt访问gic地址(即0x300800000)时,就会发出stag2数据异常(page fault)。这种数据异常会被xen拦截。Xen在被拦截以后会在MMIO列表中遍历查询,判断数据异常出现的地址是否已经在MMIO中注册过。如果没有注册过,则认为是一个错误,如果注册过,Xen会调用MMIO在注册时,数据异常的地址对应的处理函数。对于gic来说,就是调用虚拟gic的处理函数,由该处理函数模拟一个gic硬件然后返还给domrt中的RTOS内核,因此,RTOS虚拟机得到了这次gic访问结果。
在另一个实施例中,在实际测试中发现在目前Xen的虚拟gic处理中对于GICDICPENRn 和GICD ICPENDRN寄存器(GICD ICPENRn 寄存器用于控制特定外设或中断源的中断使能状态。通过配置这些寄存器,可以启用或禁用特定中断,以决定哪些中断应该传递到处理器核心。GICD ICPENDRn 寄存器允许软件清除特定中断的挂起状态。)的写操作回直接返回错误。因为RTOS虚拟机作为一个客户域来说并不能直接访问这两个寄存器,因为一旦操作这个实际的寄存器就会导致整个系统崩溃。但是在传统的Xen代码中并没有为该寄存器提供任何操作,这样当RTOS虚拟机访问寄存器时就会被Xen返回错误,从而引起RTOS系统崩溃。这里的修改就是忽略RTOS虚拟机对该寄存器的操作,并且返回“操作成功”的指令给RTOS虚拟机。这样通过“欺骗”RTOS系统来让他正常运行。因为Xen的本意是用来为Linux客户机提供gic虚拟化服务,而在Linux客户机中并不会出现直接访问这两种寄存器的行为。但是对于RTOS系统如Freertos 、RTThread就会出现这种寄存器的访问行为,并由此引发系统崩溃的问题。因为对于中断的使能和清楚操作不能交给客户机去处理,而应当由Xen去管理。所以在__vgic_v3_distr_common_mmio_write函数中,如果发现是这种寄存器的写操作时,可以直接忽略掉写操作,并返回成功给客户机,告诉客户机写操作已经成功完成。这样就不会影响RTOS虚拟机的正常运行。
本发明的有益效果如下:
1.通过Xen运行RTOS虚拟机的方法,不需要对RTOS的操作系统做任何修改,只需按照RTOS内核参数去修改配置文件,就可以直接运行RTOS虚拟机。真正做到了RTOS虚拟机的全虚拟化运行。
2.减少了RTOS系统开发的工作量。开发人员只需要关注RTOS操作系统本身的开发即可,而无需关注虚拟化相关的工作。使RTOS开发与虚拟化功能解耦。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (5)
1.一种Xen运行通用RTOS虚拟机的方法,其特征在于,包括下列步骤:
S1,预设RTOS虚拟机的配置文件,配置文件中包括addr参数以及gic参数;
S2,将addr参数以及gic参数通过所述配置文件传入到Xen中;
S3,Xen根据所述addr参数以及配置文件中的memory参数创建RTOS虚拟机运行地址的二层内存映射,确保各RTOS虚拟机之间的隔离性;
S4,Xen根据所述gic参数注册MMIO,并在RTOS内核访问gic硬件时,通过Xen进行拦截并交给虚拟gic处理,使得RTOS虚拟机能够通过虚拟gic处理RTOS内核有关的gic操作;
步骤S3,包括:
S31,解析RTOS虚拟机的配置文件,得到addr参数的具体数值即addr地址,以及memory参数;
S32,构建RTOS虚拟机运行环境,获取构建函数中包含配置文件的addr参数以及memory参数;
S33,在Xen堆上根据memory参数分配memory大小的内存;
S34,将所述memory大小的内存映射到addr参数对应的中间物理地址上,用于RTOS虚拟机在所述中间物理地址中运行,而实际的物理地址在所述Xen堆上运行;
所述二层内存映射,包括第一层stag1和第二层stag2;
所述第一层stag1用于将虚拟地址映射到中间物理地址;
所述第二层stag2用于将中间物理地址转换为物理地址。
2.根据权利要求1所述的一种Xen运行通用RTOS虚拟机的方法,其特征在于,所述RTOS虚拟机运行在Xen中,在虚拟机中装有RTOS操作系统;
所述RTOS内核为RTOS操作系统的核心代码。
3.根据权利要求1所述的一种Xen运行通用RTOS虚拟机的方法,其特征在于,所述addr参数用于指定RTOS内核运行的物理地址;
所述物理地址是xen为RTOS虚拟机建立的中间物理地址;
所述gic参数的值用于指定RTOS内核中gic的物理地址;
所述memory参数用于指定RTOS虚拟机的运行内存大小。
4.根据权利要求1所述的一种Xen运行通用RTOS虚拟机的方法,其特征在于,步骤S4,包括:
S41,通过Xen构建虚拟gic,用于通过模拟gic硬件的行为管理RTOS虚拟机内的中断;
S42,获取RTOS虚拟机配置文件中的gic参数,将gic参数中的gic地址与虚拟gic中的处理函数注册到MMIO中形成MMIO列表;
S43,RTOS内核在访问未经过第二层stage2映射的gic地址时发生数据异常;
S44,Xen拦截数据异常的操作,并在所述MMIO列表中进行遍历查询;
S45,判断数据异常的操作是否已经在MMIO列表中注册,若否,则返还错误给RTOS操作系统,执行结束;若是,则执行步骤S46;
S46,Xen调用虚拟gic的处理函数,并由所述处理函数模拟一个gic硬件后返还给RTOS内核。
5.根据权利要求1所述的一种Xen运行通用RTOS虚拟机的方法,其特征在于,还包括:
判断RTOS内核在运行过程中,虚拟gic处理的寄存器是否为GICD ICPENRn 寄存器和GICD ICPENDRN寄存器;
若是,则通过忽略RTOS虚拟机对所述GICD ICPENRn 寄存器和GICD ICPENDRN寄存器的操作,并向RTOS内核返回操作指令,用于避免系统崩溃。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410051019.2A CN117573292B (zh) | 2024-01-15 | 2024-01-15 | 一种Xen运行通用RTOS虚拟机的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410051019.2A CN117573292B (zh) | 2024-01-15 | 2024-01-15 | 一种Xen运行通用RTOS虚拟机的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117573292A CN117573292A (zh) | 2024-02-20 |
CN117573292B true CN117573292B (zh) | 2024-04-09 |
Family
ID=89892062
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410051019.2A Active CN117573292B (zh) | 2024-01-15 | 2024-01-15 | 一种Xen运行通用RTOS虚拟机的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117573292B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117762573B (zh) * | 2024-02-22 | 2024-05-17 | 成都菁蓉联创科技有限公司 | 一种嵌入式平台下虚拟机中设备信息处理方法及系统 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6075938A (en) * | 1997-06-10 | 2000-06-13 | The Board Of Trustees Of The Leland Stanford Junior University | Virtual machine monitors for scalable multiprocessors |
CN102135903A (zh) * | 2011-03-09 | 2011-07-27 | 上海交通大学 | 基于硬件虚拟化的Xen实时性增强系统及其方法 |
WO2015117405A1 (zh) * | 2014-08-22 | 2015-08-13 | 中兴通讯股份有限公司 | Xen虚拟化系统的全映射方法及装置 |
CN106528267A (zh) * | 2016-10-27 | 2017-03-22 | 广东铂亚信息技术有限公司 | 基于Xen特权域的网络通信监控系统及方法 |
CN106845245A (zh) * | 2016-12-21 | 2017-06-13 | 中国科学院信息工程研究所 | 一种基于Xen虚拟化平台的漏洞热修复方法 |
CN110471647A (zh) * | 2019-08-13 | 2019-11-19 | 上海航天计算机技术研究所 | 基于微内核架构的嵌入式分区操作系统及其设计方法 |
CN113176926A (zh) * | 2021-04-06 | 2021-07-27 | 中国科学院信息工程研究所 | 一种基于虚拟机自省技术的api动态监控方法及系统 |
CN114327944A (zh) * | 2021-12-24 | 2022-04-12 | 科东(广州)软件科技有限公司 | 一种多系统共享内存的方法、装置、设备及存储介质 |
CN116069444A (zh) * | 2022-12-22 | 2023-05-05 | 麒麟软件有限公司 | 虚拟机监控器的子页功能实现方法 |
-
2024
- 2024-01-15 CN CN202410051019.2A patent/CN117573292B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6075938A (en) * | 1997-06-10 | 2000-06-13 | The Board Of Trustees Of The Leland Stanford Junior University | Virtual machine monitors for scalable multiprocessors |
CN102135903A (zh) * | 2011-03-09 | 2011-07-27 | 上海交通大学 | 基于硬件虚拟化的Xen实时性增强系统及其方法 |
WO2015117405A1 (zh) * | 2014-08-22 | 2015-08-13 | 中兴通讯股份有限公司 | Xen虚拟化系统的全映射方法及装置 |
CN106528267A (zh) * | 2016-10-27 | 2017-03-22 | 广东铂亚信息技术有限公司 | 基于Xen特权域的网络通信监控系统及方法 |
CN106845245A (zh) * | 2016-12-21 | 2017-06-13 | 中国科学院信息工程研究所 | 一种基于Xen虚拟化平台的漏洞热修复方法 |
CN110471647A (zh) * | 2019-08-13 | 2019-11-19 | 上海航天计算机技术研究所 | 基于微内核架构的嵌入式分区操作系统及其设计方法 |
CN113176926A (zh) * | 2021-04-06 | 2021-07-27 | 中国科学院信息工程研究所 | 一种基于虚拟机自省技术的api动态监控方法及系统 |
CN114327944A (zh) * | 2021-12-24 | 2022-04-12 | 科东(广州)软件科技有限公司 | 一种多系统共享内存的方法、装置、设备及存储介质 |
CN116069444A (zh) * | 2022-12-22 | 2023-05-05 | 麒麟软件有限公司 | 虚拟机监控器的子页功能实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117573292A (zh) | 2024-02-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7685635B2 (en) | Systems and methods for multi-level intercept processing in a virtual machine environment | |
US8001543B2 (en) | Direct-memory access between input/output device and physical memory within virtual machine environment | |
Belay et al. | Dune: Safe user-level access to privileged {CPU} features | |
US6075938A (en) | Virtual machine monitors for scalable multiprocessors | |
JP5042848B2 (ja) | 仮想マシン・モニタの構成部分を特権化解除するためのシステム及び方法 | |
US11301562B2 (en) | Function execution based on data locality and securing integration flows | |
US8127098B1 (en) | Virtualization of real mode execution | |
US8327353B2 (en) | Hierarchical virtualization with a multi-level virtualization mechanism | |
US7434003B2 (en) | Efficient operating system operation on a hypervisor | |
US7260815B1 (en) | Method and apparatus for managing registers in a binary translator | |
US7558724B2 (en) | Operation region describing a virtual device | |
CN117573292B (zh) | 一种Xen运行通用RTOS虚拟机的方法 | |
Varanasi | Implementing Hardware-supported Virtualization in OKL4 on ARM | |
LeVasseur et al. | Pre-virtualization: Slashing the cost of virtualization | |
US20020046305A1 (en) | Method for effective binary translation between different instruction sets using emulated supervisor flag and multiple page tables | |
US7840790B1 (en) | Method and system for providing device drivers in a virtualization system | |
JP2010108271A (ja) | 仮想計算機の制御方法、仮想化プログラム及び仮想計算機システム | |
US20230124004A1 (en) | Method for handling exception or interrupt in heterogeneous instruction set architecture and apparatus | |
US11693722B2 (en) | Fast memory mapped IO support by register switch | |
Kanda et al. | SIGMA system: A multi-OS environment for embedded systems | |
US20140026132A1 (en) | Method and System for Emulation of Instructions and Hardware Using Background Guest Mode Processing | |
Tan et al. | How Low Can You Go? Practical cold-start performance limits in FaaS | |
Goeckelmann et al. | A kernel running in DSM-design aspects of a distributed operating system | |
Li et al. | VM migration and live-update for reliable embedded hypervisor | |
Ito et al. | Mesovirtualization: lightweight virtualization technique for embedded systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |