CN101706750A - 一种基于嵌入式模拟器的测试桩获取方法 - Google Patents

一种基于嵌入式模拟器的测试桩获取方法 Download PDF

Info

Publication number
CN101706750A
CN101706750A CN 200910218985 CN200910218985A CN101706750A CN 101706750 A CN101706750 A CN 101706750A CN 200910218985 CN200910218985 CN 200910218985 CN 200910218985 A CN200910218985 A CN 200910218985A CN 101706750 A CN101706750 A CN 101706750A
Authority
CN
China
Prior art keywords
simulator
embedded
stake
pole
software
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.)
Granted
Application number
CN 200910218985
Other languages
English (en)
Other versions
CN101706750B (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.)
Xi'an Post & Telecommunication College
Original Assignee
Xi'an Post & Telecommunication College
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 Xi'an Post & Telecommunication College filed Critical Xi'an Post & Telecommunication College
Priority to CN 200910218985 priority Critical patent/CN101706750B/zh
Publication of CN101706750A publication Critical patent/CN101706750A/zh
Application granted granted Critical
Publication of CN101706750B publication Critical patent/CN101706750B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提出一种基于嵌入式模拟器的测试桩获取方法,旨在提供一种嵌入式软件的测试方法,能在嵌入式硬件平台还没有搭建起来的时候,基于宿主机平台实现嵌入式软件的测试,以此实现嵌入式系统软硬件同步开发。它包括以下步骤:(1)编制stub端口模拟器,加载到嵌入式模拟器上;(2)编制桩获取器;(3)将被测软件进行插桩,生成目标程序运行于模拟器之上;(4)模拟器进程在执行过程中实时将桩发送给stub端口模拟器;(5)桩获取器即时获得桩数据并分析,即时得出程序运行过程中的语句覆盖率和分支情况。基于该方法能即时进行桩数据的发送、接收和分析,为进行白盒测试提供了必要的条件。

Description

一种基于嵌入式模拟器的测试桩获取方法
技术领域
本发明属于嵌入式系统测试技术领域,具体涉及一种基于嵌入式模拟器的测试桩获取方法的设计与实现。将此方法应用到基于宿主机的嵌入式软件测试中,能使嵌入式系统开发过程中的软硬件开发同步,以缩短整个系统的开发时间。
背景技术
在嵌入式系统的开发中,嵌入式软件只能运行于特定的目标系统上,无法直接在宿主机平台上进行开发与测试,因此一般在原型板调试时才开始进行底层嵌入式软件的调试工作。为了加快项目的开发进度,确保嵌入式软件的质量,应该在硬件原型板制板之前开始嵌入式软件模块调试,即在没有硬件原型板时先尽可能地调试并解决嵌入式软件编程方面的错误。嵌入式系统的一般开发流程如图1所示,硬件与软件的开发为串行模式。
将嵌入式模拟器应用于嵌入式软件的开发与测试,能使得软件与硬件并行开发。嵌入式模拟器模拟了芯片指令集的运行,每取出一条被测程序的指令,模拟器均将其替换为一段宿主机程序,在执行过程中修改模拟器中相应的寄存器,端口,内存单元的内容,以此来模拟被测程序的执行过程。采用嵌入式模拟器进行基于宿主机的嵌入式系统开发流程如图2所示,硬件与软件的开发为并行模式。不采用模拟器进行嵌入式软件开发,嵌入式软件,硬件平台,宿主机三者的关系如图3所示;采用模拟器进行嵌入式软件开发,嵌入式软件,模拟器,宿主机三者的关系如图4所示。
白盒测试分为:覆盖率测试,分支测试,条件测试等,实现这些测试的最常用方法是:对被测源程序进行插桩,插桩完毕的程序通过编译链接,生成可执行代码,在运行过程中,即时的将桩数据发送出来,由桩获取器获取桩数据并进行分析,得到动态的覆盖率和程序执行情况。
国内外已有若干较成熟的嵌入式系统模拟器,如ARM公司的ARMmulator,同济大学开发的Proemulator中针对ARM芯片的指令模拟器,清华大学Sky Eye项目中的指令模拟器,Linux上的开源软件GDB ARMulator。鉴于ARM处理器在消费类电子产品中已占据了绝对优势,因此本发明针对ARM模拟器研究桩数据的获取方法。ARM公司提供专门用于ARM相关应用开发和调试的综合性软件ARM Developer Suite(ADS),ADS支持嵌入式软件在线调试与基于宿主平台的调试:
1.嵌入式软件在线调试时,ADS通过JTAG标准调试接口连接硬件开发板,将嵌入式软件中对端口的访问内容传递到硬件开发板上。这种调试是在硬件开发板已经实现的基础上进行的,并不能缩短嵌入式系统的开发周期;
2.在基于宿主平台调试时,嵌入式软件运行在ADS提供的嵌入式系统模拟器ARMulator上。ARMulator不仅可以模拟ARM处理器的体系结构和指令集,还可以模拟存储器,寄存器,例如中断控制器和定时器等,这样就模拟了一个嵌入式开发最小子系统。ARMulator模拟器结构图如图5所示。
要使得软件和硬件同步开发,可采用基于宿主平台的调试.如何基于ADS中提供的ARMulator模拟器获取测试桩,是本发明解决的最主要问题.
目前国内针对嵌入式软件的测试方案几乎才起步,多处于研究阶段;本发明提出了一种基于嵌入式模拟器ARMulator的测试桩获取方法,能有效的进行嵌入式软件测试,使得基于ARM核的嵌入式软件都能基于该方法进行测试。此方法填补了国内在该领域的空白,必将对嵌入式软件测试技术的发展、嵌入式产品的开发产生积极的影响。
发明内容
本发明为了解决嵌入式开发过程中,在嵌入式平台还未搭建起来时,嵌入式软件无法进行测试的问题,提出了一种基于嵌入式模拟器ARMulator的测试桩获取方法,实现了桩数据的即时发送和接收,并基于该方法搭建了嵌入式软件测试平台,使得基于ARM核的嵌入式软件能在宿主机上实现测试。基于嵌入式模拟器ARMulator的测试桩获取方法如图6所示。
本发明在设计与实现过程中,主要解决的技术问题主要包括以下几个方面:
1.要实现对被测软件的白盒测试,需对被测软件进行插桩。插桩位置和桩数据的设计,对软件的测试至关重要;
2.在被测程序中插桩,插桩函数必须是嵌入式设备与模拟器能识别的指令。将插桩完成的源码进行编译链接,生成目标映像文件。映像文件运行于模拟器上,插桩接口能将桩数据在被测软件运行过程中实时发送出来,并被桩获取器接收。ARMulator在Windows平台上实现为动态链接库文件(.dll)即为ADS安装路径\ARM\ADSv1_2\Bin下的ARMulate.dll,不提供源码,因此重点要解决问题是如何实现插桩和收桩;本发明中开发了stub端口模拟器插件,对外设的模拟可以简化为对端口寄存器的模拟,当程序访问相应的端口时,触发其对应外设的动作。当stub端口被写入时,将触发windows消息通知桩获取器来取走桩数据。将生成的模拟插件stub.dll拷贝到相应的目录下,并在配置文件中进行修改,实现stub插件的加载。在被测程序中进行插桩,插桩程序往stub端口写入桩数据,此时桩获取器接收到消息并访问stub端口取走桩数据。被测程序和桩获取器之间的桩数据传输可采用多种进程间通信机制实现;
3.如何使得目标文件运行于ARMulator模拟器之上,并返回控制台中的运行结果;
4.桩获取器对接收到的桩数据进行实时分析,得出程序运行过程中的语句覆盖率,条件覆盖率,分支覆盖情况等,并以图表和曲线的方式显示出来。此处需与问题1中的插桩位置和桩数据结合设计;
5.基于问题1~4设计出整个基于测试平台构架;其构架示意图如图7所示;
技术难点的解决方案如下:
基于stub.dll的桩数据获取结构图、流程图见图8、9所示;桩数据获取的工作原理为:
1.当在被测函数中进行插桩时,插桩语句将桩数据写入某内存单元。例如将该内存地址定义为0x0C000000;
2.stub端口模拟器stub.dll中实现了访问地址0x0C000000会触发自定义Windows消息WM_STUB_COME通知桩获取器recvStub进行接收;
3.recvStub窗口处理WM_STUB_COME消息,将发送来的桩数据保存并处理,获得被测程序运行过程中的动态覆盖率和分支情况,并用曲线和图表的形式表示出来;
4.当被测程序运行结束,stub.dll发送WM_STUB_FINISH消息给recvStub窗口,通知桩数据接收完毕,桩获取器获得最终的语句覆盖率。
本发明具有下述优点:
1.现有的嵌入式软件测试多为软硬件结合的方式,将桩数据通过宿主机的端口传输到外部的芯片,再由外部芯片进行分析,分析完毕由芯片外设显示测试结果或是将测试结果传回宿主机显示;本发明提出的桩获取方法基于宿主机就能实现,将桩数据写入内存,然后由分析程序取出,不用经过端口和外设芯片,因此有以下优点:
a)只需要宿主机,不用添加更多的外设,逻辑上更简单;
b)桩数据在宿主平台内部就能获取,速度快,准确率高,如向外设芯片传输,则传输过程中容易出错;
c)测试结果在宿主机显示,能支持图表,曲线等多种显示,且开发起来更为方便,不用局限于芯片上的较单调外设显示;
2.已有测试平台多为一般软件测试平台,用于测试PC平台高级语言程序,在嵌入式软件测试中没有优势;本发明侧重于嵌入式软件测试,能支持ARM指令集、Thumb指令集和ANSY C,能有效的进行嵌入式软件测试;
3.本发明内部加载了嵌入式模拟器ARMulator,它是ADS公司提供的商业级软件,稳定性、可靠性、指令运行速度均有良好保证;
附图说明
图1嵌入式系统一般开发流程
图2基于宿主机上嵌入式模拟器的嵌入式系统开发流程
图3嵌入式软件开发中:嵌入式软件,硬件平台,宿主机三者关系图
图4采用模拟器进行嵌入式软件开发中:嵌入式软件,模拟器,宿主机三者关系图
图5ARMulator结构图
图6基于嵌入式模拟器ARMulator的桩获取方法
图7基于模拟器的嵌入式测试平台构架
图8基于stub.dll的桩获取结构图
图9基于stub.dll的桩获取流程图
图10运行插完桩的被测程序,桩获取器收到的桩数据
具体实施方式
1.采用PC机或笔记本作为宿主机;系统要求:
1)安装windows XP操作系统;
2)安装ARM公司的软件ARM开发套件:ARM Developer Suite v1.2,安装过程中遵循以下几点:(1)选择完全安装(2)注册激活该软件(3)将lpc2131工程模板拷贝到安装目录\ARM\ADSv1_2\Stationery中;
2.编制stub端口模拟器插件和桩获取器;
3.加载stub端口模拟器插件,该插件模拟了ARM芯片的UART接口的部分功能,能实现桩数据的获取和发送;找到ADS的安装目录\ARM\ADSv1_2\Bin,具体加载步骤如下:
1)peripherals.ami为外设配置文件,在其中添加语句:
{Default_stub=stub}
default.ami为当前默认加载外设配置文件,在其中添加语句:
{stub=Default_stub}
2)将stub设备描述文件stub.dsc拷贝到Bin目录下;
3)将stub设备定义动态链接库文件stub.dll拷贝到Bin目录下。
4.使用ADS打开源文件,并针对被测源文件进行插桩,桩程序需满足以下两点:
1)由ARM平台或ARMulator可识别的指令集编写,在程序运行出现分支,循环或函数调用时进行插桩;
2)桩程序访问ARMulator所模拟的芯片内存空间中的stub端口地址。将桩数据写入该地址,使得该桩数据能被发送到模拟器进程之外。
5.打开桩获取器,在插桩完毕后利用ADS进行编译链接,生成目标映像文件*.axf;并将其运行于ARMulator模拟器之上。在映像文件运行过程中,桩程序即时的将桩数据发送到stub端口,并由桩获取器获取分析;
6.桩获取器对收到的桩进行即时分析,动态显示已接收到的桩数据,和桩数据分析结果,如覆盖率等。图10为运行插完桩的被测程序,桩获取器收到的桩数据。

Claims (6)

1.一种基于嵌入式模拟器的测试桩获取方法,其特征在于:包括以下步骤:
(1)编制stub端口模拟器,加载到嵌入式模拟器上;
(2)编制桩获取器;
(3)将被测软件进行插桩,生成目标程序运行于模拟器之上;
(4)模拟器进程在执行过程中实时将桩发送给stub端口模拟器;
(5)桩获取器即时获得桩数据并分析,即时得出程序运行过程中的语句覆盖率和分支情况。
2.根据权利要求1所述的基于嵌入式模拟器的测试桩获取方法,其特征在于:该方法是基于嵌入式开发平台ARM Developer Suite中所提供的ARM内核模拟器ARMulator提出的桩获取方法,当stub端口模拟器编制完成后,需加载到该模拟器之上;ARM内核模拟器ARMulator.dll为ARM公司的商业级产品,成熟度高,稳定性和鲁棒性好,错误率低。
3.根据权利要求1所述的基于嵌入式模拟器的测试桩获取方法,其特征在于:stub端口模拟器的工作机制为:
(1)将被测软件进行插桩,插桩程序由嵌入式平台所支持的指令集编写,能被嵌入式模拟器识别;
(2)当被测程序运行在模拟器上时,插桩程序访问预定义的内存单元,并将桩数据写入该内存单元;
(3)当该内存空间被访问时,发送windows消息通知桩获取器模块;
(4)当桩获取器收到消息时,从该内存单元取到桩数据,并进行分析,能即时得到被测程序运行过程中的覆盖率和分支情况。
4.根据权利要求1所述的基于嵌入式模拟器的测试桩获取方法,其特征在于:支持ANSY C指令集,嵌入式汇编ARM指令集,嵌入式Thumb指令集所编写程序的桩获取。
5.根据权利要求1所述的基于嵌入式模拟器的测试桩获取方法,其特征在于:在嵌入式系统开发的过程中,在硬件平台没有设计与开发好之前,能基于宿主机对嵌入式软件进行测试,节约整个嵌入式系统的开发时间。
6.根据权利要求1所述的基于嵌入式模拟器的测试桩获取方法,其特征在于:宿主机可以为PC机或笔记本,需首先安装ARM公司提供的ARM Developer Suite v1.2。
CN 200910218985 2009-11-16 2009-11-16 一种基于嵌入式模拟器的测试桩获取方法 Expired - Fee Related CN101706750B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200910218985 CN101706750B (zh) 2009-11-16 2009-11-16 一种基于嵌入式模拟器的测试桩获取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200910218985 CN101706750B (zh) 2009-11-16 2009-11-16 一种基于嵌入式模拟器的测试桩获取方法

Publications (2)

Publication Number Publication Date
CN101706750A true CN101706750A (zh) 2010-05-12
CN101706750B CN101706750B (zh) 2013-04-10

Family

ID=42376976

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910218985 Expired - Fee Related CN101706750B (zh) 2009-11-16 2009-11-16 一种基于嵌入式模拟器的测试桩获取方法

Country Status (1)

Country Link
CN (1) CN101706750B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102214142A (zh) * 2011-07-15 2011-10-12 南京大学 无痕可管理的源代码手动定义标志插桩方法
CN102231109A (zh) * 2011-07-15 2011-11-02 南京大学 无痕可管理的源代码自动插桩方法
CN102298552A (zh) * 2011-09-19 2011-12-28 南京大学 基于代码查询进行源代码插桩的方法
CN104156311A (zh) * 2014-08-05 2014-11-19 北京控制工程研究所 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法
CN106155900A (zh) * 2015-04-17 2016-11-23 腾讯科技(深圳)有限公司 一种代码测试监测方法、装置及设备
CN110554969A (zh) * 2019-09-23 2019-12-10 上海创景信息科技有限公司 基于预设断点的目标码覆盖率测试方法、系统及介质
CN110990252A (zh) * 2019-10-22 2020-04-10 北京计算机技术及应用研究所 一种嵌入式飞控软件测试质量和效率的测试方法
CN111897282A (zh) * 2020-08-03 2020-11-06 南京工程学院 一种基于x86平台的软plc系统
CN113377379A (zh) * 2021-08-12 2021-09-10 四川腾盾科技有限公司 一种基于模拟器指令插桩的操作系统信息统计方法
CN113535487A (zh) * 2020-04-16 2021-10-22 杭州中天微系统有限公司 测试系统及方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100385411C (zh) * 2006-07-04 2008-04-30 浙江大学 一种嵌入式系统模拟器中的动态软件能耗测试方法
CN101241466B (zh) * 2007-02-08 2010-09-29 深圳迈瑞生物医疗电子股份有限公司 一种嵌入式软件的测试方法和系统

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102231109A (zh) * 2011-07-15 2011-11-02 南京大学 无痕可管理的源代码自动插桩方法
CN102214142A (zh) * 2011-07-15 2011-10-12 南京大学 无痕可管理的源代码手动定义标志插桩方法
CN102298552A (zh) * 2011-09-19 2011-12-28 南京大学 基于代码查询进行源代码插桩的方法
CN104156311B (zh) * 2014-08-05 2017-09-29 北京控制工程研究所 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法
CN104156311A (zh) * 2014-08-05 2014-11-19 北京控制工程研究所 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法
CN106155900B (zh) * 2015-04-17 2020-12-04 腾讯科技(深圳)有限公司 一种代码测试监测方法、装置及设备
CN106155900A (zh) * 2015-04-17 2016-11-23 腾讯科技(深圳)有限公司 一种代码测试监测方法、装置及设备
CN110554969A (zh) * 2019-09-23 2019-12-10 上海创景信息科技有限公司 基于预设断点的目标码覆盖率测试方法、系统及介质
CN110990252A (zh) * 2019-10-22 2020-04-10 北京计算机技术及应用研究所 一种嵌入式飞控软件测试质量和效率的测试方法
CN113535487A (zh) * 2020-04-16 2021-10-22 杭州中天微系统有限公司 测试系统及方法
CN111897282A (zh) * 2020-08-03 2020-11-06 南京工程学院 一种基于x86平台的软plc系统
CN111897282B (zh) * 2020-08-03 2022-02-11 南京工程学院 一种基于x86平台的软plc系统
CN113377379A (zh) * 2021-08-12 2021-09-10 四川腾盾科技有限公司 一种基于模拟器指令插桩的操作系统信息统计方法
CN113377379B (zh) * 2021-08-12 2021-11-16 四川腾盾科技有限公司 一种基于模拟器指令插桩的操作系统信息统计方法

Also Published As

Publication number Publication date
CN101706750B (zh) 2013-04-10

Similar Documents

Publication Publication Date Title
CN101706750B (zh) 一种基于嵌入式模拟器的测试桩获取方法
US8799875B2 (en) Streamlining unit testing through hot code swapping
EP2359247B1 (en) Transforming user script code for debugging
CN101739333B (zh) 应用程序的调试方法、调试工具及调试装置
US20190004932A1 (en) Unit test and automation framework (utaf) system and method
CN100541445C (zh) 一种程序调测系统及方法
CN110580226B (zh) 操作系统级程序的目标码覆盖率测试方法、系统及介质
US8997049B1 (en) Method and system for debugging of compiled code using an interpreter
CN103389939B (zh) 一种针对堆可控分配漏洞的检测方法及系统
US8701088B2 (en) Generating backtracing information for software debugging of software programs running on virtual machines
CN108614767A (zh) 一种远程调试方法及装置
CN113157508B (zh) 嵌入式系统的测试方法、系统、装置、设备及存储介质
CN102722438B (zh) 一种内核调试的方法和设备
US20080127119A1 (en) Method and system for dynamic debugging of software
CN104156311A (zh) 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法
CN104503898A (zh) 一种嵌入式软件调试参数实时查看的方法及系统
KR101028359B1 (ko) 스크립트를 이용한 dut 자동화 테스트 장치
CN116663489A (zh) 一种rtl模块复位方法、装置、电子设备及存储介质
CN109977953A (zh) 基于yolov3的目标检测算法在嵌入式设备上的实现方法
CN115374017A (zh) 一种仿真运行可执行文件时抓取现场的方法及计算设备
CN102508697B (zh) 一种Java实现8位嵌入式CPU仿真运行环境的方法
Křoustek et al. Retargetable multi-level debugging in HW/SW codesign
CN109144849A (zh) 一种嵌入式软件调测方法
CN113836825A (zh) 神经网络处理器关键标准与验证芯片的应用方法
CN103955424B (zh) 一种虚拟化嵌入式二进制软件缺陷检测系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
DD01 Delivery of document by public notice

Addressee: Xi'an Post & Telecommunication College Fan Lin

Document name: Notification of an Office Action

C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130410

Termination date: 20131116