CN101706750B - 一种基于嵌入式模拟器的测试桩获取方法 - Google Patents
一种基于嵌入式模拟器的测试桩获取方法 Download PDFInfo
- Publication number
- CN101706750B CN101706750B CN 200910218985 CN200910218985A CN101706750B CN 101706750 B CN101706750 B CN 101706750B CN 200910218985 CN200910218985 CN 200910218985 CN 200910218985 A CN200910218985 A CN 200910218985A CN 101706750 B CN101706750 B CN 101706750B
- Authority
- CN
- China
- Prior art keywords
- embedded
- simulator
- stake
- software
- embedded type
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提出一种基于嵌入式模拟器ARMulator的测试桩获取方法,能有效进行基于ARM内核的嵌入式软件测试。基于该方法能在宿主机上搭建嵌入式软件测试平台,被测软件经插桩后运行在平台上,桩数据能即时发送和接收,实现嵌入式软件的白盒测试。它包括以下步骤:(1)编制stub端口模拟器,加载到嵌入式模拟器上;(2)编制桩获取器;(3)将被测软件进行插桩,经编译链接后生成目标程序,运行于模拟器之上;(4)模拟器进程在执行过程中实时将桩数据发送给stub端口模拟器;(5)桩获取器即时获得桩数据并分析,即时得出程序运行过程中的语句覆盖和分支情况,实现白盒测试。
Description
技术领域
本发明属于嵌入式***测试技术领域,具体涉及一种基于嵌入式模拟器的测试桩获取方法的设计与实现。该方法针对通用ARM内核模拟器ARMulator进行设计,能有效进行基于ARM内核的嵌入式软件测试。将此方法应用到基于宿主机的嵌入式软件测试中,能使嵌入式***开发过程中的软硬件开发同步,以缩短整个***的开发时间。
背景技术
在嵌入式***的开发中,嵌入式软件只能运行于特定的目标***上,无法直接在宿主机平台上进行开发与测试,因此一般在原型板调试时才开始进行底层嵌入式软件的调试工作。为了加快项目的开发进度,确保嵌入式软件的质量,应该在硬件原型板制板之前开始嵌入式软件模块调试,即在没有硬件原型板时先尽可能地调试并解决嵌入式软件编程方面的错误。嵌入式***的一般开发流程如图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平台上实现为动态链接库文件(.dl1)即为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采用嵌入式模拟器进行嵌入式软件开发中:嵌入式软件,嵌入式模拟器,宿主机三者关系图
图5嵌入式模拟器ARMulator结构图
图6基于嵌入式模拟器ARMulator的桩获取方法
图7基于嵌入式模拟器的嵌入式测试平台构架
图8基于stub端口模拟器stub.dll的桩获取结构图
图9基于stub端口模拟器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 (4)
1.一种基于嵌入式模拟器的测试桩获取方法,其特征在于:提出一种基于嵌入式内核模拟器ARMulator的测试桩获取方法,能支撑所有基于ARM内核的嵌入式软件测试,其中ARMulator是ARM公司研发的嵌入式开发平台ARM Developer Suite中提供的ARM芯片内核模拟器,基于该方法能在宿主机上搭建嵌入式软件测试平台,被测软件经插桩后运行在平台上,桩数据能即时发送和接收,以实现嵌入式软件白盒测试,该方法包括以下步骤:
(1)编制stub端口模拟器,加载到嵌入式模拟器上;
(2)编制桩获取器;
(3)将被测软件进行插桩,经编译链接后生成目标程序,运行于嵌入式模拟器之上;
(4)嵌入式模拟器进程在执行过程中实时将桩数据发送给stub端口模拟器;
(5)桩获取器即时获得桩数据并分析,即时得出程序运行过程中的语句覆盖和分支情况,实现白盒测试;
其中stub端口模拟器的工作机制为:
(a)将被测软件进行插桩,插桩程序由嵌入式平台所支持的指令集编写,能被嵌入式模拟器识别;
(b)当被测程序运行在嵌入式模拟器上时,插桩程序访问嵌入式模拟器中预定义的内存单元,并将桩数据写入该内存单元;
(c)当(b)中预定义的内存单元被访问时,发送windows消息通知桩获取器;
(d)当桩获取器收到消息时,从(b)中预定义的内存单元取到桩数据,并进行分析,能即时得到被测程序运行过程中的覆盖率和分支情况。
2.根据权利要求1所述的基于嵌入式模拟器的测试桩获取方法,其特征在于:支持ANSY C指令集,嵌入式汇编ARM指令集,嵌入式Thumb指令集所编写程序的桩获取。
3.根据权利要求1所述的基于嵌入式模拟器的测试桩获取方法,其特征在于:在嵌入式***开发的过程中,在硬件平台没有设计与开发好之前,能基于宿主机对嵌入式软件进行测试,节约整个嵌入式***的开发时间。
4.根据权利要求1所述的基于嵌入式模拟器的测试桩获取方法,其特征在于:宿主机可以为PC机或笔记本,需首先安装ARM公司提供的ARM Developer Suite v1.2。
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 CN101706750A (zh) | 2010-05-12 |
CN101706750B true 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) |
Families Citing this family (10)
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 | 南京大学 | 基于代码查询进行源代码插桩的方法 |
CN104156311B (zh) * | 2014-08-05 | 2017-09-29 | 北京控制工程研究所 | 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法 |
CN106155900B (zh) * | 2015-04-17 | 2020-12-04 | 腾讯科技(深圳)有限公司 | 一种代码测试监测方法、装置及设备 |
CN110554969B (zh) * | 2019-09-23 | 2021-05-25 | 上海创景信息科技有限公司 | 基于预设断点的目标码覆盖率测试方法、***及介质 |
CN110990252B (zh) * | 2019-10-22 | 2024-06-18 | 北京计算机技术及应用研究所 | 一种嵌入式飞控软件测试质量和效率的测试方法 |
CN113535487A (zh) * | 2020-04-16 | 2021-10-22 | 杭州中天微***有限公司 | 测试***及方法 |
CN111897282B (zh) * | 2020-08-03 | 2022-02-11 | 南京工程学院 | 一种基于x86平台的软plc*** |
CN113377379B (zh) * | 2021-08-12 | 2021-11-16 | 四川腾盾科技有限公司 | 一种基于模拟器指令插桩的操作***信息统计方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1877545A (zh) * | 2006-07-04 | 2006-12-13 | 浙江大学 | 一种嵌入式***模拟器中的动态软件能耗测试方法 |
CN101241466A (zh) * | 2007-02-08 | 2008-08-13 | 深圳迈瑞生物医疗电子股份有限公司 | 一种嵌入式软件的测试方法和*** |
-
2009
- 2009-11-16 CN CN 200910218985 patent/CN101706750B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1877545A (zh) * | 2006-07-04 | 2006-12-13 | 浙江大学 | 一种嵌入式***模拟器中的动态软件能耗测试方法 |
CN101241466A (zh) * | 2007-02-08 | 2008-08-13 | 深圳迈瑞生物医疗电子股份有限公司 | 一种嵌入式软件的测试方法和*** |
Non-Patent Citations (2)
Title |
---|
张蕊等.基于B/S结构的嵌入式***测试平台及其应用.《计算机辅助设计与图形学学报》.2009,第21卷(第1期),13-19. * |
谭华.嵌入式***软件仿真器的研究与实现.《中国优秀硕士学位论文全文数据库》.电子科技大学,2005,10-57. * |
Also Published As
Publication number | Publication date |
---|---|
CN101706750A (zh) | 2010-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101706750B (zh) | 一种基于嵌入式模拟器的测试桩获取方法 | |
US8799875B2 (en) | Streamlining unit testing through hot code swapping | |
RU2668973C2 (ru) | Отладка машинного кода путем перехода от исполнения в собственном режиме к исполнению в интерпретируемом режиме | |
EP2359247B1 (en) | Transforming user script code for debugging | |
US20190004932A1 (en) | Unit test and automation framework (utaf) system and method | |
CN100541445C (zh) | 一种程序调测***及方法 | |
US9697109B2 (en) | Dynamically configurable test doubles for software testing and validation | |
US8972785B2 (en) | Classifying processor testcases | |
CN101630258A (zh) | Windows平台上嵌入式Linux软件集成开发***及其构建方法 | |
CN108614767A (zh) | 一种远程调试方法及装置 | |
CN102722438A (zh) | 一种内核调试的方法和设备 | |
CN105027089B (zh) | 内核功能性检查器 | |
CN102508697B (zh) | 一种Java实现8位嵌入式CPU仿真运行环境的方法 | |
KR101028359B1 (ko) | 스크립트를 이용한 dut 자동화 테스트 장치 | |
CN116663489A (zh) | 一种rtl模块复位方法、装置、电子设备及存储介质 | |
CN116521231A (zh) | 一种用于sparc v8指令集动态仿真验证的参考模型 | |
Křoustek et al. | Retargetable multi-level debugging in HW/SW codesign | |
CN109144849A (zh) | 一种嵌入式软件调测方法 | |
CN113360440B (zh) | 处理器通信控制方法及相关产品 | |
CN113836825A (zh) | 神经网络处理器关键标准与验证芯片的应用方法 | |
WO2017192258A1 (en) | Debugging code controlling resource-constrained intelligent devices contemporaneously with executing object code | |
JP2013020425A (ja) | オープンソースソフトウェアを利用したハードウェア・ソフトウェア協調検証方法 | |
CN112765021A (zh) | 一种引导程序的调试检验方法、装置、设备及存储介质 | |
CN109753308B (zh) | 指令通路验证***及指令通路监测方法 | |
CN116089019B (zh) | 面向Hexagon架构的细粒度CPU模拟器 |
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 |