摘 要:將可擴(kuò)展、可裁剪的嵌入式模擬器應(yīng)用于嵌入式軟件測(cè)試有很多優(yōu)點(diǎn)。詳細(xì)研究了已有嵌入式模擬器Proemulator的工作機(jī)制,提出基于模擬器的嵌入式測(cè)試平臺(tái)構(gòu)架。首先將被測(cè)軟件進(jìn)行插樁,生成目標(biāo)程序運(yùn)行于模擬器之上,模擬器進(jìn)程在執(zhí)行過(guò)程中實(shí)時(shí)地將樁數(shù)據(jù)發(fā)送給樁信息分析器,由分析器即時(shí)得出程序運(yùn)行過(guò)程中的語(yǔ)句覆蓋率。實(shí)現(xiàn)了基于Proemulator的插樁構(gòu)架,包括樁數(shù)據(jù)的發(fā)送與獲取,能有效進(jìn)行白盒測(cè)試。
關(guān)鍵詞:嵌入式測(cè)試平臺(tái);模擬器;插樁;Proemulator
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)03-188-03
Research on Instrumentation Frame Based on Proemulator
FAN Lin,WANG Zhongmin,LIANG Chen,XIE Yonggang
(Xi′an Institute of Post and Telecommunications,Xi′an,710061,China)
Abstract:There are many advantages of applying extensible and scalable embedded simulator to embedded software testing.Particular researches are made to working mechanism of existing embedded simulator:Proemulator.An Embedded System Testing Environment Frame(ESTE) is brought forward.Adding instrumentation into embedded program under test,compile and link the instrumented program to get an executable program.Running it on the simulator,the simulator process sends instrument information timely to instrument analyzer.The analyzer can calculate program statement coverage.An instrumentation frame based on Proemulator which can send and analyze instrumentation effectively and timely to do white box testing are realized.
Keywords:embedded test environment frame;simulator;instrumentation;Proemulator
0 引 言
由于目標(biāo)機(jī)與宿主機(jī)處理器體系結(jié)構(gòu)不同,嵌入式軟件無(wú)法在宿主機(jī)上直接運(yùn)行與測(cè)試[1],因此嵌入式軟件的開(kāi)發(fā)過(guò)程常常比硬件開(kāi)發(fā)過(guò)程還要漫長(zhǎng),導(dǎo)致整個(gè)系統(tǒng)開(kāi)發(fā)周期長(zhǎng),軟件功能調(diào)試和性能測(cè)試不能及時(shí)完成,軟件質(zhì)量無(wú)法保證。嵌入式模擬器能良好地解決這一問(wèn)題[2]。
將模擬器應(yīng)用到嵌入式軟件的開(kāi)發(fā)與測(cè)試中,其優(yōu)點(diǎn)有如下幾個(gè)方面:
(1) 采用模擬器進(jìn)行嵌入式開(kāi)發(fā)與測(cè)試能讓軟件和硬件開(kāi)發(fā)同步進(jìn)行,縮短開(kāi)發(fā)周期;
(2) 能提供比真正硬件環(huán)境下更豐富的測(cè)試環(huán)境,拓寬測(cè)試范圍;能進(jìn)行長(zhǎng)時(shí)間的測(cè)試,甚至能在真實(shí)硬件不能承受的“危險(xiǎn)”條件下測(cè)試[3]。
(3) 能提供調(diào)試,測(cè)試,變量查看,性能分析,實(shí)驗(yàn)數(shù)據(jù)存儲(chǔ)等多種額外功能,便于開(kāi)發(fā)與測(cè)試人員進(jìn)行分析。
1 國(guó)內(nèi)外模擬器相關(guān)研究
國(guó)內(nèi)外已有若干較成熟的嵌入式系統(tǒng)模擬器,如ARM公司的ARMmulator[4],同濟(jì)大學(xué)開(kāi)發(fā)的Proemulator中針對(duì)ARM芯片的指令模擬器[5],清華大學(xué)Sky Eye項(xiàng)目中的指令模擬器[6],Linux上的開(kāi)源軟件GDB ARMulator[7]。
Proemulator是一個(gè)源碼開(kāi)放的通用模擬器架構(gòu),能在宿主機(jī)上以純軟件方式模擬各種硬件設(shè)備(包括CPU、輸入/輸出設(shè)備等),也可以模擬由這些設(shè)備組成的單片機(jī)或嵌入式系統(tǒng)。它基于插件機(jī)制,主程序提供整個(gè)構(gòu)架,包括運(yùn)行環(huán)境的建立、代碼的裝載和運(yùn)行時(shí)內(nèi)存、寄存器、端口的查看界面等,而插件負(fù)責(zé)模擬不同硬件設(shè)備的行為和特性,并抽象成一個(gè)統(tǒng)一的接口提供給主程序調(diào)用[6]。通過(guò)這個(gè)機(jī)制,模擬新的設(shè)備變得更為容易。Proemulator提供多種CPU插件與若干種片內(nèi)與片外外設(shè),結(jié)構(gòu)圖如圖1所示。
圖1 Proemulator結(jié)構(gòu)圖
2 基于嵌入式模擬器的插樁構(gòu)架
嵌入式測(cè)試平臺(tái)建立在嵌入式模擬器之上,測(cè)試過(guò)程中首先對(duì)被測(cè)程序進(jìn)行插樁,樁節(jié)點(diǎn)在程序運(yùn)行過(guò)程中能同步的,即時(shí)地向樁信息分析器輸出預(yù)設(shè)的樁信息。分析器能實(shí)時(shí)接收裝數(shù)據(jù),并進(jìn)行分析,從而得出整個(gè)被測(cè)程序運(yùn)行過(guò)程中的覆蓋率和分支情況?;谇度胧侥M器的插樁構(gòu)架如圖2所示。
圖2 基于嵌入式模擬器的插樁構(gòu)架
3 基于Proemulator的插樁構(gòu)架實(shí)現(xiàn)
嵌入式模擬器和樁信息分析器為兩個(gè)獨(dú)立進(jìn)程,在兩者之間實(shí)現(xiàn)樁數(shù)據(jù)的傳遞,需采用進(jìn)程間通信機(jī)制。常見(jiàn)的進(jìn)程間通信方法有以下幾種:
(1) Socket通信是常見(jiàn)的進(jìn)程間通信方法,它能良好地支持網(wǎng)絡(luò)通信協(xié)議TCP/IP,在進(jìn)行通信時(shí),需要設(shè)置端口,并通過(guò)幾次握手建立TCP連接,因此適合網(wǎng)絡(luò)間的大量數(shù)據(jù)傳輸,而對(duì)于單機(jī)上的少量多次數(shù)據(jù)傳輸并不合適。
(2) 共享內(nèi)存的方法較為常見(jiàn),對(duì)于每個(gè)進(jìn)程來(lái)說(shuō),獲得共享內(nèi)存后,就能實(shí)現(xiàn)內(nèi)存的讀寫(xiě)操作。但是如果不進(jìn)行同步,則一個(gè)進(jìn)程在進(jìn)行讀的過(guò)程中另一個(gè)進(jìn)程進(jìn)行寫(xiě)操作,就會(huì)造成數(shù)據(jù)的不一致。因此在采用共享內(nèi)存的方法時(shí),需要將共享區(qū)域設(shè)置為臨界資源。常用的方法有信號(hào)量機(jī)制,兩個(gè)進(jìn)程訪問(wèn)共享內(nèi)存時(shí),利用P,V操作進(jìn)行讀寫(xiě)的互斥。當(dāng)P操作成功時(shí),才能訪問(wèn)臨界區(qū),訪問(wèn)完畢后進(jìn)行V操作,讓出使用權(quán),使得別的進(jìn)程能夠訪問(wèn)。共享內(nèi)存的方法適合多個(gè)進(jìn)程間的大量數(shù)據(jù)共享,只要處理好操作的互斥性,該方法非常實(shí)用。
(3) WM_COPYDATA消息是Windows底層消息,使用非常方便,只需獲得進(jìn)行通信的進(jìn)程的窗口句柄,就能通過(guò)SendMessege函數(shù)將數(shù)據(jù)封裝在消息中傳遞給該進(jìn)程,因?yàn)镾endMessege函數(shù)在接收進(jìn)程接到消息后才會(huì)返回,因此絕對(duì)不會(huì)發(fā)生消息丟失的情況,是可靠的通信。接收方只需要處理WM_COPYDATA消息,便能獲得傳遞來(lái)的數(shù)據(jù)。當(dāng)然,該方法不能用于網(wǎng)絡(luò)間的傳輸,只能用于單機(jī)環(huán)境下的Windows操作系統(tǒng)。還有管道,剪貼板,文件映射等方法,本文不做詳細(xì)介紹。下面詳細(xì)介紹基于嵌入式模擬器獲取樁數(shù)據(jù)的技術(shù)難點(diǎn)。
3.1 基于Proemulator的插樁構(gòu)架
Proemulator源碼完全開(kāi)放,提供了UART插件,對(duì)外設(shè)的模擬可以簡(jiǎn)化為對(duì)端口寄存器的模擬,當(dāng)程序訪問(wèn)相應(yīng)的端口時(shí),觸發(fā)其對(duì)應(yīng)外設(shè)的動(dòng)作。UART內(nèi)部包括控制口和數(shù)據(jù)口。向控制口寫(xiě)入工作方式控制字后,訪問(wèn)數(shù)據(jù)口數(shù)據(jù)能觸發(fā)事件。在被測(cè)程序中進(jìn)行插樁初始化,設(shè)定UART工作方式,在需要插樁的位置將樁數(shù)據(jù)寫(xiě)入U(xiǎn)ART數(shù)據(jù)端口,然后在UART插件中將寫(xiě)入數(shù)據(jù)端口的樁信息使用Windows進(jìn)程通信機(jī)制輸出。
Proemulator提供了多種串行數(shù)據(jù)重定位的方式來(lái)將模擬器內(nèi)部的數(shù)據(jù)信息發(fā)送至外部,包括控制臺(tái)、磁盤(pán)文件、命名管道和串口[5]。其中命名管道是一種較好的方式,只需編寫(xiě)自己的管道接收器,就能實(shí)時(shí)地接收管道發(fā)送出來(lái)的樁數(shù)據(jù),使用串口也比較方便。還能在Proemulator中加入共享內(nèi)存,或者發(fā)送WM_COPYDATA消息,基于Proemulator的插樁構(gòu)架如圖3所示。
圖3 基于Proemulator的插樁構(gòu)架
3.2 插樁構(gòu)架性能分析
本文實(shí)現(xiàn)了基于Proemulator的樁數(shù)據(jù)的發(fā)送與獲取,并進(jìn)行了分析,見(jiàn)表1。
表1 基于ARMulator和Proemulator的插樁構(gòu)架比較
基于Proemulator的ESTE
樁數(shù)據(jù)發(fā)送不采用中斷機(jī)制,樁數(shù)據(jù)發(fā)送比ARMulator慢
樁數(shù)據(jù)獲取機(jī)制支持磁盤(pán)文件,WM_COPYDATA消息通信,共享內(nèi)存機(jī)制,串口通信,命名管道等各種Windows進(jìn)程通信機(jī)制
是否需要編寫(xiě)外設(shè)插件來(lái)發(fā)送樁數(shù)據(jù)提供UART插件,能直接使用
外設(shè)插件提供插件較多,如UART,LED,LCD等
插件編寫(xiě)規(guī)范其插件編寫(xiě)規(guī)范相應(yīng)簡(jiǎn)單
加載插件修改配置文件無(wú)需修改配置文件
4 結(jié) 語(yǔ)
本文提出基于嵌入式模擬器的插樁構(gòu)架,將插樁后的程序經(jīng)編譯生成可執(zhí)行代碼,運(yùn)行于模擬器上,在運(yùn)行過(guò)程中模擬器能實(shí)時(shí)地將樁信息發(fā)送到樁信息分析器,進(jìn)行代碼的白盒測(cè)試。本文基于已有的嵌入式模擬
器Proemulator實(shí)現(xiàn)了樁數(shù)據(jù)獲取?;谇度胧侥M
器的插樁架均能即時(shí)地進(jìn)行樁數(shù)據(jù)的發(fā)送接收與分析,能有效進(jìn)行白盒測(cè)試。
參考文獻(xiàn)
[1]Alex Heunhe Han,Yong-Ho Ahn,Ki-Seok Chung.Virtual ARM Simulation Platform for Embedded System Developers[A].ITC-CSCC[C].2008:253-256.
[2]李明.兩種嵌入式軟件仿真環(huán)境的分析與比較[J].電子產(chǎn)品世界,2003(7):47-49.
[3]蔣崇武,楊順昆,劉斌.面向嵌入式軟件測(cè)試的仿真建模[J].計(jì)算機(jī)工程,2008,34(4):87-89.
[4]ARM Limited.ARM Application Notes[EB/OL].http://rtds.cs.tamu.edu/web_462/techdocs/ARM/appsnotes/index.htm,2003.
[5]Stanley Huang.ProEmulator Introduction[EB/OL].http://proemulator.sourceforge.net,2005.
[6]SkyEye開(kāi)發(fā)小組.Sky Eye項(xiàng)目文檔[EB/OL].http://www.huihoo.org/mirrors/skyeye/skyeyedoc.html.2003.
[7]David McCullough.μClinux in the GDB/ARMulutor[EB/OL].http://www.uclinux.org/pub/uClinux/utilities/armulator,2005.