发明内容
本发明的目的是提供一种协同测试系统及方法,无需等待硬件就绪即可实现软硬件的测试,大大提高了项目风险,缩短了开发周期。
为了实现上述目的,本发明提供如下技术方案:
一种协同测试系统,包括处理器模拟模块、硬件模拟模块、操作系统及包含相应软件的软件系统;其中,所述处理器模拟模块为使用虚拟机模拟的处理器,所述硬件模拟模块为基于所述虚拟机提供的框架所编写的模拟相应硬件的程序,所述操作系统及所述软件系统均部署在所述虚拟机中;所述处理器模拟模块及所述操作系统用于提供实现协同测试的环境,所述软件系统及所述硬件模拟模块用于在实现协同测试的环境中进行交互,以实现相应软件和硬件的协同测试。
优选的,还包括物理硬件,所述物理硬件通过直通的方式传递给所述虚拟机,用于在实现协同测试的环境中与所述软件系统和/或所述硬件模拟模块进行交互,以实现相应软件和硬件的协同测试。
优选的,还包括硬件代理,所述硬件代理部署在所述虚拟机中,用于实现对相应物理硬件的管控以及实现相应物理硬件及所述软件系统之间的交互。
优选的,所述硬件模拟模块包括硬件模拟器及硬件模拟程序,所述硬件模拟器包括能够与所述软件系统进行通信的接口,所述硬件模拟程序包括实现相应硬件功能的程序。
优选的,所述硬件模拟程序包括通过软件进行封装的位真模型,所述位真模型以进程的形式运行。
优选的,所述软件系统包含应用程序及驱动程序,所述应用程序用于分别与所述物理硬件及所述硬件模拟模块进行交互,所述驱动程序用于在所述应用程序的控制下实现对相应的所述硬件模拟模块的管控。
优选的,所述应用程序包括原有应用程序及硬件应用程序,所述原有应用程序为所述系统自身包含的应用程序,用于分别与所述硬件应用程序及所述硬件代理进行交互,所述硬件应用程序为相应的所述硬件模拟模块的应用程序,用于与相应的所述硬件模拟模块的驱动程序进行交互。
优选的,所述系统为PC、工作站或者服务器。
优选的,所述虚拟机为QEMU或Gem5模拟器。
一种协同测试方法,包括:
使用虚拟机模拟处理器得到处理器模拟模块,并基于所述虚拟机提供的框架编写模拟相应硬件的程序得到硬件模拟系统;
在所述虚拟机中部署操作系统及包含相应软件的软件系统;
在所述处理器模拟模块及所述操作系统提供的实现协同测试的环境中,控制所述硬件模拟系统及所述软件系统进行交互,以实现相应软件和硬件的协同测试。
本发明提供了一种协同测试系统及方法,该系统包括处理器模拟模块、硬件模拟模块、操作系统及包含相应软件的软件系统;其中,所述处理器模拟模块为使用虚拟机模拟的处理器,所述硬件模拟模块为基于所述虚拟机提供的框架所编写的模拟相应硬件的程序,所述操作系统及所述软件系统均部署在所述虚拟机中;所述处理器模拟模块及所述操作系统用于提供实现协同测试的环境,所述软件系统及所述硬件模拟模块用于在实现协同测试的环境中进行交互,以实现相应软件和硬件的协同测试。本申请使用虚拟机模拟处理器得到处理器模拟模块,并在虚拟机中部署操作系统,以基于此提供实现软件和硬件协同测试的环境;在虚拟机中部署包含软件的软件系统,并基于虚拟机提供的框架编写模拟硬件的程序得到硬件模拟模块;从而在处理器模拟模块及操作系统提供的环境中,进行软件系统及硬件模拟模块的交互,从而实现软件和硬件的协同测试。可见,本申请通过虚拟机模拟协同测试所需环境以及需要协同测试的软硬件,从而无需等待硬件就绪即可实现软硬件的测试,大大提高了项目风险,缩短了开发周期。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种协同测试系统,可以包括处理器模拟模块、硬件模拟模块、操作系统及包含相应软件的软件系统;其中,处理器模拟模块为使用虚拟机模拟的处理器,硬件模拟模块为基于虚拟机提供的框架所编写的模拟相应硬件的程序,操作系统及软件系统均部署在虚拟机中;处理器模拟模块及操作系统用于提供实现协同测试的环境,软件系统及硬件模拟模块用于在实现协同测试的环境中进行交互,以实现相应软件和硬件的协同测试。
需要说明的是,为了实现软件及硬件的协同测试,本申请实施例可以使用虚拟机模拟真实硬件中的处理器,如X86或ARM,单核或多核,并称之为处理器模拟模块;还可以在虚拟机的存储设备中安装真实场景使用的操作系统;使用该处理器模拟模块及操作系统共同组成的环境作为模拟硬件真实运行环境的验证平台,同时也是软件的开发平台。在虚拟机上部署真实环境中使用的包含有需要开发的各项软件的软件系统,包括但不限于存储服务、网络服务、设备驱动等;基于虚拟机中提供的模拟硬件的框架编写硬件模拟模块,硬件模拟模块能够模拟需要实现测试的各项硬件,模拟的硬件具有的硬件功能包括但不限于寄存器、中断、DMA(Direct memory access,直接内存访问,其是计算机科学中的一种内存访问技术,它允许某些电脑内部的硬件子系统可以独立地直接读写系统内存,而不需中央处理器介入处理)、总线接口等,且在软件系统看来硬件模拟模块模拟的硬件与真实的硬件在接口及行为上均无差别。另外,为了实现硬件及软件的协同测试,本申请实施例还可以在虚拟机程序的后台以及硬件模拟模块中扩展共享内存的接口,从而使得虚拟机程序通过共享内存、网络等通信方式与硬件模拟模块进行命令和数据的交互,来模拟真实的硬件完成对数据的处理,并通过虚拟机程序返回给软件系统对数据处理的结果。具体来说,在实现硬件和软件的协同测试时,软件系统可以向硬件模拟模块发送处理数据的命令,硬件模拟模块响应命令实现对相应数据的处理后,将处理所得的结果返回给软件系统,从而实现软件系统和硬件模拟模块的交互,并且基于该交互的过程实现对软件和硬件的测试。
本申请使用虚拟机模拟处理器得到处理器模拟模块,并在虚拟机中部署操作系统,以基于此提供实现软件和硬件协同测试的环境;在虚拟机中部署包含软件的软件系统,并基于虚拟机提供的框架编写模拟硬件的程序得到硬件模拟模块;从而在处理器模拟模块及操作系统提供的环境中,进行软件系统及硬件模拟模块的交互,从而实现软件和硬件的协同测试。可见,本申请通过虚拟机模拟协同测试所需环境以及需要协同测试的软硬件,从而无需等待硬件就绪即可实现软硬件的测试,大大提高了项目风险,缩短了开发周期。
本发明实施例提供的一种协同测试系统,还可以包括物理硬件,物理硬件通过直通的方式传递给虚拟机,用于在实现协同测试的环境中与软件系统和/或硬件模拟模块进行交互,以实现相应软件和硬件的协同测试。
需要说明的是,本申请实施例还可以将协同测试系统中需要使用的其他真实的物理硬件,通过直通(pass through)的方式传递给虚拟机,虚拟机按照使用真实硬件的方式使用该物理硬件,包括控制该物理硬件实现与软件系统和/或硬件模拟模块的交互,从而能够进一步提高所模拟场景的真实性,进而提高软硬件协同测试的准确性。其中,直通的方式是设备虚拟化方式中的一种,是把某个物理设备直接指传递某个虚拟机使用,获得设备的虚拟机像使用一个真实物理设备一样使用此设备,设备对别的虚拟机不可见。
本发明实施例提供的一种协同测试系统,还可以包括硬件代理,硬件代理部署在虚拟机中,用于实现对相应物理硬件的管控以及实现相应物理硬件及软件系统之间的交互。
本申请实施例还可以设置硬件代理,硬件代理与上述物理硬件可以是一对一的关系,也可以是一对多的关系,进而在需要通过软件系统实现与相应的物理硬件的交互时,可以通过硬件代理提供的接口实现与相应物理硬件的交互;并且,对于物理硬件的状态或者其他工作,如物理硬件存储的数据、是否正常工作的状态以及执行操作的状态等进行相应的管控;从而通过硬件代理实现相应物理硬件的管控及其与软件系统的交互,便于实现软硬件的协同测试。
本发明实施例提供的一种协同测试系统,硬件模拟模块可以包括硬件模拟器及硬件模拟程序,硬件模拟器包括能够与软件系统进行通信的接口,硬件模拟程序包括实现相应硬件功能的程序。
为了进一步保证对真实硬件的有效模拟,简化各模块的功能以便于后期实现相应的维护等操作,本申请实施例中硬件模拟模块可以包括硬件模拟器及硬件模拟程序,硬件模拟器与硬件模拟程序可以是一对一的关系,也可以是一对多的关系,其中,硬件模拟器包含能够与软件系统进行通信的接口,而硬件模拟程序包含实现所对应的硬件的功能的程序,由此,当软件系统需要与硬件模拟模块实现交互时,则可以通过硬件模拟器包含的接口向硬件模拟程序发送相应的命令,并在硬件模拟程序响应命令进行相应的数据处理,得到处理的结果后通过硬件模拟器返回给软件系统。
本发明实施例提供的一种协同测试系统,硬件模拟程序可以包括通过软件进行封装的位真模型,位真模型以进程的形式运行。
本申请实施例可以获取硬件的位真模型(Bit-true模型),通过软件对其进行封装,并使其以进程的形式运行;此进程可以开辟进程间的通信接口,包括但不限于共享内存、网络通信等,从而使得Bit-ture模型可通过进程间通信接口接收数据和返回结果等。其中,位真模型是用于描述硬件逻辑的比特精确模型,其不包含硬件的时序信息,仅保证模型和硬件输入输出信息的二进制一致性;而进程间通信指由操作系统内提供的、把数据从一个进程发送给另一个进程的通信,包含但不限于管道、信号、共享内存等方式;其中的共享内存通信是由操作系统提供的、两个或多个进程间通过访问同一块物理内存来实现的交互数据的方式,相对于其他进程间通信方式有较高的吞吐率和效率。
本发明实施例提供的一种协同测试系统,软件系统可以包含应用程序及驱动程序,应用程序用于分别与物理硬件及硬件模拟模块进行交互,驱动程序用于在应用程序的控制下实现对相应的硬件模拟模块的管控。
本申请实施例中的软件系统可以包括应用程序及驱动程序,其中,应用程序通常指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面;而驱动程序一般指的是设备驱动程序(Device Driver),其是一种可以使计算机和设备进行相互通信的特殊程序,相当于硬件的接口,通过这个接口能够控制硬件设备的工作。由此,本申请中应用程序能够通过硬件代理与所对应的物理硬件之间进行交互,通过驱动程序与所对应的硬件模拟模块之间进行交互,从而通过协同测试实现应用程序及驱动程序的开发等操作。
本发明实施例提供的一种协同测试系统,应用程序可以包括原有应用程序及硬件应用程序,原有应用程序为系统自身包含的应用程序,用于分别与硬件应用程序及硬件代理进行交互,硬件应用程序为相应的硬件模拟模块的应用程序,用于与相应的硬件模拟模块的驱动程序进行交互。
为了实现对协同测试系统的充分利用,本申请实施例中的应用程序可以包括原有应用程序及硬件应用程序,其中,原有应用程序为协同测试系统自身包含的应用程序,其能够通过硬件代理实现与相应物理硬件的交互,而硬件应用程序则为能够使用相应硬件模拟模块的应用程序,其能够通过驱动程序实现与硬件模拟模块的交互,且原有应用程序及硬件应用程序之间能够进行通信,从而实现相应的交互过程;具体来说,该交互过程可以是物理硬件通过硬件代理发送命令至原有应用程序,原有应用程序将该命令传送给硬件应用程序,硬件应用程序通过驱动程序将命令传输给硬件模拟模块,硬件模拟模块中的硬件模拟器调用硬件模拟程序响应命令,实现相应的数据,并将处理的结果通过硬件模拟器、驱动程序、硬件应用程序、原有应用程序、硬件代理返回给相应的物理硬件;还可以是原有应用程序接收上层发送的命令,原有应用程序将该命令传送给硬件应用程序,硬件应用程序通过驱动程序将命令传输给硬件模拟模块,硬件模拟模块中的硬件模拟器调用硬件模拟程序响应命令,实现相应的数据,并将处理的结果通过硬件模拟器、驱动程序、硬件应用程序、原有应用程序返回给上层;当然根据实际需要进行的其他交互过程,也均在本发明的保护范围之内。
本发明实施例提供的一种协同测试系统,系统可以是一个计算平台,包括但不限于PC、工作站或者服务器;而虚拟机可以为QEMU或Gem5模拟器;其中,Gem5模拟器是一个开放源码的、模块化的离散事件驱动的系统级和处理器模拟器,而QEMU(Quick Emulator,快速模拟器)是一种免费的可执行硬件虚拟化的开源托管虚拟机,它通过动态的二进制转换模拟CPU行为,并且提供一组设备模型,使它能够运行多种未修改的客户机OS(operationsystem,操作系统),可以通过与KVM(kernel-based virtual machine,Linux提供的内核虚拟机。)一起使用进而接近本地速度运行虚拟机,且QEMU软件包中提供了对很多常见外设的模拟,例如网卡,硬盘,音频和显示设备等。当然根据实际需要进行的其他设定,也均在本发明的保护范围之内。
本发明实施例提供的一种协同测试系统可以如图1所示,包括物理硬件104、硬件代理(或者称为虚拟设备)110、原有应用程序109、硬件应用程序101、驱动程序102、硬件模拟器103、虚拟机108、硬件模拟程序106、位真模型107,而105表示协同测试系统。其中,105是一个计算平台,包括但不限于PC、工作站或服务器;108是运行在105上的一个虚拟机,包括但不限于QEMU、Gem5;106是运行在105上的硬件模拟程序,包含Bit-ture模型107;102是运行在108上的驱动程序,能够接收101的指令和数据,并访问103完成相应的数据处理功能;101是运行在108上的硬件应用程序,能够发送指令和数据给102;103是基于虚拟机108模拟的硬件,硬件模拟程序106不单独运行,而是集成在虚拟机程序中;104是105上原有的物理硬件,通过直通的方式交给109使用;109是105上原有的应用软件,能够通过和101交互来使用硬件模拟器103提供的功能;而交互方式包括但不限于各种进程间通信方式。相应的交互过程可以包括:
1. 109从104获得一块数据,并将其存放在108的内存中;
2. 109通过进程间通信等接口,向101发起一次数据处理的业务请求;
3. 101收到业务请求,通过102把业务请求递交给103,103接收业务请求的方式包括但不限于寄存器方位、DMA等方式;
4. 103通过读寄存器、DMA读等方式从108的内存中获取数据,并把数据和业务请求进行封装,通过进程间通信接口发送给106;
5. 106收到将封装后的业务请求及数据,转交给107进行数据处理;
6. 106把107进行数据处理的结果,通过进程间通信的方式,返回给103;
7. 103把数据处理的结果通过102及101返回给109;
8. 109把数据处理的结果交给104,结束数据处理流程。
在上述交互过程中,引入104和109是描述完整的包含多个硬件和软件的应用场景,而在真实的使用场景中,有的系统可能需要模拟多个硬件(多个S103),或者passthrough多个真实的物理硬件(多个S104),有的系统则可能不包含104和109,仅测试103的场景。而上述协同测试系统的部署过程可以包括:
使用QEMU或Gem5等开源虚拟机模拟真实硬件中的处理器,并在虚拟机的存储设备中安装真实场景使用的操作系统,使用此环境作为模拟硬件真实运行环境的验证平台,同时也是驱动程序和应用程序的开发平台;
将系统中需要使用的其他真实物理硬件通过pass through的方式传递给虚拟机,虚拟机按照使用真实硬件的方式使用设备;在虚拟机上部署真实环境中使用的软件系统,包括但不限于存储服务、网络服务、设备驱动等;并基于虚拟机中提供的模拟硬件的框架,编写硬件模拟程序来模拟待测试的硬件,模拟的硬件功能包括但不限于寄存器、中断、DMA,总线接口等,而在驱动程序和应用程序看来,模拟的硬件与真实的硬件在接口和行为上没有差别;
获取硬件的Bit-true模型,通过软件进行封装,以进程的形式运行,此进程开辟进程间通信接口,包括但不限于共享内存、网络通信等,Bit-ture模型可通过进程间通信接口接收数据和返回结果;
在虚拟机程序的后台,在硬件模拟程序中扩展共享内存的接口,通过共享内存、网络等通信方式与硬件算法的Bit-true模型进行交互,来模拟真实的硬件完成对数据的处理,并通过虚拟机程序返回给运行在虚拟机中的驱动程序和应用程序;
应用程序、驱动程序与原有系统中的软硬件进行交互,完成真实系统中各种业务的模拟。
因此,本申请能够在硬件项目早期就模拟出硬件使用的系统级环境,允许使用真实的系统级使用场景对软硬件系统进行测试和验证,提前发现硬件算法在协议兼容性、性能等方面的缺陷和漏洞,避免后期调整算法带来的风险;同时,还为硬件配套软件的开发和调试提供了一个虚拟环境,可以允许软件进行软硬件接口协议、内存管理方案、异常处理等等方案的测试和验证,能够提前发现和解决软件本身的设计缺陷,降低后期修改方案的成本;由于软件开发能够提前进入软硬件联调和测试的环节,不用等待芯片原型的就绪,能够为项目开发缩短时间。另外,本申请中Bit-true模型可以被其他类型的模型取代,进而完成对其他模型的测试,且不对硬件模拟模块的数量进行限制,可以扩展到一个包含多个模拟硬件的模拟模块。
本发明实施例还提供了一种协同测试方法,如图2所示,可以包括:
S11:使用虚拟机模拟处理器得到处理器模拟模块,并基于虚拟机提供的框架编写模拟相应硬件的程序得到硬件模拟系统;
S12:在虚拟机中部署操作系统及包含相应软件的软件系统;
S13:在处理器模拟模块及操作系统提供的实现协同测试的环境中,控制硬件模拟系统及软件系统进行交互,以实现相应软件和硬件的协同测试。
需要说明的是,本发明实施例提供的一种协同测试方法中相关部分的说明请参见本发明实施例提供的一种协同测试系统中对应部分的详细说明,在此不再赘述。另外本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。