摘 要:將可擴展、可裁剪的嵌入式模擬器應用于嵌入式軟件測試有很多優點。詳細研究了已有嵌入式模擬器Proemulator的工作機制,提出基于模擬器的嵌入式測試平臺構架。首先將被測軟件進行插樁,生成目標程序運行于模擬器之上,模擬器進程在執行過程中實時地將樁數據發送給樁信息分析器,由分析器即時得出程序運行過程中的語句覆蓋率。實現了基于Proemulator的插樁構架,包括樁數據的發送與獲取,能有效進行白盒測試。
關鍵詞:嵌入式測試平臺;模擬器;插樁;Proemulator
中圖分類號:TP391.9 文獻標識碼:A
文章編號: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 引 言
由于目標機與宿主機處理器體系結構不同,嵌入式軟件無法在宿主機上直接運行與測試[1],因此嵌入式軟件的開發過程常常比硬件開發過程還要漫長,導致整個系統開發周期長,軟件功能調試和性能測試不能及時完成,軟件質量無法保證。嵌入式模擬器能良好地解決這一問題[2]。
將模擬器應用到嵌入式軟件的開發與測試中,其優點有如下幾個方面:
(1) 采用模擬器進行嵌入式開發與測試能讓軟件和硬件開發同步進行,縮短開發周期;
(2) 能提供比真正硬件環境下更豐富的測試環境,拓寬測試范圍;能進行長時間的測試,甚至能在真實硬件不能承受的“危險”條件下測試[3]。
(3) 能提供調試,測試,變量查看,性能分析,實驗數據存儲等多種額外功能,便于開發與測試人員進行分析。
1 國內外模擬器相關研究
國內外已有若干較成熟的嵌入式系統模擬器,如ARM公司的ARMmulator[4],同濟大學開發的Proemulator中針對ARM芯片的指令模擬器[5],清華大學Sky Eye項目中的指令模擬器[6],Linux上的開源軟件GDB ARMulator[7]。
Proemulator是一個源碼開放的通用模擬器架構,能在宿主機上以純軟件方式模擬各種硬件設備(包括CPU、輸入/輸出設備等),也可以模擬由這些設備組成的單片機或嵌入式系統。它基于插件機制,主程序提供整個構架,包括運行環境的建立、代碼的裝載和運行時內存、寄存器、端口的查看界面等,而插件負責模擬不同硬件設備的行為和特性,并抽象成一個統一的接口提供給主程序調用[6]。通過這個機制,模擬新的設備變得更為容易。Proemulator提供多種CPU插件與若干種片內與片外外設,結構圖如圖1所示。
圖1 Proemulator結構圖
2 基于嵌入式模擬器的插樁構架
嵌入式測試平臺建立在嵌入式模擬器之上,測試過程中首先對被測程序進行插樁,樁節點在程序運行過程中能同步的,即時地向樁信息分析器輸出預設的樁信息。分析器能實時接收裝數據,并進行分析,從而得出整個被測程序運行過程中的覆蓋率和分支情況。基于嵌入式模擬器的插樁構架如圖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提供了多種串行數據重定位的方式來將模擬器內部的數據信息發送至外部,包括控制臺、磁盤文件、命名管道和串口[5]。其中命名管道是一種較好的方式,只需編寫自己的管道接收器,就能實時地接收管道發送出來的樁數據,使用串口也比較方便。還能在Proemulator中加入共享內存,或者發送WM_COPYDATA消息,基于Proemulator的插樁構架如圖3所示。
圖3 基于Proemulator的插樁構架
3.2 插樁構架性能分析
本文實現了基于Proemulator的樁數據的發送與獲取,并進行了分析,見表1。
表1 基于ARMulator和Proemulator的插樁構架比較
基于Proemulator的ESTE
樁數據發送不采用中斷機制,樁數據發送比ARMulator慢
樁數據獲取機制支持磁盤文件,WM_COPYDATA消息通信,共享內存機制,串口通信,命名管道等各種Windows進程通信機制
是否需要編寫外設插件來發送樁數據提供UART插件,能直接使用
外設插件提供插件較多,如UART,LED,LCD等
插件編寫規范其插件編寫規范相應簡單
加載插件修改配置文件無需修改配置文件
4 結 語
本文提出基于嵌入式模擬器的插樁構架,將插樁后的程序經編譯生成可執行代碼,運行于模擬器上,在運行過程中模擬器能實時地將樁信息發送到樁信息分析器,進行代碼的白盒測試。本文基于已有的嵌入式模擬
器Proemulator實現了樁數據獲取。基于嵌入式模擬
器的插樁架均能即時地進行樁數據的發送接收與分析,能有效進行白盒測試。
參考文獻
[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]李明.兩種嵌入式軟件仿真環境的分析與比較[J].電子產品世界,2003(7):47-49.
[3]蔣崇武,楊順昆,劉斌.面向嵌入式軟件測試的仿真建模[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開發小組.Sky Eye項目文檔[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.