,,
(北京空間飛行器總體設計部,北京 100094)
隨著航天器壽命的增長和任務難度的加大,星載軟件的復雜度越來越高,需要具備在軌重構和更新能力,以應對可能出現的任務擴展和軟件潛在缺陷[1]。星載軟件在軌維護是指地球站對航天器在軌飛行過程中所碰到的困難,包括飛行軟件在飛行過程中暴露缺陷的糾正。
星載軟件通常固化在只讀存儲器中,只具備有限的RAM區數據在軌維護能力[2],部分高軌長壽命航天器設計了獨立在軌維護模式[3],在處理器8位模式下,將上注的新程序寫到RAM區實現軟件整體升級維護。由于只能在RAM區進行數據更改,以上在軌維護方法存在掉電丟失的問題,并且在軟件整體升級過程中,星載系統處于在軌維護模式,不具備整星服務功能,存在潛在風險。
為實現星載軟件持久化的在軌維護,需要使用在線可編程器件,常用的有EEPROM和FLASH。參考文獻[4]提出了在可編程存儲器條件下基于VxWorks操作系統的在軌維護方案,可實現VxWorks下的目標碼持久化維護,但不具有通用性。參考文獻[5]提出了基于增量鏈接的星載軟件在軌更新方法,可實現通用系統下星載軟件的在軌維護操作,對空間環境中存儲器異常狀態下軟件升級問題以及星載軟件配置數據重構問題缺少考慮。
本文分析了近年來星載軟件在軌維護案例,提出了一種基于文件系統的星載軟件在軌維護方法,實現軟件映像可靠存儲、程序和配置數據分離、軟件整體升級可回退以及程序局部維護持久化,為長壽命航天器軟件在軌維護策略提供了參考。
不同于一般的地面系統軟件,星載軟件在軌維護具有較多的條件限制:星地測控時段短,通信速率小,要求在軌維護必須在有限的時間內完成;空間環境復雜,星載軟件可靠性要求高,需要應對可編程存儲器部分存儲單元數據反轉或失效的風險;關鍵星載軟件負責整星平臺熱控、電源等關鍵業務,要減少在軌維護期間系統服務的停止時間,維護失敗時應能及時回退到以前的版本。
表1列出了近年國內遙感衛星數管分系統軟件在軌維護的情況。測控圈次需求是依據在軌維護補丁數量和一個圈次內測控站能上注的指令條數計算而得。假設一次地面站測控8 min,每5 m上注一條在軌維護指令。

表1 星載軟件在軌維護案例
通過上表可以看出,星載軟件在軌維護的原因主要是設備參數調試優化和故障處理;軟件配置數據的更改占據在軌維護的大部分項目;多數在軌維護的補丁較少,能在一次地面站測控區內完成,但軟件整體維護的補丁較多,需要多次地面站測控上注。
針對星載軟件在軌維護特點,提出了基于文件系統的星載軟件在軌維護方法。如圖1所示,星載軟件系統由引導軟件、文件系統、應用軟件映像文件、配置數據文件和補丁文件組成。其中應用軟件、配置數據文件和補丁文件存在文件系統中。在此軟件結構劃分下,星載軟件在軌維護分為軟件整體升級、配置數據重構和程序局部維護三類。

圖1 基于文件系統的星載軟件系統結構
引導軟件映像直接存儲在存儲器中,系統上電后最先運行,完成系統初始化,加載文件系統,從文件系統中讀取引導配置項,選擇加載的應用軟件映像,加載執行補丁文件,完成應用軟件的啟動。
由于引導軟件是系統的入口程序,直接存儲在存儲器上,沒有冗余存儲措施,任何存儲單元的損壞都會導致系統失效,同時引導軟件功能固定,幾乎不需要在軌維護,因此引導軟件應固化在可靠性高的只讀存儲器中。
文件系統是存儲維護應用軟件映像、配置數據和補丁數據的載體。文件系統可屏蔽底層可編程存儲器的物理特性,提供高可靠的數據存儲和維護服務。
配置數據文件保存了星載軟件運行時所需要的參數信息,與星載應用軟件程序分開存儲管理,需要時不必修改軟件邏輯功能,僅通過地面上注手段在軌修改配置數據文件,可實時在航天器正常運行狀態下對信息流進行動態重構。
星載軟件映像文件是星載軟件的主體部分,被引導軟件搬移到RAM區運行。星載軟件映像一般比較大,采用壓縮存儲的方式[6],可顯著減少在軌維護時上注數據的時間。
補丁文件存儲了內存修改指令,在應用軟件映像搬移到RAM后,執行內存修改指令可以修改RAM的程序代碼,實現局部軟件持久化更新。
本方法中,所有的在軌維護操作均以修改文件系統中文件的形式實現,因此文件系統的存儲結構和可靠性非常重要。常見的嵌入式文件系統包括JFFS2、ROMFS和znFAT等。
JFFS2使用日志技術保證了文件在線更新過程中元數據的一致性[7],但是實現復雜,需要在RAM中重新建立文件系統結構本身,掛載時間長,需要的內存資源大,不適合應用在計算資源有限的星載設備系統上。
ROMFS是只讀文件系統,文件以線性結構順序存儲在存儲器中,支持目錄文件和符號鏈接,需要更新文件時,只能對整個文件系統進行修改,不符合星載軟件在軌維護需要減少數據上注量的要求。
znFAT是在FAT32 基礎上優化的文件系統,znFAT 超級塊中不僅記錄著存儲設備的類型、容量,還包括文件系統的卷標、保留空間、每簇(文件系統存儲單位)大小、文件分配表個數和大小等重要參數;文件/目錄項用來記錄文件和目錄的相關信息,類似于“索引”,可以通過信息查詢找到數據開始的位置;FAT表記錄了所有數據的鏈表式關系,通過FAT表可以查詢到數據存儲鏈表,找到完整的數據。znFAT實現簡單,增加了數據校驗和三模冗余功能,提高了數據的可靠性[8],適合應用在星載軟件系統中。

圖2 引導配置文件數據結構
采用文件系統存儲管理數據,可在星上存儲多份星載應用軟件映像,由引導軟件根據引導配置文件數據選擇加載需要的應用軟件映像。星載軟件需要進行在軌整體升級時,在原應用軟件運行的狀態下,接收地面上注的指令,在文件系統中創建保存新的星載軟件映像文件,修改引導配置文件,指示引導軟件下次啟動新版本的軟件映像。
星載計算機開始運行后,引導軟件讀取引導配置文件,獲取應用軟件引導配置項,選擇默認的應用軟件版本進行加載。引導配置文件的結構如圖2所示,包含默認引導配置項索引和引導配置項列表。每個引導配置項包括需要加載的應用軟件映像名稱、應用軟件映像是否壓縮標識、搬移到RAM區地址、搬移后長度、入口地址以及搬移后數據校驗和。默認引導配置項索引指示默認加載引導配置項列表中的第幾項。
引導軟件加載應用程序流程如圖3所示。引導軟件根據引導配置文件將相應的應用軟件映像解壓或直接搬運到對應的RAM區,進行數據校驗,如果引導軟件在搬移應用軟件映像后發現校驗數據不正確,則選擇引導配置列表中前一項嘗試進行加載。加載正常后,讀取補丁文件,獲取需要執行的補丁指令,將補丁數據修改到對應的RAM區,完成應用軟件的搬移和修改操作,最后跳到RAM區應用軟件入口位置處運行。當所有應用軟件校驗異常或文件系統加載失敗時,引導軟件還需要完成基本的遙控遙測功能,從地面接收指令,修改RAM區數據,完成應用軟件在RAM中的運行維護,在該模式下與現有的在軌維護操作類似,但只用在存儲器嚴重損壞、文件系統崩潰的極端情況。

圖3 引導軟件加載應用程序流程
配置數據修改是星載軟件在軌維護的一項重要內容,通過使用文件系統配置數據與應用程序分離存儲。需要時不必修改軟件邏輯功能,僅通過地面上注手段在軌修改配置信息文件,可實現在航天器正常運行狀態下對信息流進行動態重構。
星載軟件初始化時,需要掛載文件系統,通過文件名稱獲取配置數據內容。對于系統在運行中需要頻繁使用的一些配置數據,為避免每次從文件系統中讀取數據耗費時間,在內存中申請緩沖區保存從文件中讀取的數據,同時可能還需要根據配置數據組織運行時的數據結構。當航天器狀態發生變化,需求更新配置參數時,通過上注修改配置數據文件,星載軟件運行時使用的數據可能沒有更新,需要通過進行局部的數據初始化完成實時信息重構。當星載軟件再次重新運行進行初始化時,使用的配置數據即為新的內容。
為避免軟件整體升級上注數據時間過長,采用在程序加載時自動打補丁的方式進行程序局部維護。補丁文件存儲了內存修改指令,與傳統的在軌維護指令類似[9],用于改寫指定內存區的數據。通過在空白區注入新的指令代碼,將舊代碼區的函數調用引向新代碼的方式,實現程序區的局部代碼更新。
傳統的在軌維護指令在星載軟件運行時接收執行,作用范圍受限,某些系統初始化過程中一次性執行的代碼無法通過該方式修改,并且系統復位重啟后需要地面重新上注。本方法采用在引導軟件加載應用程序后執行內存修改指令,實現了修改范圍的全覆蓋以及補丁的持久保存。
由于補丁是直接修改內存中的代碼映像數據,一般針對某個特定的應用軟件版本,所以補丁需要與特定的軟件版本綁定。當引導軟件完成應用軟件映像加載后,找到該映像名稱對應文件夾下的所有補丁文件執行內存修改操作。
基于某遙感型號星載計算機平臺測試環境[10],對所提出的星載軟件在軌維護方案進行試驗,主要針對補丁大小、更新操作執行情況和異常情況進行測試。
原始版本應用軟件邏輯程序目標代碼為150 KB,壓縮后為72 KB,配置數據文件大小為10 KB。進行3次修改,分別修改配置數據、程序局部修改和軟件映像整體升級。表2顯示了軟件維護的試驗結果,包括修改文件數量、修改內容以及補丁大小。試驗結果表明,該方法的維護操作正確,更新結果能持久化保存,配置參數維護和局部維護的補丁數量遠小于整體升級的補丁數量,整體升級補丁小于目標碼大小。

表2 在軌維護應用試驗結果
存儲器的數據錯誤由文件系統進行三模冗余校驗糾正,本試驗不再驗證。試驗采用直接修改應用軟件映像校驗和的方式模擬軟件映像文件異常。試驗中將應用軟件新版本中的校驗修改為異常值,復位后引導軟件將舊版本的應用軟件啟動加載,表明在軟件更新異常時,系統能夠自動回退引導以前版本的應用軟件。

參考文獻
[1] 張然峰,郝賢鵬,金龍旭,等.空間相機軟件在軌重注方法研究與實現[J].光機電信息,2011,28(6):30-34.
[2] 何熊文,孫勇.一種衛星數管中心計算機軟件的工程實現[J].航天器工程,2007,16(5):47-53.
[3] 劉鑫,韋涌泉,馮國平,等.高分四號衛星數管分系統設計及在軌驗證[J].航天器工程,2016,25(增刊1):93-98.
[4] 安軍社,劉艷秋,孫輝先.軟件的動態維護與實現[J].計算機工程,2003,29(2):238-239.
[5] 汪宏浩,王慧泉,金仲和.基于增量鏈接的可回滾星載軟件在軌更新方法[J].浙江大學學報:工學版,2015,49(4):724-731.
[6] 常為領,云曉春,李超,等.無損壓縮算法LZSS的分塊性能研究[J].計算機研究與發展,2012(49):165-172.
[7] 顧寶根,顧喜梅.日志結構的嵌入式文件系統研究[J].計算機工程與設計,2004,25(6):915-917.
[8] 賈露娟,李文新,夏加高,等.星載嵌入式容錯文件系統的設計與實現[J].計算機技術與發展,2015,25(10):49-53,58.
[9] 何熊文.一種通用遙控注入數據格式的設計與應用[J].航天器工程,2008,17(1):94-99.
[10] 郭堅,付連芳,翟君武.一種星載軟件系統測試環境的設計[J].計算機測量與控制,2005,13(5):499-502.