汪宏浩,王慧泉,金仲和
(浙江大學(xué) 微小衛(wèi)星研究中心,浙江 杭州310027)
早期星載軟件通常是固化的,只有部分長壽命航天器有軟件在軌更新功能[1-2].隨著航天技術(shù)的發(fā)展,星載軟件復(fù)雜度越來越高,存在缺陷的可能性越來越大[3],這對于功能密度非常高的皮衛(wèi)星尤為突出.因此,需要為星載軟件提供在軌更新功能,修復(fù)在軌故障,延長衛(wèi)星壽命[4-5].此外,在衛(wèi)星壽命末期通過軟件在軌更新可以擴(kuò)展衛(wèi)星功能,對新任務(wù)進(jìn)行在軌試驗[6].
與地面系統(tǒng)相比,星載軟件在軌更新面臨諸多挑戰(zhàn):如星地鏈路通信速率?。?]、通信時間有限,必須減少更新上注數(shù)據(jù)量;星載計算機(jī)的資源有限[8],且須持續(xù)提供服務(wù),因此不能執(zhí)行復(fù)雜的更新算法,要減少停機(jī)時間;衛(wèi)星在軌運(yùn)行時無法進(jìn)行人工維護(hù),而軟件在軌更新對衛(wèi)星穩(wěn)定運(yùn)行有影響[9],因此需要保證軟件在軌更新過程的可靠性,使之具有回滾到更新前穩(wěn)定狀態(tài)的能力;為了修復(fù)未知缺陷,按需完成新任務(wù),要擴(kuò)大軟件更新范圍,保證在軌更新的靈活性.地面系統(tǒng)軟件動態(tài)更新技術(shù)[10-13]旨在降低停機(jī)時間,更新復(fù)雜度和上注數(shù)據(jù)量均較大,需要復(fù)雜的操作系統(tǒng)支持,因此不適用于星載軟件更新.
目前也有對星載軟件在軌更新的相關(guān)研究.如將完整星載軟件上注至衛(wèi)星,重啟系統(tǒng)以完成更新[14-15],這類方法對星上軟件無特殊要求,可以任意擴(kuò)充軟件功能,但更新數(shù)據(jù)量大,會長時間占用遙控通道,且重啟會造成星上軟件中斷時間長.李磊霞等[6,16-17]將軟件劃分成多個模塊,利用操作系統(tǒng)加載技術(shù)將修改過的模塊作為補(bǔ)丁替換原模塊,達(dá)到更新的目的.這類方法可以顯著地減少上注數(shù)據(jù)量,降低遙控通道占用時間,但需要星載操作系統(tǒng)有模塊加載功能,且需預(yù)先決定模塊可否更新,降低了更新操作的靈活性.
軟件更新需要對舊代碼進(jìn)行修改得到新代碼,編譯生成二進(jìn)制目標(biāo)代碼并上注至衛(wèi)星.為了避免上注數(shù)據(jù)量過大,可將新舊版本目標(biāo)代碼的差異部分作為上注補(bǔ)丁,但源代碼的一個小改動會使得目標(biāo)代碼變動較大[18],導(dǎo)致上注數(shù)據(jù)量過大.Kiyohara等[19-21]研究對差異部分壓縮的算法,但解壓縮算法較復(fù)雜,不適用于星載計算機(jī).增量鏈接是編譯器為提高鏈接速度提供的一種優(yōu)化功能,目前大多數(shù)編譯器都已實現(xiàn)了該功能[22].增量鏈接可以使編譯器僅重排修改過的函數(shù)地址,而未修改函數(shù)的地址保持不變,從而降低軟件修改前、后內(nèi)存空間布局的差異.利用這一特性,提取修改前、后內(nèi)存空間差異部分制作補(bǔ)丁,星上根據(jù)補(bǔ)丁直接對原軟件內(nèi)存空間進(jìn)行修改,無需重啟即可完成軟件在軌更新操作.
基于上述特性,結(jié)合某型號皮衛(wèi)星的任務(wù)需求,本文提出一種無需重啟、上注數(shù)據(jù)量小、可以任意修改或增減軟件功能,并可使軟件回滾至更新前狀態(tài)的星載軟件在軌更新方法.
硬件平臺采用TI的C6000系列DSP作為中央處理器.該處理器包含定時器和DMA 模塊.為DSP配有2MB SDRAM 擴(kuò)展內(nèi)存,2 GB NAND Flash擴(kuò)展外存,使用FPGA 實現(xiàn)看門狗和邏輯資源擴(kuò)展.軟件存儲于NAND Flash 中,運(yùn)行時被加載到SDRAM 中.
為了實現(xiàn)在軌更新,將星載軟件分為監(jiān)測程序和業(yè)務(wù)邏輯程序兩部分.監(jiān)測程序包含保證系統(tǒng)正常運(yùn)行的硬件驅(qū)動程序(即驅(qū)動DSP、SDRAM、NAND Flash和FPGA 的程序)和負(fù)責(zé)實施更新操作和監(jiān)控的模塊,監(jiān)測程序不能被更新;業(yè)務(wù)邏輯程序用于實現(xiàn)衛(wèi)星的各項功能,如星務(wù)管理、電源管理、姿態(tài)控制運(yùn)算等,該部分可以更新.具體結(jié)構(gòu)如圖1所示.
系統(tǒng)上電時監(jiān)測程序首先自舉加載,然后初始化DSP、FPGA、SDRAM 和NAND Flash,保證系統(tǒng)正常運(yùn)行,接下來由更新操作模塊加載業(yè)務(wù)邏輯程序,執(zhí)行衛(wèi)星的各項功能.在業(yè)務(wù)邏輯程序加載后,監(jiān)測程序仍定時運(yùn)行,用于負(fù)責(zé)業(yè)務(wù)邏輯程序的在軌更新.
為了保證監(jiān)測程序不被更新,鏈接階段將監(jiān)測程序和業(yè)務(wù)邏輯程序置于不同的內(nèi)存空間,實現(xiàn)物理隔離.監(jiān)測程序僅對業(yè)務(wù)邏輯程序所在的內(nèi)存空間實施更新操作.
圖1 星載軟件結(jié)構(gòu)劃分Fig.1 On-board software structure design
一次完整更新過程如圖2所示.首先在地面完成補(bǔ)丁制作;然后通過地面站將補(bǔ)丁上傳至衛(wèi)星,衛(wèi)星解析和校驗補(bǔ)??;最后根據(jù)補(bǔ)丁信息對星上軟件進(jìn)行動態(tài)修改.補(bǔ)丁分為2類,即更新補(bǔ)丁和回滾補(bǔ)丁,分別用于在軌更新軟件和使軟件回滾至更新前的狀態(tài).
首先在地面上對舊版本業(yè)務(wù)邏輯代碼(以下簡稱舊版本代碼)進(jìn)行修改得到新版本代碼;然后通過調(diào)試和測試保證新版本代碼可靠性,代碼編譯過程中采用增量鏈接形式,最后生成新版本代碼的目標(biāo)文件.
圖2 軟件在軌更新過程Fig.2 Process of on-board software upgrade
修改代碼可以歸納為修改函數(shù)、修改全局或靜態(tài)變量和修改復(fù)合類型(如結(jié)構(gòu)體、共用體等),這些修改最終影響內(nèi)存空間.由于靜態(tài)變量和全局變量位于相同的內(nèi)存空間,修改靜態(tài)和全局變量統(tǒng)稱為修改變量.修改函數(shù)影響內(nèi)存空間的.text段,修改變量會影響內(nèi)存空間的.data段和.bss段.由于復(fù)合類型信息編譯后不保存至目標(biāo)文件,修改復(fù)合類型會影響使用復(fù)合類型定義的變量的大小以及函數(shù)對這些變量的解析,因此修改復(fù)合類型可以歸結(jié)為修改函數(shù)或變量.在更新補(bǔ)丁制作過程中,須考慮代碼修改后函數(shù)和變量在內(nèi)存空間的變化,根據(jù)變化信息制作更新補(bǔ)丁,用于星上軟件的動態(tài)修改.
下面舉例說明,假設(shè)舊版本代碼包含一組函數(shù)F={f1,f2,f3}和一組變量V={v1,v2}.其中f2調(diào)用f1、f3,f3調(diào)用f1;f1使用v2,f2、f3使用v1.為方便描述,令b(x)表示x 的目標(biāo)代碼,s(x)表示x的大小,a(x)表示x 的地址.函數(shù)f 被放置在.text段.若變量v 未初始化,則會放置在.bss段;若v 初始化,則放置在.data段.為了簡化監(jiān)測程序更新操作,強(qiáng)制要求初始化每個變量v.這樣舊版本代碼編譯后,所有的b(f)緊挨著放置在.text段中,所有的b(v)緊挨著放置在.data段中.
首先考慮對修改函數(shù)造成的內(nèi)存空間變化.修改函數(shù)可以分為修改現(xiàn)有函數(shù)、引入新增函數(shù)、刪除現(xiàn)有函數(shù)3種情況.下面舉例說明增量鏈接情況下修改函數(shù)造成的內(nèi)存空間變化情況.
當(dāng)修改現(xiàn)有函數(shù)時,設(shè)修改函數(shù)f1得到f′1,s(b(f′1))可能出現(xiàn)如下情況.
當(dāng)s(b(f′1))≤s(b(f1))時,b(f′1)仍放置于b(f1)空間內(nèi),增量鏈接無需分配新地址,即a(f1′)=a(f1).多余的內(nèi)存空間記為空閑空間.
當(dāng)s(b(f′1))>s(b(f1))時,b(f′1)無法放置于b(f1)的空間內(nèi),增量鏈接為f′1分配新的地址,即把b(f′1)置于新空閑空間中.由于a(f′1)≠a(f1),而f2和f3調(diào)用f′1,需要對f2和f3中調(diào)用f′1的地址作相應(yīng)修改.原有f1的內(nèi)存空間記為空閑空間.上述函數(shù)內(nèi)存空間的變化如圖3所示.
新增函數(shù)時,假設(shè)新增了函數(shù)f4,且被f2、f3調(diào)用f4,由于f4是新引入的,因此f2、f3中須加入對f4的調(diào)用語句,從而導(dǎo)致f2、f3的內(nèi)存空間發(fā)生變化.f2、f3的內(nèi)存空間按照圖3中的增量鏈接情形變化,而f4被分配新的內(nèi)存地址,b(f4)被放置在空閑空間中.
當(dāng)刪除現(xiàn)有函數(shù)時,假設(shè)刪除了函數(shù)f1,由于f1被f2、f3調(diào)用,需 要 在f2、f3中 刪 除 調(diào) 用f1的語句,從而導(dǎo)致f2、f3的內(nèi)存空間發(fā)生變化.f2、f3的內(nèi)存空間按照圖3的情形變化,而b(f1)所在的空間記為空閑空間.
考慮修改變量造成的內(nèi)存空間變化.修改變量可以分為變量值修改、變量類型修改、引入新變量、刪除現(xiàn)有變量4種情況.變量值修改只修改變量內(nèi)存空間內(nèi)容,不會影響內(nèi)存空間的布局,而其他3種情況可能會影響內(nèi)存空間的布局.
當(dāng)修改變量值時,設(shè)修改v1的值得到v′1,由于v1的類型不變,則其大小不會改變,無需為v′1分配新的地址,即有a(v′1)=a(v1)和s(v′1)=s(v1),內(nèi)存中只有b(a(v1))被修改為b(a(v′1)).
當(dāng)修改變量類型時,設(shè)修改v1的類型得到v′1,不同類型的大小可能不一樣,因此會出現(xiàn)如下情況.
當(dāng)s(b(v′1))≤s(b(v1))時,b(v′1)仍置于b(v1)空間中,增量鏈接無需為v′1分配新地址,即a(v′1)=a(v1).多 余 的 內(nèi) 存 空 間(大 小 為s(b(v1))-s(b(v′1)))記為空閑空間.
當(dāng)s(b(v′1))>s(b(v1))時,b(v′1)無 法 置 于b(v1)的空間內(nèi),增量鏈接為v′1分配新的地址,即把b(v′1)放置于新空閑空間中.由于f2和f3使用v′1,需要將f2和f3中v′1的地址改為a(v′1).原v1的內(nèi)存空間(大小為s(b(v1)))記為空閑空間.
上述變量內(nèi)存空間的變化如圖4所示.
當(dāng)新增變量時,設(shè)新增了變量v3,且f2、f3使用了v3;需要在f2、f3中加入使用v3的語句,從而導(dǎo)致f2、f3的內(nèi) 存 空 間 發(fā) 生 變 化.f2、f3的 內(nèi) 存 空間按照圖3 的情形變化.v3被分配新內(nèi)存地址,b(v3)被放置在空閑空間中.
圖3 增量鏈接下函數(shù)內(nèi)存空間的變化Fig.3 Function memory space change under incremental linking
圖4 增量鏈接下變量內(nèi)存空間的變化Fig.4 Function memory space change under incremental linking
當(dāng)刪除現(xiàn)有變量時,設(shè)刪除了現(xiàn)有變量v1,由于v1被f2、f3使用,需要刪除f2、f3中使用v1的語句,從而導(dǎo)致f2、f3的內(nèi)存空間發(fā)生變化.f2、f3的內(nèi)存空間按照圖3的情形變化.b(v1)所在的空間記為空閑空間.
最后考慮復(fù)合類型定義修改導(dǎo)致內(nèi)存空間變化的情況.修改復(fù)合類型會影響到使用復(fù)合類型定義的變量的大小以及函數(shù)對這些變量的解析,因此修改復(fù)合類型相當(dāng)于修改函數(shù)和修改變量,只需找出受影響的函數(shù)和變量,再按照對函數(shù)的修改和對變量的修改的處理方式進(jìn)行即可.
上面分析了增量鏈接情況下對修改函數(shù)和變量造成的內(nèi)存空間變化,而星上軟件動態(tài)修改的本質(zhì)是將星上軟件的內(nèi)存空間更改成地面修改后的軟件的內(nèi)存空間.因此,補(bǔ)丁需要包含代碼修改前、后的內(nèi)存空間的變化信息.上述變化可以用以下2類操作描述.
1)刪除操作:Remove(起始地址,大?。瑒h除操作后的空間記為無效.
2)寫入操作:Write(起始地址,大小,二進(jìn)制內(nèi)容),寫入操作后的空間記為占用.
例如圖3(a)~(c)的內(nèi)存空間變化可以描述如下.
1)Remove(0xC1312311,0x73):刪 除 以0xC1312311為首地址的原有函數(shù)f1的目標(biāo)代碼b(f1).
2)Write(0xC13124A9,0x91,b(f′1)):將b(f′1)置于以0xC13124A9為首地址的空閑空間內(nèi).
3)Remove(0xC1312390,0x4):刪除f2中調(diào)用f1的地址.
4)Write(0xC1312390,0x4,0xC13123A9):增加f2中調(diào)用f′1的地址.
5)Remove(0xC1312424,0x4):刪除f3中調(diào)用f1的地址.
6)Write(0xC1312424,0x4,0xC13123A9):增加f3中調(diào)用f′1的地址.
更新補(bǔ)丁中只需包含上述操作信息,星上監(jiān)測程序收到補(bǔ)丁后按照上述操作修改內(nèi)存,即可完成更新.一個更新補(bǔ)丁中可以包含多個函數(shù)、變量以及復(fù)合類型的修改,因此會包含多個Remove和Write操作.為了減小更新補(bǔ)丁的大小,將所有的Remove和Write操作放置在一起,為了方便解析以及保證可靠性,為Remove和Write操作的數(shù)據(jù)加入標(biāo)識頭和標(biāo)識尾以及CRC校驗.所設(shè)計的完整更新補(bǔ)丁的結(jié)構(gòu)如圖5所示.
在圖5 的更新補(bǔ)丁中,有一組包含m 個Remove操作的數(shù)據(jù)占用6+6m 字節(jié),一組包含n 個Write操作的數(shù)據(jù)占用6+(6+)n 字節(jié),為二進(jìn)制目標(biāo)碼的平均占用字節(jié)數(shù).因此,一個更新補(bǔ)丁占用12+6m+(6+k)n字節(jié).
圖5 完整更新補(bǔ)丁結(jié)構(gòu)Fig.5 Structure of updating patch
在具體實施過程中,利用編譯器前端識別出所有修改過的函數(shù)、變量和自定義類型的函數(shù)調(diào)用圖(Call Graph),可以得到受影響的函數(shù)和變量的符號;利用這些符號,依照ELF 文件格式[23],從可執(zhí)行文件中抽取出每個受影響的函數(shù)和變量的二進(jìn)制目標(biāo)代碼;將這些代碼與原目標(biāo)代碼進(jìn)行對比,可以獲取更新補(bǔ)丁中所需要的信息.
回滾操作所做的是更新操作的逆操作,即修改內(nèi)存空間至最近一次更新前的狀態(tài),因此回滾補(bǔ)丁只需包含一個控制命令,即可以設(shè)計成衛(wèi)星的一個遙控指令.遙控指令占用10個字節(jié),具體的遙控指令設(shè)計見文獻(xiàn)[7].
由于更新補(bǔ)丁包含大量數(shù)據(jù)塊,需要通過地面站以注入數(shù)據(jù)的方式上注至衛(wèi)星.為了保證安全性和可靠性,需要約定數(shù)據(jù)幀格式[24].
我國主要采用PCM 遙控標(biāo)準(zhǔn),上行碼速率一般為2 000bit/s[7,24],所以設(shè)計的注入數(shù)據(jù)幀長為2 000/8=256字節(jié).一個補(bǔ)丁可能需要多個數(shù)據(jù)幀才能上注完畢,為了保證星上監(jiān)測程序可以按順序還原補(bǔ)丁,在數(shù)據(jù)幀格式中加入分組數(shù)和分組編碼.設(shè)計的注入數(shù)據(jù)幀格式如表1所示.
表1 注入數(shù)據(jù)幀格式Tab.1 Format of injected data frame
補(bǔ)丁上注的過程是將制作生成的補(bǔ)丁按照上述幀格式打包成一個或多個注入數(shù)據(jù)幀,通過地面站將注入數(shù)據(jù)幀發(fā)送至目標(biāo)衛(wèi)星.
為了避免數(shù)據(jù)接收引起星上任務(wù)長時間中斷,星載計算機(jī)通過DMA 接收注入數(shù)據(jù).在接收到注入數(shù)據(jù)后,監(jiān)測程序根據(jù)表1的格式對數(shù)據(jù)幀進(jìn)行解析和校驗,在收取所有數(shù)據(jù)幀后,拼接補(bǔ)丁數(shù)據(jù)塊形成更新補(bǔ)丁.具體過程如圖6所示.
圖6 解析和校驗注入數(shù)據(jù)幀的過程Fig.6 Process of parsing and validating injected data frame
監(jiān)測程序接下來要根據(jù)圖5的更新補(bǔ)丁結(jié)構(gòu)對補(bǔ)丁進(jìn)行解析和CRC 校驗.若解析失敗或CRC 校驗不通過,則需地面重傳該補(bǔ)丁.解析成功且CRC校驗通過后,監(jiān)測程序可以得到一組Remove操作和一組Write操作.
為了能回滾至更新前的狀態(tài),監(jiān)測程序需要在星上制作逆操作補(bǔ)丁,即為每個Remove操作生成對應(yīng)的Write操作,為每個Write操作生成對應(yīng)的Remove操作.把生成的Write和Remove操作按圖5的更新補(bǔ)丁格式組織成逆操作補(bǔ)丁,并保存至NAND Flash中.
舉例說明,操作Remove(0xC1312311,0x73)的 逆 操 作 是 Write(0xC1312311,0x73,bin(0xC1312311,0x73)),其 中bin(0xC1312311,0x73)是內(nèi)存空間0xC1312311~0xC1312383 的二進(jìn)制內(nèi)容,意思是將刪除的內(nèi)容寫回至原內(nèi)存空間.操作Write(0xC13124A9,0x91,b(f′1))的逆操作是Remove(0xC13124A9,0x91),意思是將內(nèi)存空間中寫入的內(nèi)容刪除.
更新補(bǔ)丁中只包含Remove操作和Write操作,因此對星上軟件作動態(tài)修改的方式很簡單,即直接尋址到對應(yīng)的內(nèi)存空間,根據(jù)起始地址、大小進(jìn)行相應(yīng)的操作.具體的監(jiān)測程序應(yīng)用更新補(bǔ)丁和逆操作補(bǔ)丁的算法如下.
在未執(zhí)行更新操作前,初始化當(dāng)前程序版本號ver為0.然后監(jiān)測程序獲取程序控制權(quán),根據(jù)更新補(bǔ)丁生成逆操作補(bǔ)丁并保存至NAND Flash中,再按順序執(zhí)行所有Remove操作和所有Write操作.最后將控制權(quán)交換給修改后的業(yè)務(wù)邏輯程序,并將ver加1.
同樣地,需要執(zhí)行回滾操作時,監(jiān)測程序從NAND Flash中找到最近一次保存的逆操作補(bǔ)丁,解析并按圖7所示的算法執(zhí)行,并將ver減1.在執(zhí)行逆操作時不需再生成逆操作的逆操作補(bǔ)丁,因為逆操作的逆操作即為之前的更新操作.
為了應(yīng)對程序跑飛和掉電重啟等出錯情況,監(jiān)測程序保留每個更新補(bǔ)丁和逆操作補(bǔ)丁.
若更新過程出現(xiàn)程序跑飛,導(dǎo)致看門狗將整星軟件復(fù)位或整星掉電重啟,則需要重新加載星載軟件.監(jiān)測程序會首先加載最原始版本的業(yè)務(wù)邏輯程序,并按更新順序應(yīng)用ver次更新補(bǔ)丁,將業(yè)務(wù)邏輯程序恢復(fù)到出錯前的版本.若恢復(fù)過程中依然出現(xiàn)程序跑飛或整星重啟等問題,則將ver減1,再執(zhí)行一次恢復(fù)過程,直到ver為0時為止.具體算法如下.
基于某型號皮衛(wèi)星星載計算機(jī)平臺,對所提出的軟件在軌更新方法進(jìn)行試驗,主要針對補(bǔ)丁大小、上注時間、更新操作執(zhí)行情況、回滾操作執(zhí)行情況和更新出的應(yīng)對情況進(jìn)行測試.
雖然試驗是在地面進(jìn)行,但為了模擬星地鏈路通信速率,補(bǔ)丁通過地面站以2 000bit/s的PCM遙控模式上注.
原始版本業(yè)務(wù)邏輯程序的目標(biāo)代碼大小為275 kB,進(jìn)行了4 次版本修改,共得到4 個更新補(bǔ)丁.表2顯示了更新補(bǔ)丁應(yīng)用的試驗結(jié)果,包含每個版本目標(biāo)代碼大小、更新補(bǔ)丁大小、補(bǔ)丁上注時間、代碼修改信息和補(bǔ)丁包含的Remove操作數(shù)m、Write操作數(shù)n和二進(jìn)制目標(biāo)碼的平均字節(jié)數(shù).
在星上運(yùn)行版本4程序時,上注回滾補(bǔ)?。窗l(fā)送用于回滾的遙控指令),星上業(yè)務(wù)邏輯程序成功回滾至版本3.
表2的結(jié)果表明,該方法的更新和回滾操作功能正確,更新補(bǔ)丁大小遠(yuǎn)小于目標(biāo)代碼大小,補(bǔ)丁上注時間僅為秒級.其中,即使版本4相對于版本3進(jìn)行了大量修改,補(bǔ)丁上注時間也僅為46s.與上注完整軟件的軟件在軌更新方法相比,采用該方法顯著減小了上注數(shù)據(jù)量,降低了上注時間.
試驗時星上運(yùn)行版本3程序.為了模擬各類出錯情況,對上注數(shù)據(jù)出現(xiàn)誤碼、更新的軟件存在缺陷使得程序跑飛、更新過程中整星斷電這3種出錯情況進(jìn)行模擬.
出錯情況1:上注數(shù)據(jù)誤碼.在注入數(shù)據(jù)幀中隨機(jī)注入多比特錯誤,再將注入錯誤后的數(shù)據(jù)上注至衛(wèi)星,觀察其更新狀態(tài).
出錯情況2:更新軟件存在缺陷使程序跑飛.故意修改版本4代碼使之隨意修改.text段而使程序跑飛,再將該版本的代碼制作成更新補(bǔ)丁上注至衛(wèi)星,觀察其更新狀態(tài).
出錯情況3:在更新過程中整星斷電.在星上執(zhí)行更新操作的時候人為重啟整星.一般情況下為單次重啟.在實際中可能會出現(xiàn)更新至上一個版本時仍發(fā)生整星斷電的情況,為了更好地模擬實際情況,引入多次重啟操作,即在重啟后的系統(tǒng)恢復(fù)過程中,再次實施重啟操作,該重啟操作不斷實施20次,并觀察其更新狀態(tài).
上述出錯試驗的結(jié)果如表3所示.結(jié)果表明,該方法能夠成功應(yīng)對各種更新出錯情況,滿足任務(wù)需求.
表2 更新補(bǔ)丁應(yīng)用試驗結(jié)果Tab.2 Experiment result of performing updating patch
表3 更新出錯試驗結(jié)果Tab.3 Experiment result of exception simulations
本文基于編譯器的增量鏈接特性,提出一種無需重啟、上注數(shù)據(jù)量小、并且可回滾至更新前狀態(tài)的星載軟件在軌更新方法.該方法將更新操作歸結(jié)為內(nèi)存空間的寫入操作和刪除操作,能夠隨意修改或增減星載軟件功能,簡化了補(bǔ)丁的結(jié)構(gòu)和星上監(jiān)測程序的更新操作過程,并能夠回滾至更新之前的狀態(tài).試驗結(jié)果表明,利用本文方法進(jìn)行更新,補(bǔ)丁上注時間短,更新操作正確,回滾操作有效,并成功應(yīng)對各種更新出錯情況.本文方法高效可行,具有較好的安全性,可以應(yīng)用在包括皮衛(wèi)星在內(nèi)的各種航天器中.
(
):
[1]包海超,楊根慶,李華旺.小衛(wèi)星星載軟件微內(nèi)核的設(shè)計[J].計算機(jī)工程,2008,34(9):81-82.BAO Hai-chao,YANG Gen-qing,LI Hua-wang.Micro kernel design of small satellite software[J].Computer Engineering,2008,34(9):81-82.
[2]ZHANG Y,JIANG J.Bibliographical review on reconfigurable fault-tolerant control systems[J].Annual Reviews in Control,2008,32(2):229-252.
[3]LEVESON N G.Role of software in spacecraft accidents[J].Journal of spacecraft and Rockets,2004,41(4):564-575.
[4]張然峰,郝賢鵬,金龍旭,等.空間相機(jī)軟件在軌重注方法研究與實現(xiàn)[J].光機(jī)電信息,2011,28(6):30-34.ZHANG Ran-feng,HAO Xian-peng,JIN Long-xu,et al.Study and realization on method of software in space camera on-board reprogramming [J].OME Information,2011,28(6):30-34.
[5]ROSA J,CRAVEIRO J,RUFINO J.Exploiting AIR composability towards spacecraft onboard software update[C]∥Actas do INForum-Simposio de Informatica.Braga:[s.n.],2010:675-686.
[6]李磊霞,王宇,林寶軍,等.基于宏定義動態(tài)鏈接的模塊化星載軟件升級方法研究[J].空間科學(xué)學(xué)報,2010,30(2):180-184.LI Lei-xia,WANG Yu,LIN Bao-jun,et al.Research of software updating for micro-satellite in the orbit based on dynamic link with macros[J].Chinese Journal of Space Science,2010,30(2):180-184.
[7]GJB 1198.1A-2004,航天器測控和數(shù)據(jù)管理第l部分:PCM 遙控[S].北京:國防科學(xué)技術(shù)工業(yè)委員會,2004.
[8]楊牧,王昊,張鈺,等.抗輻射加固的皮衛(wèi)星用實時操作系統(tǒng)設(shè)計[J].浙江大學(xué)學(xué)報:工學(xué)版,2011,45(6):1021-1026.YANG Mu,WANG Hao,ZHANG Yu,et al.Design of radiation-hardened real-time operating system for pico-satellite[J].Journal of Zhejiang University:Engineering Science,2011,45(6):1021-1026.
[9]BUTLER R,PENNOTTI M.The evolution of software and its impact on complex system design in robotic spacecraft embedded systems [J].Procedia Computer Science,2013,16:747-756.
[10]KIM D K,TILEVICH E,RIBBENS C J.Dynamic software updates for parallel high-performance applications[J].Concurrency and Computation:Practice and Experience,2011,23(4):415-434.
[11]NEAMTIU I,HICKS M,STOYLE G,et al.Practical dynamic software updating for C[C]∥Proceedings of the 2006 ACM SIGPLAN Conference on Programming Language Design and Implementation. New York:ACM,2006:72-83.
[12]HICKS M,NETTLES S.Dynamic software updating[J].ACM Transactions on Programming Languages and Systems,2005,27(6):1049-1096.
[13]KIM D K,TILEVICH E,RIBBENS C J.Shortening time-to-discovery with dynamic software updates for parallel high performance applications[R].Virginia Tech:Department Of Computer Science,2009.
[14]STEIGER C,F(xiàn)URNELL R,MORALES J.OBSM operations automation through the use of on-board control procedures[C]∥Space OPS 2004Conference.Montreal:AIAA,2004:1-15.
[15]徐偉,樸永杰.航天相機(jī)控制器在軌軟件重注[J].光電工程,2013,40(4):65-71.XU Wei,PIAO Yong-jie.Re-injection technology for software in aerospace camera controller on orbit[J].Opto-Electronic Engineering,2013,40(4):65-71.
[16]安軍社,劉艷秋,孫輝先.軟件的動態(tài)維護(hù)與實現(xiàn)[J].計算機(jī)工程,2003,29(2):238-239.AN Jun-she,LIU Yan-qiu,SUN Hui-xian.Implementation of on-board software maintenance[J].Computer Engineering.2003,29(2):238-239.
[17]THI A T,TSO K S,ALKALAI L,et al.On-board guarded software upgrading for space missions[C]∥Proceedings of the 18th Digital Avionics Systems Conference.St Louis:IEEE,1999:7.B.4-1-7.B.4-8.
[18]LI W,ZHANG Y,YANG J,et al.UCC:update-conscious compilation for energy efficiency in wireless sensor networks[C]∥Proceedings of the 2007ACM SIGPLAN Conference on Programming Language Design and Implementation.New York:ACM,2007:383-393.
[19]KIYOHARA R,MII S,MATSUMOTO M,et al.A new method of fast compression of program code for OTA updates in consumer devices[J].IEEE Transactions on Consumer Electronics,2009,55(2):812-817.
[20]BELLAACHIA A,RASSAN I A.Efficiency of prefix and non-prefix codes in string matching over compressed databases on handheld devices[C]∥Proceedings of the 2005 ACM Symposium on Applied Computing.New York:ACM,2005:993-997.
[21]BESZéDES á,F(xiàn)ERENC R,GYIMóTHY T,et al.Survey of code-size reduction methods[J].ACM Computing Surveys(CSUR),2003,35(3):223-267.
[22]田祖?zhèn)?,楊恒伏,羅陽旭.基于增量鏈接的PE文件信息隱藏技術(shù)研究[J].計算機(jī)科學(xué),2012,39(12):91-93.TIAN Zu-wei, YANG Heng-fu, LUO Yang-xu.Research of PE file information hiding based on incremental link[J].Computer Science,2012,39(12):91-93.
[23]TIS C.Executable and linking format(ELF)specification[S].[S.l.]:Tool Interface Standard Committee,1995.
[24]何熊文.一種通用遙控注入數(shù)據(jù)格式的設(shè)計與應(yīng)用[J].航天器工程,2008,17(1):94-99.HE Xiong-wen.Design and application of a common spacecraft telecommand data format [J].Spacecraft Engineering,2008,17(1):94-99.