×
测量测试 > 测试测量应用 > 详情

Proemulator的插桩构架研究

发布时间:2020-12-10 发布时间:
|
0引 言

由于目标机与宿主机处理器体系结构不同,嵌入式软件无法在宿主机上直接运行与测试,因此嵌入式软件的开发过程常常比硬件开发过程还要漫长,导致整个系统开发周期长,软件功能调试和性能测试不能及时完成,软件质量无法保证。嵌入式模拟器能良好地解决这一问题。

将模拟器应用到嵌入式软件的开发与测试中,其优点有如下几个方面:

(1)采用模拟器进行嵌入式开发与测试能让软件和硬件开发同步进行,缩短开发周期;

(2)能提供比真正硬件环境下更丰富的测试环境,拓宽测试范围;能进行长时间的测试,甚至能在真实硬件不能承受的“危险”条件下测试。

(3)能提供调试,测试,变量查看,性能分析,实验数据存储等多种额外功能,便于开发与测试人员进行分析。

1国内外模拟器相关研究

国内外已有若干较成熟的嵌入式系统模拟器,如ARM公司的ARMmulator,同济大学开发的Proemulatot中针对ARM芯片的指令模拟器,清华大学Sky Eye项目中的指令模拟器,Linux上的开源软件GDB ARMulator。

Proemulator是一个源码开放的通用模拟器架构,能在宿主机上以纯软件方式模拟各种硬件设备(包括CPU、输入/输出设备等),也可以模拟由这些设备组成的单片机或嵌入式系统。它基于插件机制,主程序提供整个构架,包括运行环境的建立、代码的装载和运行时内存、寄存器、端口的查看界面等,而插件负责模拟不同硬件设备的行为和特性,并抽象成一个统一的接口提供给主程序调用。通过这个机制,模拟新的设备变得更为容易。Proemutator提供多种CPU插件与若干种片内与片外外设,结构图如图1所示。



2 基于嵌入式模拟器的插桩构架

嵌入式测试平台建立在嵌入式模拟器之上,测试过程中首先对被测程序进行插桩,桩节点在程序运行过程中能同步的,即时地向桩信息分析器输出预设的桩信息。分析器能实时接收装数据,并进行分析,从而得出整个被测程序运行过程中的覆盖率和分支情况。基于嵌入式模拟器的插桩构架如图2所示。


3 基于Proemulator的插桩构架实现

嵌入式模拟器和桩信息分析器为两个独立进程,在两者之间实现桩数据的传递,需采用进程间通信机制。常见的进程间通信方法有以下几种:

(1)Socket通信是常见的进程间通信方法,它能良好地支持网络通信协议TCP/IP,在进行通信时,需要设置端口,并通过几次握手建立TCP连接,因此适合网络间的大量数据传输,而对于单机上的少量多次数据传输并不合适。

(2)共享内存的方法较为常见,对于每个进程来说,获得共享内存后,就能实现内存的读写操作。但是如果不进行同步,则一个进程在进行读的过程中另一个进程进行写操作,就会造成数据的不一致。因此在采用共享内存的方法时,需要将共享区域设置为临界资源。常用的方法有信号量机制,两个进程访问共享内存时,利用P,V操作进行读写的互斥。当P操作成功时,才能访问临界区,访问完毕后进行V操作,让出使用权,使得别的进程能够访问。共享内存的方法适合多个进程间的大量数据共享,只要处理好操作的互斥性,该方法非常实用。

(3)WM COPYDATA消息是Windows底层消息,使用非常方便,只需获得进行通信的进程的窗口句柄,就能通过SendMessege函数将数据封装在消息中传递给该进程,因为SendMessege函数在接收进程接到消息后才会返回,因此绝对不会发生消息丢失的情况,是可靠的通信。接收方只需要处理WM_COPYDATA消息,便能获得传递来的数据。当然,该方法不能用于网络间的传输,只能用于单机环境下的Windows操作系统。还有管道,剪贴板,文件映射等方法,本文不做详细介绍。下面详细介绍基于嵌入式模拟器获取桩数据的技术难点。

3.1基于Proemulator的插桩构架

Proemulator源码完全开放,提供了UART插件,对外设的模拟可以简化为对端口寄存器的模拟,当程序访问相应的端口时,触发其对应外设的动作。UART内部包括控制口和数据口。向控制口写入工作方式控制字后,访问数据口数据能触发事件。在被测程序中进行插桩初始化,设定UART工作方式,在需要插桩的位置将桩数据写入UART数据端口,然后在UART插件中将写入数据端口的桩信息使用Windows进程通信机制输出。

Proemulator提供了多种串行数据重定位的方式来将模拟器内部的数据信息发送至外部,包括控制台、磁盘文件、命名管道和串口。其中命名管道是一种较好的方式,只需编写自己的管道接收器,就能实时地接收管道发送出来的桩数据,使用串口也比较方便。还能在Proemulator中加入共享内存,或者发送WMCOPYDATA消息,基于Proemulator的插桩构架如图3所示。



3.2插桩构架性能分析

本文实现了基于Proemulator的桩数据的发送与获取,并进行了分析,见表1。



4结 语

本文提出基于嵌入式模拟器的插桩构架,将插桩后的程序经编译生成可执行代码,运行于模拟器上,在运行过程中模拟器能实时地将桩信息发送到桩信息分析器,进行代码的白盒测试。本文基于已有的嵌入式模拟器Proemulator实现了桩数据获取。基于嵌入式模拟器的插桩架均能即时地进行桩数据的发送接收与分析,能有效进行白盒测试。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈信号发生器的工作原理