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