,,,
(北京空間飛行器總體設(shè)計部,北京 100094)
數(shù)管分系統(tǒng)(OBDH)是航天器的信息處理中心,分系統(tǒng)軟件承擔(dān)數(shù)據(jù)流控制和自主管理等功能[1],是關(guān)鍵的星載軟件之一,需要進行充分的測試驗證。傳統(tǒng)的數(shù)管軟件測試環(huán)境由星上設(shè)備和地面測試設(shè)備組成[2],包括:數(shù)管計算機、供電設(shè)備、專用地面測試設(shè)備、專用測試軟件、總線仿真設(shè)備及其軟件。這種實物測試環(huán)境可以為數(shù)管軟件運行提供真實的平臺,但存在以下幾方面問題:1)硬件依賴性強,在星載計算機完成調(diào)試之前,無法進行星載軟件的測試工作;2)地檢設(shè)備多、研制周期長,存在地檢設(shè)備延期交付影響軟件測試進度的風(fēng)險;3)測試軟件分散,難以有效監(jiān)視系統(tǒng)所有的數(shù)據(jù)流變化;4)測試過程中不能記錄軟件內(nèi)部行為,不利于測試問題的排查定位。
為擺脫實物測試環(huán)境的限制,國外航天領(lǐng)域?qū)⑻摂M測試環(huán)境應(yīng)用在星載軟件開發(fā)中。NASA委托Triakis公司開發(fā)了通用虛擬系統(tǒng)模擬器開發(fā)工具IcoSim[3],使用IcoSim為數(shù)十個航空航天項目創(chuàng)建了虛擬測試環(huán)境,在虛擬環(huán)境上進行軟件的測試驗證工作。ESA將虛擬測試環(huán)境技術(shù)應(yīng)用于歐空局地面控制中心[4],利用虛擬機模擬真實目標(biāo)機并運行星載軟件,用于地面飛行任務(wù)訓(xùn)練;同時將模擬器應(yīng)用于軟件開發(fā)、確認(rèn)測試和在軌維護中,其開發(fā)的SPARC模擬器TSIM在Ariane-5,PROBA-2等項目的軟件研制中發(fā)揮了重要作用。
我國航天領(lǐng)域近年來對虛擬測試環(huán)境也開展了研究,主要集中在第三方評測領(lǐng)域[5],仍處于起步階段,沒有形成通用的、有效的虛擬環(huán)境解決方案和虛擬環(huán)境產(chǎn)品。虛擬測試環(huán)境對星載軟件調(diào)試手段的支持以及對新型星載處理器的支持尚不夠完善。
本文針對傳統(tǒng)數(shù)管軟件實物測試環(huán)境的不足,設(shè)計和構(gòu)建了基于動態(tài)二進制翻譯技術(shù)的虛擬測試環(huán)境,基于廣泛應(yīng)用的QEMU模擬器,添加星載處理器的支持以及外圍設(shè)備的模擬,補充目標(biāo)碼指令跟蹤記錄功能,對星載數(shù)據(jù)流集中仿真和實時監(jiān)控,實現(xiàn)了在虛擬平臺下完成數(shù)管軟件的跟蹤調(diào)試、測試工作,集中記錄系統(tǒng)狀態(tài)變化,解決了實物測試環(huán)境對軟件調(diào)試、測試工作的制約,提高星載軟件開發(fā)效率。
動態(tài)二進制翻譯技術(shù)是一種即時編譯技術(shù),它將源體系結(jié)構(gòu)的二進制機器指令動態(tài)翻譯為可在目的體系結(jié)構(gòu)上運行的代碼[6]。QEMU是一款基于動態(tài)二進制翻譯技術(shù)、開源的高性能模擬器[7-8],能夠支持包括X86、ARM、MIPS和SPARC等多種目標(biāo)架構(gòu)的模擬。
QEMU作為一個用戶進程運行于宿主操作系統(tǒng)之上,以基本塊為單位進行二進制指令翻譯執(zhí)行?;緣K是一組順序執(zhí)行的指令序列,以控制轉(zhuǎn)移指令結(jié)尾,只有一個入口和一個出口。如圖1所示,動態(tài)翻譯器會把對基本塊翻譯和優(yōu)化的結(jié)果緩存起來,再次執(zhí)行該基本塊時,就可以執(zhí)行預(yù)存起來的翻譯后的代碼。模擬器開始執(zhí)行時,首先從翻譯緩存中查找對應(yīng)的翻譯塊,為提高查找效率,QEMU將最近使用的翻譯塊存放在一個哈希表中。如果基本塊不在翻譯緩沖中(該基本塊尚未被翻譯或已經(jīng)從緩沖中移除),則啟動基本塊翻譯過程。讀取基本塊目標(biāo)指令,生成中間操作序列,翻譯器將中間序列轉(zhuǎn)換為宿主機器代碼,并存放在翻譯緩存中。物理處理器每執(zhí)行完一條指令都會進行中斷檢查,對于QEMU,每執(zhí)行完一次基本塊會進行一次中斷響應(yīng)檢查。
圖1 動態(tài)二進制翻譯執(zhí)行流程
根據(jù)數(shù)管計算機硬件配置,在虛擬測試環(huán)境中實現(xiàn)星載數(shù)管軟件運行所必需的環(huán)境支持,首先要解決在開發(fā)主機環(huán)境下運行星載處理器架構(gòu)下可執(zhí)行二進制代碼的問題。本虛擬環(huán)境基于QEMU中的動態(tài)二進制翻譯技術(shù),將被測試系統(tǒng)的可執(zhí)行二進制代碼動態(tài)翻譯為本地可執(zhí)行的代碼,在翻譯過程中增加可執(zhí)行代碼的跟蹤記錄以增強調(diào)試功能;其次,實現(xiàn)數(shù)管計算機外部設(shè)備的虛擬仿真,為星載軟件運行提供數(shù)據(jù)激勵。對1553B總線等復(fù)雜的外部設(shè)備接口,采用數(shù)據(jù)解析的方法,融合終端應(yīng)用功能,對數(shù)據(jù)流進行仿真;最后,采用統(tǒng)一存儲、分層處理的方法對測試數(shù)據(jù)進行實時差異記錄,提高星載軟件測試狀態(tài)的監(jiān)視效率。
數(shù)管軟件虛擬測試環(huán)境以QEMU模擬器為基礎(chǔ),包括星載處理器模擬模塊、外圍設(shè)備模擬及數(shù)據(jù)流仿真模塊,數(shù)據(jù)監(jiān)控模塊以及指令跟蹤記錄模塊,組織結(jié)構(gòu)如圖2所示。
圖2 數(shù)管軟件虛擬測試環(huán)境結(jié)構(gòu)圖
星載處理器模擬模塊是整個虛擬測試環(huán)境的核心,負(fù)責(zé)運行星載軟件可執(zhí)行二進制代碼,將執(zhí)行記錄傳到指令跟蹤記錄模塊保存,同時通過中斷和IO處理指令與外圍設(shè)備進行數(shù)據(jù)交換;外圍設(shè)備模擬及數(shù)據(jù)流仿真模塊實現(xiàn)外設(shè)接口的模擬以及數(shù)據(jù)流的仿真,為數(shù)管軟件運行提供數(shù)據(jù)激勵,接收軟件輸出數(shù)據(jù),并傳到數(shù)據(jù)監(jiān)控模塊處理;數(shù)據(jù)監(jiān)控模塊負(fù)責(zé)對計算機所有輸入輸出數(shù)據(jù)進行存儲分析,實時反映星載軟件的狀態(tài)變化,是星載軟件測試的直接操作界面;指令跟蹤記錄模塊提供處理器已執(zhí)行指令的存儲和查詢功能,補充了QEMU的調(diào)試接口能力,為軟件調(diào)試提供更多的手段。
本文所述在QEMU中增加星載處理器模擬的工作,主要包括對星載處理器特性參數(shù)的定義和系統(tǒng)寄存器的處理。根據(jù)動態(tài)二進制翻譯技術(shù)的特點和星載數(shù)管軟件運行的實際需要,星載處理器模擬模塊只對物理處理器的部分功能進行仿真模擬。
QEMU為每個支持的虛擬處理器設(shè)置了一組特性參數(shù),包括處理器名稱、IU版本號、FPU版本號、MMU特性、寄存器窗口數(shù)量、以及指令集范圍等,根據(jù)真實處理器情況定義星載處理器特征參數(shù),并使用這些參數(shù)完成目標(biāo)處理器動態(tài)翻譯功能的初始化。
系統(tǒng)寄存器主要包括內(nèi)存配置寄存器、IO配置寄存器、中斷配置和狀態(tài)寄存器、RTC寄存器等。其中,中斷和RTC是星載軟件運行的基礎(chǔ),模擬器必須實現(xiàn);內(nèi)存配置寄存器和IO配置寄存器控制處理器對內(nèi)存和IO的訪問時序,基于動態(tài)翻譯技術(shù)的模擬器無法模擬精確的時序訪問控制,因此在模擬器中不考慮此類寄存器配置數(shù)據(jù)對軟件運行狀態(tài)的影響。為方便星載軟件開發(fā)人員確認(rèn)星載軟件向此類配置寄存器寫入了正確的配置數(shù)據(jù),所有對寄存器的訪問都會被記錄。
星載處理器模擬模塊在系統(tǒng)環(huán)境中注冊中斷響應(yīng)函數(shù),用于響應(yīng)外圍設(shè)備提出的中斷請求。星載處理器模擬模塊綜合分析中斷未決寄存器、中斷強制寄存器和中斷屏蔽寄存器,判斷虛擬星載處理器是否需要處理中斷。當(dāng)需要處理系統(tǒng)中斷時,設(shè)置系統(tǒng)中相應(yīng)的中斷位,設(shè)置虛擬星載處理器下一步進入中斷處理狀態(tài)。RTC是虛擬星載處理器運行的時間基準(zhǔn),為避免模擬器在不同環(huán)境下運行的速度差異對軟件測試的影響,RTC時間源以模擬器程序運行的時間為準(zhǔn),并為所有的外圍設(shè)備模擬模塊提供統(tǒng)一的時間基準(zhǔn)。
圖3 目標(biāo)計算機初始化流程
如圖3所示,虛擬星載計算機初始化包括處理器初始化、內(nèi)存初始化、程序加載運行和外圍設(shè)備初始化。處理器初始化完成處理器狀態(tài)設(shè)置、寄存器初值設(shè)置以及中斷申請、中斷處理模塊掛接。內(nèi)存初始化完成內(nèi)存的申請,設(shè)置內(nèi)存大小和起始地址。程序加載有兩種方式:一是加載ELF可執(zhí)行文件,通過-kernel參數(shù)指定,該方式包含調(diào)試信息,在利用GDB接口進行調(diào)試時是必需的;二是加載燒寫在PROM中的程序二進制映像文件,通過-bios參數(shù)指定。該方式與真實硬件環(huán)境下運行程序的狀態(tài)完全一致。最后需要加載初始化各個外圍設(shè)備驅(qū)動模擬模塊,為了方便添加、修改外圍設(shè)備模擬模塊,實現(xiàn)具有不同外圍設(shè)備的數(shù)管計算機模擬,本文所述設(shè)計改進了QEMU加載外圍設(shè)備模擬模塊的方式,采用動態(tài)共享庫的方式加載外圍設(shè)備模擬模塊。
為全面準(zhǔn)確記錄星載軟件的執(zhí)行過程,提供更多的星載軟件調(diào)試手段,本文所述設(shè)計在QEMU模擬器執(zhí)行每個基本塊時,記錄該基本塊的首地址,作為虛擬星載處理器目標(biāo)碼指令執(zhí)行跟蹤記錄。每個基本塊只使用4字節(jié)空間記錄首地址,在內(nèi)存中申請10 MB的存儲空間進行循環(huán)緩存,實現(xiàn)記錄多達數(shù)百萬條歷史指令的功能,遠超過星載處理器調(diào)試單元的指令記錄容量[9]。按順序記錄的歷史指令為星載軟件運行異常后,回查軟件執(zhí)行過程提供依據(jù)。在需要時,指令跟蹤記錄模塊根據(jù)存儲的基本塊地址,在反匯編文件中獲取匯編指令提供給軟件調(diào)試人員。
數(shù)管計算機的外圍設(shè)備一般包括遙控遙測接口和總線接口。外圍設(shè)備的模擬需要完成中斷掛接和觸發(fā),根據(jù)設(shè)備狀態(tài)對設(shè)備寄存器讀寫操作進行處理。
遙控遙測接口實現(xiàn)遙控數(shù)據(jù)的注入和遙測數(shù)據(jù)的下行功能。收到上行數(shù)據(jù)注入時,虛擬遙控設(shè)備模塊向虛擬處理器提出中斷請求,星載軟件在中斷處理過程中,讀取相應(yīng)的設(shè)備寄存器,觸發(fā)模擬器調(diào)用外圍設(shè)備模塊對應(yīng)地址寄存器的處理函數(shù)。虛擬設(shè)備模塊在處理函數(shù)中向星載軟件提供注入數(shù)據(jù)。
1553B總線是國內(nèi)航天器最常用的數(shù)據(jù)總線之一,通常承擔(dān)平臺數(shù)據(jù)傳輸任務(wù)[10]。根據(jù)數(shù)管軟件訪問總線接口的特點,虛擬總線模擬模塊不僅實現(xiàn)了總線接口的模擬,還包括總線終端設(shè)備數(shù)據(jù)的仿真和處理。1553B總線芯片寄存器多,設(shè)備存儲區(qū)大,狀態(tài)復(fù)雜。虛擬總線設(shè)備首先將芯片的寄存器區(qū)和內(nèi)存區(qū)映射到內(nèi)存,保存所有寫入的配置數(shù)據(jù)和消息數(shù)據(jù)。虛擬模塊監(jiān)視配置寄存器值的變化,當(dāng)發(fā)現(xiàn)配置寄存器的傳輸啟動位被設(shè)置時,虛擬模塊從映射的內(nèi)存區(qū)中讀出所保存的總線芯片棧寄存器地址、命令棧區(qū)內(nèi)容和數(shù)據(jù)區(qū)內(nèi)容,依次解析命令棧區(qū)的消息格式,根據(jù)設(shè)置的總線終端仿真數(shù)據(jù)內(nèi)容重新設(shè)置數(shù)據(jù)區(qū)和命令棧區(qū),實現(xiàn)1553B總線消息傳輸?shù)姆抡妗?/p>
作為整星的數(shù)據(jù)管理核心,數(shù)管分系統(tǒng)需要處理總線各終端設(shè)備的數(shù)據(jù)收發(fā),遙控上注和遙測下傳等多個數(shù)據(jù)流,對這些數(shù)據(jù)流的監(jiān)控和分析是數(shù)管軟件測試的主要工作。為解決傳統(tǒng)數(shù)管測試環(huán)境中數(shù)據(jù)監(jiān)視點分散的問題,防止數(shù)據(jù)漏判、錯判,虛擬測試環(huán)境采用對所有數(shù)管軟件輸入輸出數(shù)據(jù)進行分層處理、集中管理的方法,并實時記錄數(shù)據(jù)的變化情況,如圖4所示。
圖4 數(shù)據(jù)監(jiān)控模塊
總線傳輸數(shù)據(jù),遙控注入數(shù)據(jù)和遙測下傳數(shù)據(jù)由不同的虛擬外圍設(shè)備產(chǎn)生或接收,經(jīng)過對原始數(shù)據(jù)進行必要的解析處理后,添加時間信息,進行統(tǒng)一存儲。各項數(shù)據(jù)記錄在存儲時與前一次的內(nèi)容進行比對,形成差異日志,實時顯示。本文所述設(shè)計在日志監(jiān)視窗口中按時間順序提示數(shù)管軟件遙控數(shù)據(jù)接收情況、遙測數(shù)據(jù)變化情況以及總線數(shù)據(jù)變化情況,實現(xiàn)在單一窗口界面下監(jiān)視數(shù)管軟件狀態(tài)變化過程,有效減少系統(tǒng)狀態(tài)漏判、錯判的風(fēng)險。統(tǒng)計總線遙測采集周期、遙測源包下傳周期等測試任務(wù)也可以通過對統(tǒng)一存儲數(shù)據(jù)的查詢獲取。
使用高分四號衛(wèi)星數(shù)管軟件對本文設(shè)計的虛擬測試環(huán)境進行了驗證測試。表1列出了虛擬測試環(huán)境與實物測試環(huán)境的對比情況。首先在開發(fā)主機Linux操作系統(tǒng)中運行虛擬測試平臺,加載高分四號數(shù)管軟件映像;然后,通過虛擬遙控接口上注數(shù)管指令,由數(shù)據(jù)監(jiān)視模塊記錄下數(shù)管軟件的狀態(tài)變化;最后,對比實物測試環(huán)境下數(shù)管軟件運行結(jié)果與虛擬環(huán)境下軟件運行結(jié)果是否一致。圖5是在虛擬測試環(huán)境中進行高分四號衛(wèi)星數(shù)管軟件指令組功能測試的情況。驗證結(jié)果表明,數(shù)管軟件在虛擬測試環(huán)境下的運行結(jié)果與實物環(huán)境下的結(jié)果一致。
表1 虛擬測試環(huán)境與實物測試環(huán)境對比
圖5 虛擬測試環(huán)境下數(shù)管軟件測試界面
本文設(shè)計的虛擬測試環(huán)境已經(jīng)應(yīng)用在高分四號衛(wèi)星、火星著陸巡視器等型號的星載軟件研發(fā)中。在型號中的應(yīng)用表明,能夠使用虛擬測試環(huán)境完成星載軟件的運行、測試工作,實現(xiàn)對星載數(shù)據(jù)流的仿真和單窗口監(jiān)視。同時,虛擬測試環(huán)境提供更多的調(diào)試手段,為星載軟件問題定位分析提供幫助。虛擬測試環(huán)境的應(yīng)用,可以避免物理設(shè)備不能及時到位對軟件開發(fā)進度的影響,實現(xiàn)星載軟件提前測試和軟硬件協(xié)同開發(fā),加快了軟件研制進度,提高了軟件開發(fā)效率。
針對實物測試環(huán)境對數(shù)管軟件開發(fā)測試的制約問題,設(shè)計并實現(xiàn)了虛擬集成測試環(huán)境。該環(huán)境基于動態(tài)二進制翻譯技術(shù),實現(xiàn)對星載計算機以及外圍設(shè)備的模擬和數(shù)據(jù)流的仿真監(jiān)視,具備目標(biāo)碼指令跟蹤記錄以及單窗口監(jiān)視系統(tǒng)狀態(tài)變化等功能。相對于傳統(tǒng)的實物測試環(huán)境,該虛擬測試環(huán)境具有不依賴硬件設(shè)備、數(shù)據(jù)流仿真和監(jiān)視便捷、調(diào)試手段豐富等優(yōu)點,已經(jīng)應(yīng)用在高分四號、火星著陸巡視器等型號的數(shù)管軟件開發(fā)中,提高了軟件的開發(fā)效率。該設(shè)計方案可以推廣到其他星載軟件或嵌入式軟件的虛擬測試仿真,也可應(yīng)用于飛控協(xié)調(diào)演練等活動,具有一定的推廣價值。
參考文獻:
[1] 劉 鑫,韋涌泉,馮國平,等. 高分四號衛(wèi)星數(shù)管分系統(tǒng)設(shè)計及在軌驗證[J].航天器工程,2016,25(1):93-98.
[2] 郭 堅,付連芳,翟君武. 一種星載軟件系統(tǒng)測試環(huán)境的設(shè)計[J]. 計算機測量與控制,2005,13(5):499-502.
[3] Bennett T L,Wennberg P W.The Use of a Virtual System Simulator and Executable Specifications to Enhance Software Validation, Verification,and Safety Assurance—Final Report[R].Fairmont,West Virginia:NASA IV&V Facility,2004.
[4] Pidgeon A, Dawe G, Dartnell A.Software emulators:A virtual processor to support training simulations[R].ESA Publications Division,2002.
[5] 郭向英,盛 莊,張西超. 基于VTEST的TMS320C3x指令集模擬器設(shè)計[J].計算機工程與設(shè)計,2013, 34(6):1973-1976.
[6] 張西超,郭向英,趙 雷. TCG動態(tài)二進制翻譯技術(shù)研究[J]. 計算機應(yīng)用與軟件,2013,30(11):34-37.
[7] 李可生,楊 博,徐天偉,等. 基于QEMU 的可重構(gòu)專用處理器模擬器實現(xiàn)[J].計算機工程與設(shè)計,2016, 37(5):1335-1339.
[8] 鮑穎力. 基于虛擬機QEMU的嵌入式全系統(tǒng)仿真測試環(huán)境的研究與實現(xiàn)[J]. 航空電子技術(shù),2011,42(4):33-37.
[9] 張 鵬,樊曉桓,黃小平. 基于總線訪問的片上調(diào)試方法研究[J]. 計算機測量與控制,2014,22(2):510-512.
[10] 劉燕松,盛利元,馮旭哲.衛(wèi)星載荷1553B總線數(shù)據(jù)接口的設(shè)計與實現(xiàn)[J].宇航計測技術(shù),2013,33(5):52-56.