呂 敏,張國柱,董晉芳,陳曉強,曹 斌
(1.上海航天控制技術研究所,上海 201109;2.上海市空間智能控制技術重點實驗室,上海 201109;3.上海航天電子技術研究所,上海 201109)
飛行器控制系統(tǒng)嵌入式軟件一般由內(nèi)核軟件(BIOS軟件)和載荷軟件兩部分組成。BIOS軟件作為嵌入式系統(tǒng)底層的專用內(nèi)核軟件,與系統(tǒng)硬件資源緊密相關,主要實現(xiàn)上電自檢、系統(tǒng)初始化、載荷軟件引導等功能;載荷軟件實現(xiàn)各種用戶應用功能,如空間自主飛行器控制系統(tǒng)復雜的姿態(tài)、軌道控制。一方面,單粒子效應等空間環(huán)境的影響會對飛行器軟件存儲器中的代碼和數(shù)據(jù)造成瞬時或永久性的損壞,甚至導致系統(tǒng)癱瘓,因此系統(tǒng)必須具備對載荷軟件的遠程修復能力;另一方面,通過對載荷軟件的遠程重載,可在軌實現(xiàn)對軟件缺陷的修改、系統(tǒng)功能的完善和擴充。內(nèi)核軟件對載荷軟件的遠程重載成為提高航天器軟件的可靠性、可維護性和系統(tǒng)功能可擴充性的一項重要技術途徑。
目前,多數(shù)星載計算機軟件以模塊為基本替換單位進行在軌編程,需在原始載荷軟件中建立子函數(shù)地址映射表或在函數(shù)入口預留后門,通過修改映射表或后門函數(shù)實現(xiàn)模塊替換,只能對預先指定的模塊實現(xiàn)替換,不能實現(xiàn)任意模塊的在軌修改[1-2]。文獻[1]設計的方案僅能實現(xiàn)70個指定模塊的在軌編程。文獻[3]設計了一種通過內(nèi)核引導程序選擇加載PROM中的基本系統(tǒng)或Flash中的用戶程序,預先指定可在軌編程的模塊需在鏈接命令文件中分配固定的裝載地址和運行地址,且考慮模塊更新后大小發(fā)生會變化,需在函數(shù)后面人為預留一定的空間余量,多重的約束導致實際操作性不強且對空間資源造成了不必要的浪費。本文基于安全內(nèi)核的高可靠嵌入式軟件架構(gòu),對一種載荷軟件可重構(gòu)的空間自主飛行器內(nèi)核軟件設計進行了研究。
BIOS是指基本輸入輸出系統(tǒng),通常固化在只讀存儲器ROM中,直接對計算機系統(tǒng)中的輸入、輸出設備進行設備級/硬件級的控制,是連接應用程序與硬件設備的樞紐。BIOS軟件在嵌入式軟件系統(tǒng)中的層次關系如圖1所示[4]。
圖1 軟件層次結(jié)構(gòu)Fig.1 Software Frame
一般系統(tǒng)BIOS中基本內(nèi)核軟件的功能有開機自檢(POST)過程、內(nèi)存初始化、綁定異常處理、硬件初始化、軟件初始化、載荷軟件引導和調(diào)試功能[4]??臻g飛行控制系統(tǒng)對BIOS程序提出了高可靠性和可重載性的更高要求。
隨著空間自主飛行器控制系統(tǒng)組成及功能的日益復雜,先進控制理論不斷用于在軌應用,控制系統(tǒng)載荷軟件規(guī)模越來越龐大,傳統(tǒng)PROM存儲介質(zhì)加SRAM運行介質(zhì)的模式受器件規(guī)模的約束,已無法滿足用戶的需求??臻g飛行器在軌運行期間,惡劣的空間環(huán)境會造成內(nèi)存空間頻繁發(fā)生瞬時或永久性的故障。因此需要一種既能滿足日趨龐大的載荷程序存儲,又能保證存儲、運行高可靠性的嵌入式系統(tǒng)軟、硬件架構(gòu),以滿足空間應用的需求。
空間計算機采用PROM+EEPROM+SRAM的配置,在高可靠PROM中固化BIOS軟件,擴展大容量的EEPROM或FLASH存儲器作為載荷軟件的存儲介質(zhì),SRAM作為程序運行空間。
為提高載荷軟件存儲的可靠性,EEPROM中的應用軟件備份3份,采用標識字+應用軟件的存儲方式,標識字由應用軟件長度和8位CRC校驗值組成。軟件存儲空間分配如圖2所示。
圖2 軟件存儲空間分配Fig.2 Memory resource configure
BIOS程序除基本內(nèi)核軟件的功能外,還具備系統(tǒng)安全模式和調(diào)試功能,與應用軟件共同構(gòu)成了獨立的多源載荷軟件。內(nèi)核軟件可根據(jù)系統(tǒng)運行的不同情況,從多源載荷軟件中選擇所需的軟件加載至SRAM中運行。
內(nèi)核軟件判斷不同復位原因進入不同的工作模式,流程如圖3所示。
系統(tǒng)上電或冷復位運行后,內(nèi)核軟件優(yōu)先按3取2方式將應用軟件搬到SRAM載荷軟件裝載區(qū)1中并進行CRC校驗,搬場成功并校驗正確后跳轉(zhuǎn)PC指針執(zhí)行載荷軟件;否則,依次對第1份、第2份、第3份載荷軟件進行搬場和校驗。
內(nèi)核軟件判斷計算機系統(tǒng)0.5h內(nèi)非上電冷復位次數(shù)大于3次時,則判定為不可恢復故障。內(nèi)核軟件將最小安全模式載荷軟件裝載到SRAM中有效載荷數(shù)據(jù)區(qū)2中,進入安全模式運行。安全模式下,系統(tǒng)除完成飛行器對日定向功能外,還可接收地面注入的新載荷軟件,將載荷軟件寫入SRAM中,選擇執(zhí)行注入的新載荷軟件或?qū)⑵涔袒贓EPROM中,實現(xiàn)軟件在軌版本固化升級。
地面軟件調(diào)試及測試階段,需實現(xiàn)計算機軟件在線加載、調(diào)試、固化,內(nèi)核軟件判斷復位原因為調(diào)試口復位時,將調(diào)試程序裝載到SRAM中有效載荷數(shù)據(jù)區(qū)2中。在調(diào)試模式下,終端控制臺提供人機交互界面,通過調(diào)試串口通信信息,實現(xiàn)軟件加載、調(diào)試和固化等功能。
圖3 內(nèi)核軟件對多源載荷軟件的配置和運行管理流程Fig.3 Payload software flowchart and management of Kernel with running flow
系統(tǒng)載荷軟件搬場失敗或0.5h內(nèi)出現(xiàn)3次冷復位,BIOS程序啟動安全模式軟件搬場,將安全模式軟件裝載到載荷軟件裝載區(qū)2運行。安全模式軟件采用主任務+背景任務的工作方式,主任務完成系統(tǒng)太陽定向功能,采用陀螺+太敏+磁強計+磁力矩器測控方式,保障軟件重載過程中飛行器基本的姿態(tài)、能源安全。主任務太陽定向軟件運行環(huán)境如圖4所示。背景任務進行計算機系統(tǒng)安全自檢、載荷軟件在軌重載處理。
軟件嵌入是將實現(xiàn)某種功能的代碼嵌入已有的軟件中,通過對宿主文件的修改實現(xiàn)病毒入侵或bug修復,軟件嵌入的方法包括源碼級和機器碼級的修改。本文采用源碼+目標碼的軟件嵌入技術和函數(shù)地址重映射的方式,實現(xiàn)對完整載荷軟件、任意軟件模塊或任意地址目標碼的多級靈活修改。
圖4 太陽定向軟件運行環(huán)境Fig.4 Running environment of energy software
內(nèi)核軟件對重載后載荷軟件可選擇直接在SRAM中運行或固化至EEPROM兩種模式。載荷軟件重載流程如圖5所示。
圖5 載荷軟件重載流程Fig.5 Over loading flowchart of payload software
首先系統(tǒng)運行于最小安全模式下,將接收的上注數(shù)據(jù)存入載荷軟件裝載區(qū)1,內(nèi)核軟件根據(jù)上注信息中的標識字選擇重載模式。若選擇直接運行模式,采用函數(shù)地址重映射在軌編程技術,在安全模式軟件預留的“后門”函數(shù)中嵌入跳轉(zhuǎn)指令目標碼,使PC指針跳轉(zhuǎn)執(zhí)行載荷軟件裝載區(qū)1中重載后的載荷軟件。若選擇EEPROM固化模式,則先進行在軌編程數(shù)據(jù)CRC校驗,校驗正確后通過對EEPROM存儲芯片進行開鎖、寫入操作,依次完成3份載荷程序的燒寫。最后通過遙控指令對計算機進行斷電、上電操作,內(nèi)核程序?qū)EPROM中已更新的載荷程序加載至SRAM中后自主運行。
當部分軟件功能需在軌修改時,需對個別軟件模塊或目標碼進行重載。為解決傳統(tǒng)模塊級在軌編程方案需預先指定模塊、固定地址或預留空間余量的限制,采用函數(shù)地址重映射在軌編程技術,實現(xiàn)任意模塊靈活在軌編程。將新程序模塊和跳轉(zhuǎn)地址表上注到在軌編程區(qū),再通過地址表新舊模塊映射關系,將舊函數(shù)入口的目標碼修改為跳轉(zhuǎn)指令,將程序執(zhí)行路徑映射到在軌編程區(qū)的新模塊入口處,實現(xiàn)了模塊替換。模塊級在軌編程原理如圖6所示。
圖6 軟件模塊在軌編程Fig.6 Over loading flow of software module
進一步將函數(shù)地址重映射技術推廣到目標碼級,當某修改僅涉及到個別語句時,對任意內(nèi)存地址目標碼進行直接替換,實現(xiàn)以目標碼為最小單位的靈活修改。
以SPARC TSC695F處理器星載計算機C語言內(nèi)核軟件為例,討論其實現(xiàn)方法。
上電或復位后,入口引導程序通過對復位原因status的判斷,選擇裝載應用程序、安全模式程序或調(diào)試程序運行。
包括地面編程數(shù)據(jù)包生成和飛行器內(nèi)核軟件重載實現(xiàn)兩部分。
3.2.1 地面編程數(shù)據(jù)包生成
根據(jù)上述的在載荷軟件重載原理,先要由地面工具軟件生成所需的在軌編程數(shù)據(jù)包。該工具軟件通過導入載荷軟件編譯生成的可執(zhí)行程序,根據(jù)通信幀格式生成編程數(shù)據(jù)包、CRC校驗信息。編程數(shù)據(jù)包由編程信息包和跳轉(zhuǎn)指令包構(gòu)成,包含編程模式、嵌入點地址、CRC校驗值等關鍵信息。
3.2.2 內(nèi)核軟件重載實現(xiàn)
當系統(tǒng)運行于最小安全模式時,通過測控通信接口接收地面上注的在軌編程數(shù)據(jù),并對數(shù)據(jù)包信息進行解析。
上注數(shù)據(jù)內(nèi)容包括:新的載荷軟件數(shù)據(jù)包、編程信息包、跳轉(zhuǎn)指令包。其中:編程信息包結(jié)構(gòu)體,用于背景任務中判斷編程模式、CRC校驗值等信息;跳轉(zhuǎn)指令包結(jié)構(gòu)體,包含了嵌入指令嵌入地址、嵌入指令等信息。
在背景任務中判斷重載模式,并判斷校驗正確性。
在直接運行模式下,RemapProgramTable函數(shù)將后門函數(shù)onlineProgramEx中的3句Nop指令替換成跳轉(zhuǎn)至新注入載荷軟件入口地址的目標碼,實現(xiàn)SRAM中完整載荷程序的重載,或?qū)⒃驾d荷程序中某模塊起始地址替換為跳轉(zhuǎn)至上注新模塊的機器碼,實現(xiàn)模塊級替換,或直接對某一地址的機器碼進行替換。
在固化模式下,將新上注的載荷程序依次燒寫3份至EEPROM中,實現(xiàn)載荷程序在軌升級固化。
本文提出了一種基于安全內(nèi)核的高可靠嵌入式軟件架構(gòu),通過內(nèi)核軟件實現(xiàn)用戶程序的可靠加載,并且在用戶程序完全失效的極端情況下,內(nèi)核引導程序自動加載PROM中的最小安全系統(tǒng),保證飛行器的姿態(tài)、能源安全,通過軟件嵌入技術,突破了預先指定模塊、固定模塊地址或預留空間余量等諸多限制,采用函數(shù)地址重映射技術,實現(xiàn)完整載荷程序、任意模塊或任意地址機器碼的多級靈活替換,并可選擇將重載后的載荷軟件在EEPROM中固化,實現(xiàn)載荷軟件在軌升級固化[5]。文中基于SPARC處理器的星載計算機設計已經(jīng)實現(xiàn),也可用于其他架構(gòu)的嵌入式計算機中[6]。該設計方法已成功應用于某航天器的控制系統(tǒng)并經(jīng)過了在軌驗證。
[1] 朱 虹,王海燕.一種星載軟件在軌編程功能的設計和實現(xiàn)技術[J].上海航天,2004,21(1):26-31.
[2] 郭 勇,朱宏明,賀彥博.基于ADA語言的星載軟件在軌編程技術研究[J].電腦知識與技術,2008(34):1641-1644.
[3] 李彥斌,吉 峰,黃 勇.一種星載DSP軟件的在軌編程方法[J].制導與引信,2011,32(4):37-41.
[4] 盧俊玲.嵌入式系統(tǒng)內(nèi)核軟件研究[D].西安:西北工業(yè)大學,2003.
[5] 王 靜.軟件智能嵌入技術的研究及其安全應用[D].廣州:廣東工業(yè)大學,2007.
[6] WEI Xu,PIAO Yong-jie.Bootstrap loader design of aerospace payload controller based on TSC695F[C]//2010Second International Conference on Computational Intelligence and Natural Computing (CINC).Wuhan:ISEC,2010:60-64.