CN112685095B - 一种虚拟设备的加载方法、装置、设备及存储介质 - Google Patents

一种虚拟设备的加载方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112685095B
CN112685095B CN202011568294.XA CN202011568294A CN112685095B CN 112685095 B CN112685095 B CN 112685095B CN 202011568294 A CN202011568294 A CN 202011568294A CN 112685095 B CN112685095 B CN 112685095B
Authority
CN
China
Prior art keywords
virtual device
modularized
loading
link library
dynamic link
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
Application number
CN202011568294.XA
Other languages
English (en)
Other versions
CN112685095A (zh
Inventor
韩春超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Inspur Data Technology Co Ltd
Original Assignee
Beijing Inspur Data Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Inspur Data Technology Co Ltd filed Critical Beijing Inspur Data Technology Co Ltd
Priority to CN202011568294.XA priority Critical patent/CN112685095B/zh
Publication of CN112685095A publication Critical patent/CN112685095A/zh
Application granted granted Critical
Publication of CN112685095B publication Critical patent/CN112685095B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种虚拟设备的加载方法、装置、设备及存储介质;在本方案中,模块化虚拟设备在编译时,并不直接编译到QEMU二进制文件,而是将每个模块化虚拟设备单独编译为对应的动态链接库文件,这样在QEMU启动时,便不会加载模块化虚拟设备,在QEMU运行过程中,若接收到配置指令,再加载对应的模块化虚拟设备。通过该方式,实现了虚拟设备的动态加载,避免在QEMU启动过程加载过多不必要的虚拟设备,从而造成不必要的内存损耗。并且,这种动态加载虚拟设备的方式,使得QEMU更易维护,在开发和测试自定义虚拟设备时,降低开发人员和测试人员的难度,同时使得使用QEMU的产品在软件更新过程中更加方便。

Description

一种虚拟设备的加载方法、装置、设备及存储介质
技术领域
本发明涉及虚拟设备记载技术领域,更具体地说,涉及一种虚拟设备的加载方法、装置、设备及存储介质。
背景技术
QEMU为应用广泛且开源的虚拟化模拟器,QEMU能够模拟一台能够独立运行操作系统的虚拟机,使得操作系统在运行过程中无法感知到自己是运行在物理设备上还是虚拟设备上。
在现有的QEMU虚拟设备的实现过程中,虽然实现了QOM(QEMU Object Module,QEMU为了方便管理各种虚拟机设备提供的一套面向对象编程的模型)这种面相对象的编程模型,但是在编译和加载过程中,都是将虚拟设备直接编译到QEMU二进制文件中,虚拟设备的代码和QEMU主代码深度耦合,这样就会造成开发人员在开发过程中每次都需要修改整个二进制文件进行调试。同时,在QEMU运行过程中,每次都需要无差别的加载所有虚拟化设备,也会导致一些不必要的损耗。例如在无摄像头的服务器上,不需要安装sdl或gtk显示模块,在现有的QEMU实现中,这些显示模块及其依赖模块都会在QEMU启动过程中无差别的进行加载,增加不必要的内存损耗。
发明内容
本发明的目的在于提供及一种虚拟设备的加载方法、装置、设备及存储介质,以避免在QEMU启动过程加载过多不必要的虚拟设备,从而造成不必要的内存损耗。
为实现上述目的,本发明提供一种虚拟设备的加载方法,包括:
确定模块化虚拟设备,并对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件;
在QEMU运行过程中,若检测到配置目标虚拟设备的指令,则判断所述目标虚拟设备是否为已加载的非模块化虚拟设备;
若是,则直接运行所述目标虚拟设备;若否,则加载与所述目标虚拟设备对应的动态链接库文件,并运行。
其中,所述确定模块化虚拟设备之前,还包括:
确定QEMU的模块化特性;
若所述模块化特性为开启状态,则继续执行所述确定模块化虚拟设备的步骤;若所述模块化特性为关闭状态,则执行虚拟设备的原始加载流程。
其中,所述对每个模块化虚拟设备编译生成与每个模块化虚拟设备对应的动态链接库文件之后,还包括:
根据所述动态链接库文件的全局符号生成动态符号表,并将所述动态符号表添加至所述动态链接库文件。
其中,所述加载与所述目标虚拟设备对应的动态链接库文件,包括:
通过dlopen()函数打开与所述目标虚拟设备对应的动态链接库文件,并通过所述动态符号表自动调用构造函数,完成对所述目标虚拟设备的加载。
其中,所述确定模块化虚拟设备,包括:
确定每个虚拟设备的编译特性;其中,所述编译特性包括开启状态和模块化状态;
将属于开启状态的虚拟设备作为非模块化虚拟设备,将属于模块化状态的虚拟设备作为模块化虚拟设备。
其中,所述对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件之后,还包括:
计算每个动态链接库文件的第一哈希值,并存储至数据库。
其中,加载与所述目标虚拟设备对应的动态链接库文件之前,还包括:
计算与所述目标虚拟设备对应的动态链接库文件的第二哈希值;
判断所述数据库中存储的与所述目标虚拟设备对应的动态链接库文件的第一哈希值,是否与所述第二哈希值相同;
若相同,则继续执行所述加载与所述目标虚拟设备对应的动态链接库文件的步骤。
为实现上述目的,本发明进一步一种虚拟设备的加载装置,包括:
模块化虚拟设备确定模块,用于确定模块化虚拟设备;
编译模块,用于对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件;
判断模块,用于在QEMU运行过程中,若检测到配置目标虚拟设备的指令,则判断所述目标虚拟设备是否为已加载的非模块化虚拟设备;
加载模块,用于在所述目标虚拟设备为模块化虚拟设备时,加载与所述目标虚拟设备对应的动态链接库文件;
第一运行模块,用于在所述目标虚拟设备为已加载的非模块化虚拟设备时,直接运行所述目标虚拟设备;
第二运行模块,用于加载与所述目标虚拟设备对应的动态链接库文件后,运行所述目标虚拟设备。
为实现上述目的,本发明进一步一种电子设备,包括:
存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述虚拟设备的加载方法的步骤。
为实现上述目的,本发明进一步一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述虚拟设备的加载方法的步骤。
通过以上方案可知,本发明实施例提供的一种虚拟设备的加载方法,包括:确定模块化虚拟设备,并对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件;在QEMU运行过程中,若检测到配置目标虚拟设备的指令,则判断所述目标虚拟设备是否为已加载的非模块化虚拟设备;若是,则直接运行所述目标虚拟设备;若否,则加载与所述目标虚拟设备对应的动态链接库文件,并运行。
可见,在本方案中,模块化虚拟设备在编译时,并不直接编译到QEMU二进制文件,而是将每个模块化虚拟设备单独编译为对应的动态链接库文件,这样在QEMU启动时,便不会加载模块化虚拟设备,在QEMU运行过程中,若接收到配置指令,再加载对应的模块化虚拟设备,通过该方式,实现了虚拟设备的动态加载,避免在QEMU启动过程加载过多不必要的虚拟设备,从而造成不必要的内存损耗。并且,这种动态加载虚拟设备的方式,使得QEMU更易维护,在开发和测试自定义虚拟设备时,降低开发人员和测试人员的难度,同时使得使用QEMU的产品在软件更新过程中更加方便,本发明还公开了一种虚拟设备的加载装置、设备及存储介质,同样能实现上述技术效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例公开的一种虚拟设备的加载方法流程示意图;
图2为本发明实施例公开的QEMU支持虚拟设备模块化的编译流程图;
图3为本发明实施例公开的QEMU支持虚拟设备模块化的运行流程图;
图4为本发明实施例公开的另一种虚拟设备的加载方法流程示意图;
图5为本发明实施例公开的一种虚拟设备的加载装置结构示意图;
图6为本发明实施例公开的一种电子设备结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种虚拟设备的加载方法、装置、设备及存储介质,以避免在QEMU启动过程加载过多不必要的虚拟设备,从而造成不必要的内存损耗。
参见图1,本发明实施例提供的一种虚拟设备的加载方法流程示意图;该方法具体包括如下步骤:
S101、确定模块化虚拟设备,并对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件;
需要说明的是,本方案主要分为编译和运行两个阶段,基于现有Linux下应用程序的编译和运行思想,针对QEMU中的现有编译、运行过程进行修改,以达到动态加载的目的。其中,在编译阶段,通过修改QEMU编译方法,使其可以指定哪些虚拟设备可被编译为动态加载的模块,使其在编译链接过程中,编译为可动态连接的可执行文件,并将其所有全局表都导出到动态符号表中,以在QEMU运行过程中,根据配置参数查找并动态加载相应的模块化虚拟模块。
参见图2,为本发明实施例提供的QEMU支持虚拟设备模块化的编译流程图,编译流程包括:标记模块化虚拟设备、开启QEMU的模块化特性、编译器支持动态库、编译和安装,在此,分别对各个过程进行说明。
具体来说,在执行本方案之前,首先需要确定QEMU的模块化特性,若模块化特性为开启状态,则继续执行确定模块化虚拟设备的步骤;若模块化特性为关闭状态,则执行虚拟设备的原始加载流程。其中,本方案可设置QEMU模块化特性的两种状态分别为:开启状态enable-modules和关闭状态disable-modules,如果模块化特性为开启状态,则通过本方案对模块化虚拟设备进行动态加载,否则,按照原有的QEMU编译方式执行。
并且,本方案确定模块化虚拟设备时,需要确定每个虚拟设备的编译特性;该编译特性包括开启状态和模块化状态;将属于开启状态的虚拟设备作为非模块化虚拟设备,将属于模块化状态的虚拟设备作为模块化虚拟设备。
具体来说,目前在QEMU的编译过程中,一般以—enable-*开启QEMU的某个设备或功能,--disable-*关闭QEMU的某个设备或功能,体现在host-config.mak文件就是某特性的值等于“Y”或“N”。而要实现上述模块化的机制在现有的构建系统中,允许以布尔方式在指定特性(使用‘Y’或‘N’)的同时,在编译过程中本方案添加了第三种状态,允许构建可加载的模块(‘M’),用以区分非模块的实现内容,模块化虚拟设备编译后生成的动态链接库文件的后缀标记为“.mo”。因此在编译之前,用户可根据实际需求设定每个虚拟设备的编译特性,以标记模块化虚拟设备;若虚拟设备的编译特性为不编译状态,则不对该虚拟设备编译;若虚拟设备的编译特性为模块化状态,则将该虚拟设备作为模块化虚拟设备,在编译后直接生成单独的动态链接库文件,不执行后续的链接过程,在QEMU启动时也不会加载;需要说明的是,每个模块化虚拟设备的动态链接库文件需要存储至特定目录下,以备后续的动态加载,该过程可以为安装过程。
若虚拟设备的编译特性为编译状态,则将该虚拟设备作为非模块化虚拟设备,编译后生成QEMU文件,该QEMU文件会在QEMU启动时加载,其中,非模块化虚拟设备通过如下步骤完成初始化及实例化过程:
1、非模块化虚拟设备注册初始化:QEMU中使用QOM编程模型实现的虚拟设备,因此本方案使用type_init(void*fn)函数注册初始化,type_init(void*fn)为构造函数,在QEMU的main()函数运行前完成;
2、QEMU运行module_call_init()函数,将非模块化的虚拟设备执行type_init(void*fn)中的fn注册函数,完成虚拟设备的初始化和实例化。
S102、在QEMU运行过程中,若检测到配置目标虚拟设备的指令,则判断目标虚拟设备是否为已加载的非模块化虚拟设备;
S103、若是,则直接运行所述目标虚拟设备;若否,则加载与所述目标虚拟设备对应的动态链接库文件,并运行。
具体来说,参见图3,为本发明实施例提供的QEMU支持虚拟设备模块化的运行流程图,通过图3可以看出,非模块化虚拟设备注册初始化、非模块化虚拟设备注册并实例化后,若检测到用户配置了目标虚拟设备,首先需要确定目标虚拟设备是否在QEMU中配置,若找不到与该目标虚拟设备对应的实例及动态链接库文件,则说明QEMU中未配置该目标虚拟设备,则结束流程,此时可生成配置参数错误的提示信息。如果找到与该目标虚拟设备对应的实例,则说明该目标虚拟设备为非模块化虚拟设备,由于该目标虚拟设备已经加载完成,此时可直接获取该目标虚拟设备的实例,并运行此设备。如果找不到该目标虚拟设备的实例,但是从特定目录中找到与该目标虚拟设备对应的动态链接库文件,此时可以加载与目标虚拟设备对应的动态链接库文件,并运行。其中,模块化虚拟设备的加载过程为:
1、将与目标虚拟设备对应的动态链接库文件使用dlopen()函数进行加载。由于模块化的设备也是使用QOM编程模型实现,动态链接库文件中也包含一个type_init(*fn)函数,在使用dlopen()打开时,type_init(*fn)函数会自动执行,完成模块化虚拟设备注册初始化;
需要说明的是,若模块化特性为开启状态,则在编译过程,需要配置GCC(GNUCompiler Collection)编译器,在GCC的编译参数增加-Wl以及--export-dynamic,用以在产生动态链接库文件时,会将所有全局符号导出到动态符号表中,也即:根据动态链接库文件的全局符号生成动态符号表,并将动态符号表添加至所述动态链接库文件。
通过该方式,可在加载过程中通过dlopen()函数打开与目标虚拟设备对应的动态链接库文件时,通过动态符号表自动调用构造函数type_init(*fn),从而完成对目标虚拟设备动态加载。
2、模块化设备注册并实例化。执行type_init(*fn)中的fn函数即可完成模块化设备的注册和实例化。
通过上述两个过程对模块化虚拟设备进行注册及实例化后,即可获取与该模块化虚拟设备的实例,并运行此设备。
综上可见,在本方案中,提出了一种QEMU中虚拟设备模块化加载的实现方法,可以将QEMU中通过QOM编程模型实现的虚拟设备模块化,将不同的虚拟设备实现编译成单独的二进制文件中。QEMU在运行过程中,可根据是否配置有此设备而动态的加载相应的设备驱动和设备实现,而不影响QEMU的正常运行。通过实现虚拟设备模块化的方式,可以使QEMU的开发解耦合,更方便QEMU的维护和更新。
参见图4,本发明实施例提供的另一种虚拟设备的加载方法流程示意图;该方法具体包括如下步骤:
S201、确定模块化虚拟设备,并对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件;
S202、计算每个动态链接库文件的第一哈希值,并存储至数据库;
S203、在QEMU运行过程中,若检测到配置目标虚拟设备的指令,则判断所述目标虚拟设备是否为已加载的非模块化虚拟设备;若是,则执行S204;若否,则执行S205;
S204、直接运行目标虚拟设备;
S205、计算与目标虚拟设备对应的动态链接库文件的第二哈希值;
S206、判断数据库中存储的与目标虚拟设备对应的动态链接库文件的第一哈希值,是否与第二哈希值相同;若是,则执行S207;若否,则结束流程;
S207、加载与目标虚拟设备对应的动态链接库文件,并运行。
需要说明的是,由于在编译过程中,所有模块化虚拟设备的动态链接库文件均存储至特定目录下,为了防止在存储过程中,动态链接库文件被恶意修改,在本实施例中,在编译过程中生成动态链接库文件后,便需要计算每个动态链接库文件的第一哈希值,并存储至数据库。这样在加载动态链接库文件之前,再次计算该动态链接库文件的哈希值,作为第二哈希值,如果第一哈希值与第二哈希值相同,则代表动态链接库文件未被修改,可继续加载,否则,说明该动态链接库文件与原始生成的动态链接库文件不相同,可能被恶意修改过,此时便不继续加载,从而保证了系统的安全性。
下面对本发明实施例提供的加载装置、设备及存储介质进行介绍,下文描述的加载装置、设备及存储介质与上文描述的加载方法可以相互参照。
参见图5,本发明实施例提供的一种虚拟设备的加载装置结构示意图,该装置包括:
模块化虚拟设备确定模块100,用于确定模块化虚拟设备;
编译模块200,用于对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件;
判断模块300,用于在QEMU运行过程中,若检测到配置目标虚拟设备的指令,则判断所述目标虚拟设备是否为已加载的非模块化虚拟设备;
加载模块400,用于在所述目标虚拟设备为模块化虚拟设备时,加载与所述目标虚拟设备对应的动态链接库文件;
第一运行模块500,用于在所述目标虚拟设备为已加载的非模块化虚拟设备时,直接运行所述目标虚拟设备;
第二运行模块600,用于加载与所述目标虚拟设备对应的动态链接库文件后,运行所述目标虚拟设备。
其中,所述装置还包括:
模块化特性确定模块,用于确定QEMU的模块化特性;
所述模块化虚拟设备确定模块,用于在所述模块化特性为开启状态,确定模块化虚拟设备;
原始加载模块,用于在所述模块化特性为关闭状态,执行虚拟设备的原始加载流程。
其中,所述装置还包括:
添加模块,用于根据所述动态链接库文件的全局符号生成动态符号表,并将所述动态符号表添加至所述动态链接库文件。
其中,所述加载模块具体用于:通过dlopen()函数打开与所述目标虚拟设备对应的动态链接库文件,并通过所述动态符号表自动调用构造函数,完成对所述目标虚拟设备的加载。
其中,所述模块化虚拟设备确定模块包括:
编译特性确定单元,用于确定每个虚拟设备的编译特性;其中,所述编译特性包括开启状态和模块化状态;
设备确定单元,用于将属于开启状态的虚拟设备作为非模块化虚拟设备,将属于模块化状态的虚拟设备作为模块化虚拟设备。
其中,所述装置还包括:
第一哈希值计算模块,用于计算每个动态链接库文件的第一哈希值并存储至数据库。
其中,所述装置还包括:
第二哈希值计算模块,用于计算与所述目标虚拟设备对应的动态链接库文件的第二哈希值;
哈希值判断模块,用于判断所述数据库中存储的与所述目标虚拟设备对应的动态链接库文件的第一哈希值,是否与所述第二哈希值相同;
所述加载模块,具体用于在所述第一哈希值与所述第二哈希值相同时,加载与所述目标虚拟设备对应的动态链接库文件。
参见图6,本发明实施例提供的一种电子设备结构示意图,包括:
存储器11,用于存储计算机程序;
处理器12,用于执行所述计算机程序时实现上述方法实施例所述的虚拟设备的加载方法的步骤。
在本实施例中,设备可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机等终端设备。
该设备可以包括存储器11、处理器12和总线13。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是设备的内部存储单元,例如该设备的硬盘。存储器11在另一些实施例中也可以是设备的外部存储设备,例如设备上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括设备的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于设备的应用软件及各类数据,例如执行加载方法的程序代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行加载方法的程序代码等。
该总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,设备还可以包括网络接口14,网络接口14可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该设备与其他电子设备之间建立通信连接。
可选地,该设备还可以包括用户接口15,用户接口15可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口15还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在设备中处理的信息以及用于显示可视化的用户界面。
图6仅示出了具有组件11-15的设备,本领域技术人员可以理解的是,图6示出的结构并不构成对设备的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法实施例所述的虚拟设备的加载方法的步骤。
其中,该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (8)

1.一种虚拟设备的加载方法,其特征在于,包括:
确定模块化虚拟设备,并对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件;
在QEMU运行过程中,若检测到配置目标虚拟设备的指令,则判断所述目标虚拟设备是否为已加载的非模块化虚拟设备;
若是,则直接运行所述目标虚拟设备;若否,则加载与所述目标虚拟设备对应的动态链接库文件,并运行;
所述对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件之后,还包括:
计算每个动态链接库文件的第一哈希值,并存储至数据库;
所述加载与所述目标虚拟设备对应的动态链接库文件之前,还包括:
计算与所述目标虚拟设备对应的动态链接库文件的第二哈希值;
判断所述数据库中存储的与所述目标虚拟设备对应的动态链接库文件的第一哈希值,是否与所述第二哈希值相同;
若相同,则继续执行所述加载与所述目标虚拟设备对应的动态链接库文件的步骤。
2.根据权利要求1所述的加载方法,其特征在于,所述确定模块化虚拟设备之前,还包括:
确定QEMU的模块化特性;
若所述模块化特性为开启状态,则继续执行所述确定模块化虚拟设备的步骤;若所述模块化特性为关闭状态,则执行虚拟设备的原始加载流程。
3.根据权利要求1所述的加载方法,其特征在于,所述对每个模块化虚拟设备编译生成与每个模块化虚拟设备对应的动态链接库文件之后,还包括:
根据所述动态链接库文件的全局符号生成动态符号表,并将所述动态符号表添加至所述动态链接库文件。
4.根据权利要求3所述的加载方法,其特征在于,所述加载与所述目标虚拟设备对应的动态链接库文件,包括:
通过dlopen()函数打开与所述目标虚拟设备对应的动态链接库文件,并通过所述动态符号表自动调用构造函数,完成对所述目标虚拟设备的加载。
5.根据权利要求1所述的加载方法,其特征在于,所述确定模块化虚拟设备,包括:
确定每个虚拟设备的编译特性;其中,所述编译特性包括开启状态和模块化状态;
将属于开启状态的虚拟设备作为非模块化虚拟设备,将属于模块化状态的虚拟设备作为模块化虚拟设备。
6.一种虚拟设备的加载装置,其特征在于,包括:
模块化虚拟设备确定模块,用于确定模块化虚拟设备;
编译模块,用于对每个模块化虚拟设备编译,生成与每个模块化虚拟设备对应的动态链接库文件;
判断模块,用于在QEMU运行过程中,若检测到配置目标虚拟设备的指令,则判断所述目标虚拟设备是否为已加载的非模块化虚拟设备;
加载模块,用于在所述目标虚拟设备为模块化虚拟设备时,加载与所述目标虚拟设备对应的动态链接库文件;
第一运行模块,用于在所述目标虚拟设备为已加载的非模块化虚拟设备时,直接运行所述目标虚拟设备;
第二运行模块,用于加载与所述目标虚拟设备对应的动态链接库文件后,运行所述目标虚拟设备;
第一哈希值计算模块,用于计算每个动态链接库文件的第一哈希值并存储至数据库;
第二哈希值计算模块,用于计算与所述目标虚拟设备对应的动态链接库文件的第二哈希值;
哈希值判断模块,用于判断所述数据库中存储的与所述目标虚拟设备对应的动态链接库文件的第一哈希值,是否与所述第二哈希值相同;
所述加载模块,具体用于在所述第一哈希值与所述第二哈希值相同时,加载与所述目标虚拟设备对应的动态链接库文件。
7.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至5任一项所述的虚拟设备的加载方法的步骤。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的虚拟设备的加载方法的步骤。
CN202011568294.XA 2020-12-25 2020-12-25 一种虚拟设备的加载方法、装置、设备及存储介质 Active CN112685095B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011568294.XA CN112685095B (zh) 2020-12-25 2020-12-25 一种虚拟设备的加载方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011568294.XA CN112685095B (zh) 2020-12-25 2020-12-25 一种虚拟设备的加载方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN112685095A CN112685095A (zh) 2021-04-20
CN112685095B true CN112685095B (zh) 2024-03-22

Family

ID=75453393

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011568294.XA Active CN112685095B (zh) 2020-12-25 2020-12-25 一种虚拟设备的加载方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112685095B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018072445A1 (zh) * 2016-10-20 2018-04-26 南京南瑞继保电气有限公司 一种嵌入式虚拟装置运行方法和系统
CN111782334A (zh) * 2019-04-04 2020-10-16 北京智游网安科技有限公司 一种动态链接库文件虚拟化方法、存储介质及终端设备

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018072445A1 (zh) * 2016-10-20 2018-04-26 南京南瑞继保电气有限公司 一种嵌入式虚拟装置运行方法和系统
CN111782334A (zh) * 2019-04-04 2020-10-16 北京智游网安科技有限公司 一种动态链接库文件虚拟化方法、存储介质及终端设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Embedded Trusted Computing Environment Build Based on QEMU Virtual Machine Architecture;Lili Zhang;IEEE;20150409;全文 *
基于动态二进制翻译技术的数管软件虚拟测试环境设计;韦涌泉;张红军;董振辉;朱剑冰;;计算机测量与控制;20180425(第04期);全文 *

Also Published As

Publication number Publication date
CN112685095A (zh) 2021-04-20

Similar Documents

Publication Publication Date Title
CN107729083B (zh) 一种加载驱动程序的方法及嵌入式设备
CN102236621B (zh) 计算机接口信息配置系统及方法
CN102902556B (zh) 一种嵌入式设备的多级引导加载方法
JP4903686B2 (ja) フラッシュメモリのプログラミング
CN110990019B (zh) 一种Java类分析方法、装置、存储介质及电子设备
US8972975B1 (en) Bounded installation time optimization of applications
CN111176722B (zh) 第三方库的文件版本检测方法、装置及存储介质
CN110046094B (zh) 运行环境的切换方法和运行环境的切换装置
CN112783912B (zh) 一种数据处理方法、装置、计算机设备及存储介质
CN103853557A (zh) 一种用Uboot网络启动WinCE的方法
CN111008106A (zh) 一种服务器监控管理方法、装置及电子设备和存储介质
EP3719645A1 (en) Extension application mechanisms through intra-process operation systems
Cherubin et al. libVersioningCompiler: An easy-to-use library for dynamic generation and invocation of multiple code versions
CN107589940B (zh) 一种基于Lua脚本语言的软件开发辅助系统
CN112685095B (zh) 一种虚拟设备的加载方法、装置、设备及存储介质
CN110688198B (zh) 系统调用方法、装置和电子设备
CN112631915A (zh) 一种pcie设备软件仿真的方法、系统、设备及介质
CN113377370A (zh) 一种文件处理方法、装置、电子设备及存储介质
CN110688320B (zh) 全局变量的检测方法、装置及终端设备
CN111880804A (zh) 应用程序代码的处理方法及装置
TW202403541A (zh) 第三方行動應用程式中引入小程序的系統、方法、裝置及介質
CN109426546B (zh) 应用启动方法及装置、计算机存储介质及设备
CN113590221B (zh) 着色器变体数量的检测方法、装置、电子设备及存储介质
CN112698867A (zh) 注解信息的动态修改方法、装置、电子设备及介质
CN115237458A (zh) 一种调用推理硬件执行ai应用的方法及相关产品

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