,,
(北京空間飛行器總體設(shè)計部,北京 100094)
隨著航天器壽命的增長和任務(wù)難度的加大,星載軟件的復(fù)雜度越來越高,需要具備在軌重構(gòu)和更新能力,以應(yīng)對可能出現(xiàn)的任務(wù)擴展和軟件潛在缺陷[1]。星載軟件在軌維護是指地球站對航天器在軌飛行過程中所碰到的困難,包括飛行軟件在飛行過程中暴露缺陷的糾正。
星載軟件通常固化在只讀存儲器中,只具備有限的RAM區(qū)數(shù)據(jù)在軌維護能力[2],部分高軌長壽命航天器設(shè)計了獨立在軌維護模式[3],在處理器8位模式下,將上注的新程序?qū)懙絉AM區(qū)實現(xiàn)軟件整體升級維護。由于只能在RAM區(qū)進行數(shù)據(jù)更改,以上在軌維護方法存在掉電丟失的問題,并且在軟件整體升級過程中,星載系統(tǒng)處于在軌維護模式,不具備整星服務(wù)功能,存在潛在風(fēng)險。
為實現(xiàn)星載軟件持久化的在軌維護,需要使用在線可編程器件,常用的有EEPROM和FLASH。參考文獻[4]提出了在可編程存儲器條件下基于VxWorks操作系統(tǒng)的在軌維護方案,可實現(xiàn)VxWorks下的目標(biāo)碼持久化維護,但不具有通用性。參考文獻[5]提出了基于增量鏈接的星載軟件在軌更新方法,可實現(xiàn)通用系統(tǒng)下星載軟件的在軌維護操作,對空間環(huán)境中存儲器異常狀態(tài)下軟件升級問題以及星載軟件配置數(shù)據(jù)重構(gòu)問題缺少考慮。
本文分析了近年來星載軟件在軌維護案例,提出了一種基于文件系統(tǒng)的星載軟件在軌維護方法,實現(xiàn)軟件映像可靠存儲、程序和配置數(shù)據(jù)分離、軟件整體升級可回退以及程序局部維護持久化,為長壽命航天器軟件在軌維護策略提供了參考。
不同于一般的地面系統(tǒng)軟件,星載軟件在軌維護具有較多的條件限制:星地測控時段短,通信速率小,要求在軌維護必須在有限的時間內(nèi)完成;空間環(huán)境復(fù)雜,星載軟件可靠性要求高,需要應(yīng)對可編程存儲器部分存儲單元數(shù)據(jù)反轉(zhuǎn)或失效的風(fēng)險;關(guān)鍵星載軟件負(fù)責(zé)整星平臺熱控、電源等關(guān)鍵業(yè)務(wù),要減少在軌維護期間系統(tǒng)服務(wù)的停止時間,維護失敗時應(yīng)能及時回退到以前的版本。
表1列出了近年國內(nèi)遙感衛(wèi)星數(shù)管分系統(tǒng)軟件在軌維護的情況。測控圈次需求是依據(jù)在軌維護補丁數(shù)量和一個圈次內(nèi)測控站能上注的指令條數(shù)計算而得。假設(shè)一次地面站測控8 min,每5 m上注一條在軌維護指令。
表1 星載軟件在軌維護案例
通過上表可以看出,星載軟件在軌維護的原因主要是設(shè)備參數(shù)調(diào)試優(yōu)化和故障處理;軟件配置數(shù)據(jù)的更改占據(jù)在軌維護的大部分項目;多數(shù)在軌維護的補丁較少,能在一次地面站測控區(qū)內(nèi)完成,但軟件整體維護的補丁較多,需要多次地面站測控上注。
針對星載軟件在軌維護特點,提出了基于文件系統(tǒng)的星載軟件在軌維護方法。如圖1所示,星載軟件系統(tǒng)由引導(dǎo)軟件、文件系統(tǒng)、應(yīng)用軟件映像文件、配置數(shù)據(jù)文件和補丁文件組成。其中應(yīng)用軟件、配置數(shù)據(jù)文件和補丁文件存在文件系統(tǒng)中。在此軟件結(jié)構(gòu)劃分下,星載軟件在軌維護分為軟件整體升級、配置數(shù)據(jù)重構(gòu)和程序局部維護三類。
圖1 基于文件系統(tǒng)的星載軟件系統(tǒng)結(jié)構(gòu)
引導(dǎo)軟件映像直接存儲在存儲器中,系統(tǒng)上電后最先運行,完成系統(tǒng)初始化,加載文件系統(tǒng),從文件系統(tǒng)中讀取引導(dǎo)配置項,選擇加載的應(yīng)用軟件映像,加載執(zhí)行補丁文件,完成應(yīng)用軟件的啟動。
由于引導(dǎo)軟件是系統(tǒng)的入口程序,直接存儲在存儲器上,沒有冗余存儲措施,任何存儲單元的損壞都會導(dǎo)致系統(tǒng)失效,同時引導(dǎo)軟件功能固定,幾乎不需要在軌維護,因此引導(dǎo)軟件應(yīng)固化在可靠性高的只讀存儲器中。
文件系統(tǒng)是存儲維護應(yīng)用軟件映像、配置數(shù)據(jù)和補丁數(shù)據(jù)的載體。文件系統(tǒng)可屏蔽底層可編程存儲器的物理特性,提供高可靠的數(shù)據(jù)存儲和維護服務(wù)。
配置數(shù)據(jù)文件保存了星載軟件運行時所需要的參數(shù)信息,與星載應(yīng)用軟件程序分開存儲管理,需要時不必修改軟件邏輯功能,僅通過地面上注手段在軌修改配置數(shù)據(jù)文件,可實時在航天器正常運行狀態(tài)下對信息流進行動態(tài)重構(gòu)。
星載軟件映像文件是星載軟件的主體部分,被引導(dǎo)軟件搬移到RAM區(qū)運行。星載軟件映像一般比較大,采用壓縮存儲的方式[6],可顯著減少在軌維護時上注數(shù)據(jù)的時間。
補丁文件存儲了內(nèi)存修改指令,在應(yīng)用軟件映像搬移到RAM后,執(zhí)行內(nèi)存修改指令可以修改RAM的程序代碼,實現(xiàn)局部軟件持久化更新。
本方法中,所有的在軌維護操作均以修改文件系統(tǒng)中文件的形式實現(xiàn),因此文件系統(tǒng)的存儲結(jié)構(gòu)和可靠性非常重要。常見的嵌入式文件系統(tǒng)包括JFFS2、ROMFS和znFAT等。
JFFS2使用日志技術(shù)保證了文件在線更新過程中元數(shù)據(jù)的一致性[7],但是實現(xiàn)復(fù)雜,需要在RAM中重新建立文件系統(tǒng)結(jié)構(gòu)本身,掛載時間長,需要的內(nèi)存資源大,不適合應(yīng)用在計算資源有限的星載設(shè)備系統(tǒng)上。
ROMFS是只讀文件系統(tǒng),文件以線性結(jié)構(gòu)順序存儲在存儲器中,支持目錄文件和符號鏈接,需要更新文件時,只能對整個文件系統(tǒng)進行修改,不符合星載軟件在軌維護需要減少數(shù)據(jù)上注量的要求。
znFAT是在FAT32 基礎(chǔ)上優(yōu)化的文件系統(tǒng),znFAT 超級塊中不僅記錄著存儲設(shè)備的類型、容量,還包括文件系統(tǒng)的卷標(biāo)、保留空間、每簇(文件系統(tǒng)存儲單位)大小、文件分配表個數(shù)和大小等重要參數(shù);文件/目錄項用來記錄文件和目錄的相關(guān)信息,類似于“索引”,可以通過信息查詢找到數(shù)據(jù)開始的位置;FAT表記錄了所有數(shù)據(jù)的鏈表式關(guān)系,通過FAT表可以查詢到數(shù)據(jù)存儲鏈表,找到完整的數(shù)據(jù)。znFAT實現(xiàn)簡單,增加了數(shù)據(jù)校驗和三模冗余功能,提高了數(shù)據(jù)的可靠性[8],適合應(yīng)用在星載軟件系統(tǒng)中。
圖2 引導(dǎo)配置文件數(shù)據(jù)結(jié)構(gòu)
采用文件系統(tǒng)存儲管理數(shù)據(jù),可在星上存儲多份星載應(yīng)用軟件映像,由引導(dǎo)軟件根據(jù)引導(dǎo)配置文件數(shù)據(jù)選擇加載需要的應(yīng)用軟件映像。星載軟件需要進行在軌整體升級時,在原應(yīng)用軟件運行的狀態(tài)下,接收地面上注的指令,在文件系統(tǒng)中創(chuàng)建保存新的星載軟件映像文件,修改引導(dǎo)配置文件,指示引導(dǎo)軟件下次啟動新版本的軟件映像。
星載計算機開始運行后,引導(dǎo)軟件讀取引導(dǎo)配置文件,獲取應(yīng)用軟件引導(dǎo)配置項,選擇默認(rèn)的應(yīng)用軟件版本進行加載。引導(dǎo)配置文件的結(jié)構(gòu)如圖2所示,包含默認(rèn)引導(dǎo)配置項索引和引導(dǎo)配置項列表。每個引導(dǎo)配置項包括需要加載的應(yīng)用軟件映像名稱、應(yīng)用軟件映像是否壓縮標(biāo)識、搬移到RAM區(qū)地址、搬移后長度、入口地址以及搬移后數(shù)據(jù)校驗和。默認(rèn)引導(dǎo)配置項索引指示默認(rèn)加載引導(dǎo)配置項列表中的第幾項。
引導(dǎo)軟件加載應(yīng)用程序流程如圖3所示。引導(dǎo)軟件根據(jù)引導(dǎo)配置文件將相應(yīng)的應(yīng)用軟件映像解壓或直接搬運到對應(yīng)的RAM區(qū),進行數(shù)據(jù)校驗,如果引導(dǎo)軟件在搬移應(yīng)用軟件映像后發(fā)現(xiàn)校驗數(shù)據(jù)不正確,則選擇引導(dǎo)配置列表中前一項嘗試進行加載。加載正常后,讀取補丁文件,獲取需要執(zhí)行的補丁指令,將補丁數(shù)據(jù)修改到對應(yīng)的RAM區(qū),完成應(yīng)用軟件的搬移和修改操作,最后跳到RAM區(qū)應(yīng)用軟件入口位置處運行。當(dāng)所有應(yīng)用軟件校驗異?;蛭募到y(tǒng)加載失敗時,引導(dǎo)軟件還需要完成基本的遙控遙測功能,從地面接收指令,修改RAM區(qū)數(shù)據(jù),完成應(yīng)用軟件在RAM中的運行維護,在該模式下與現(xiàn)有的在軌維護操作類似,但只用在存儲器嚴(yán)重?fù)p壞、文件系統(tǒng)崩潰的極端情況。
圖3 引導(dǎo)軟件加載應(yīng)用程序流程
配置數(shù)據(jù)修改是星載軟件在軌維護的一項重要內(nèi)容,通過使用文件系統(tǒng)配置數(shù)據(jù)與應(yīng)用程序分離存儲。需要時不必修改軟件邏輯功能,僅通過地面上注手段在軌修改配置信息文件,可實現(xiàn)在航天器正常運行狀態(tài)下對信息流進行動態(tài)重構(gòu)。
星載軟件初始化時,需要掛載文件系統(tǒng),通過文件名稱獲取配置數(shù)據(jù)內(nèi)容。對于系統(tǒng)在運行中需要頻繁使用的一些配置數(shù)據(jù),為避免每次從文件系統(tǒng)中讀取數(shù)據(jù)耗費時間,在內(nèi)存中申請緩沖區(qū)保存從文件中讀取的數(shù)據(jù),同時可能還需要根據(jù)配置數(shù)據(jù)組織運行時的數(shù)據(jù)結(jié)構(gòu)。當(dāng)航天器狀態(tài)發(fā)生變化,需求更新配置參數(shù)時,通過上注修改配置數(shù)據(jù)文件,星載軟件運行時使用的數(shù)據(jù)可能沒有更新,需要通過進行局部的數(shù)據(jù)初始化完成實時信息重構(gòu)。當(dāng)星載軟件再次重新運行進行初始化時,使用的配置數(shù)據(jù)即為新的內(nèi)容。
為避免軟件整體升級上注數(shù)據(jù)時間過長,采用在程序加載時自動打補丁的方式進行程序局部維護。補丁文件存儲了內(nèi)存修改指令,與傳統(tǒng)的在軌維護指令類似[9],用于改寫指定內(nèi)存區(qū)的數(shù)據(jù)。通過在空白區(qū)注入新的指令代碼,將舊代碼區(qū)的函數(shù)調(diào)用引向新代碼的方式,實現(xiàn)程序區(qū)的局部代碼更新。
傳統(tǒng)的在軌維護指令在星載軟件運行時接收執(zhí)行,作用范圍受限,某些系統(tǒng)初始化過程中一次性執(zhí)行的代碼無法通過該方式修改,并且系統(tǒng)復(fù)位重啟后需要地面重新上注。本方法采用在引導(dǎo)軟件加載應(yīng)用程序后執(zhí)行內(nèi)存修改指令,實現(xiàn)了修改范圍的全覆蓋以及補丁的持久保存。
由于補丁是直接修改內(nèi)存中的代碼映像數(shù)據(jù),一般針對某個特定的應(yīng)用軟件版本,所以補丁需要與特定的軟件版本綁定。當(dāng)引導(dǎo)軟件完成應(yīng)用軟件映像加載后,找到該映像名稱對應(yīng)文件夾下的所有補丁文件執(zhí)行內(nèi)存修改操作。
基于某遙感型號星載計算機平臺測試環(huán)境[10],對所提出的星載軟件在軌維護方案進行試驗,主要針對補丁大小、更新操作執(zhí)行情況和異常情況進行測試。
原始版本應(yīng)用軟件邏輯程序目標(biāo)代碼為150 KB,壓縮后為72 KB,配置數(shù)據(jù)文件大小為10 KB。進行3次修改,分別修改配置數(shù)據(jù)、程序局部修改和軟件映像整體升級。表2顯示了軟件維護的試驗結(jié)果,包括修改文件數(shù)量、修改內(nèi)容以及補丁大小。試驗結(jié)果表明,該方法的維護操作正確,更新結(jié)果能持久化保存,配置參數(shù)維護和局部維護的補丁數(shù)量遠(yuǎn)小于整體升級的補丁數(shù)量,整體升級補丁小于目標(biāo)碼大小。
表2 在軌維護應(yīng)用試驗結(jié)果
存儲器的數(shù)據(jù)錯誤由文件系統(tǒng)進行三模冗余校驗糾正,本試驗不再驗證。試驗采用直接修改應(yīng)用軟件映像校驗和的方式模擬軟件映像文件異常。試驗中將應(yīng)用軟件新版本中的校驗修改為異常值,復(fù)位后引導(dǎo)軟件將舊版本的應(yīng)用軟件啟動加載,表明在軟件更新異常時,系統(tǒng)能夠自動回退引導(dǎo)以前版本的應(yīng)用軟件。
參考文獻
[1] 張然峰,郝賢鵬,金龍旭,等.空間相機軟件在軌重注方法研究與實現(xiàn)[J].光機電信息,2011,28(6):30-34.
[2] 何熊文,孫勇.一種衛(wèi)星數(shù)管中心計算機軟件的工程實現(xiàn)[J].航天器工程,2007,16(5):47-53.
[3] 劉鑫,韋涌泉,馮國平,等.高分四號衛(wèi)星數(shù)管分系統(tǒng)設(shè)計及在軌驗證[J].航天器工程,2016,25(增刊1):93-98.
[4] 安軍社,劉艷秋,孫輝先.軟件的動態(tài)維護與實現(xiàn)[J].計算機工程,2003,29(2):238-239.
[5] 汪宏浩,王慧泉,金仲和.基于增量鏈接的可回滾星載軟件在軌更新方法[J].浙江大學(xué)學(xué)報:工學(xué)版,2015,49(4):724-731.
[6] 常為領(lǐng),云曉春,李超,等.無損壓縮算法LZSS的分塊性能研究[J].計算機研究與發(fā)展,2012(49):165-172.
[7] 顧寶根,顧喜梅.日志結(jié)構(gòu)的嵌入式文件系統(tǒng)研究[J].計算機工程與設(shè)計,2004,25(6):915-917.
[8] 賈露娟,李文新,夏加高,等.星載嵌入式容錯文件系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2015,25(10):49-53,58.
[9] 何熊文.一種通用遙控注入數(shù)據(jù)格式的設(shè)計與應(yīng)用[J].航天器工程,2008,17(1):94-99.
[10] 郭堅,付連芳,翟君武.一種星載軟件系統(tǒng)測試環(huán)境的設(shè)計[J].計算機測量與控制,2005,13(5):499-502.