當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式動(dòng)態(tài)
[導(dǎo)讀]摘要:由于我國(guó)的空間技術(shù)的迅速發(fā)展,航天嵌入式系統(tǒng)的復(fù)雜性急劇增加。在航天領(lǐng)域要求對(duì)嵌入式操作系統(tǒng)vxWorks進(jìn)行剪裁工作以適應(yīng)航天設(shè)計(jì)的要求,而剪裁掉文件系統(tǒng)的VxW

摘要:由于我國(guó)的空間技術(shù)的迅速發(fā)展,航天嵌入式系統(tǒng)的復(fù)雜性急劇增加。在航天領(lǐng)域要求對(duì)嵌入式操作系統(tǒng)vxWorks進(jìn)行剪裁工作以適應(yīng)航天設(shè)計(jì)的要求,而剪裁掉文件系統(tǒng)的VxWorks操作系統(tǒng)存在地面不能對(duì)星上的事件進(jìn)行有效干預(yù)的問(wèn)題。文中在“龍芯”計(jì)算機(jī)平臺(tái)上通過(guò)對(duì)VxWorks操作系統(tǒng)進(jìn)行配置,設(shè)計(jì)了一種可在軌編程的方案,并針對(duì)其中的出現(xiàn)的修改后的函數(shù)中全局變量和調(diào)用函數(shù)的鏈接地址發(fā)生變化的問(wèn)題提出了解決方案并完成了軟件實(shí)現(xiàn)該功能。文中CPU采用wh1770,通過(guò)修改原被調(diào)用函數(shù)的初始代碼實(shí)現(xiàn)對(duì)于新函數(shù)的調(diào)用,并針對(duì)全局變量以及調(diào)用函數(shù)在更新函數(shù)中鏈接地址發(fā)生變化設(shè)計(jì)了在軌更新接口函數(shù)和更新代碼提取工具,從而實(shí)現(xiàn)函數(shù)的在軌更新,給出了部分設(shè)計(jì)流程圖以及代碼提取工具的測(cè)試結(jié)果。測(cè)試結(jié)果顯示該工具實(shí)現(xiàn)了設(shè)計(jì)目的,在航天工程領(lǐng)域具備一定的利用價(jià)值。

在航天領(lǐng)域,由于軟件設(shè)計(jì)的復(fù)雜程序越來(lái)越高,盡管軟件在研制過(guò)程中已發(fā)現(xiàn)和解決了大量軟件問(wèn)題,但難免在軌飛行時(shí)仍發(fā)現(xiàn)少量軟件存在缺陷;同時(shí)某些需要載荷根據(jù)在軌飛行應(yīng)用情況調(diào)整某些算法?;谝陨系确矫嬖蛟絹?lái)越需要軟件具有在軌更新能力。一方面可保證航天應(yīng)用的可靠運(yùn)行,另一方面可提高軟件維修性。同時(shí)由于嵌入式操作系統(tǒng)為了符合航天領(lǐng)域的應(yīng)用需要進(jìn)行剪裁,本文所采用的基于“龍芯”計(jì)算機(jī)平臺(tái)的vxWorks操作系統(tǒng)為適應(yīng)航天領(lǐng)域的需求剪裁掉了文件系統(tǒng),所以無(wú)法使用動(dòng)態(tài)加載模塊的方式實(shí)現(xiàn)函數(shù)的在軌更新,需要使用新的方法來(lái)實(shí)現(xiàn)在軌編程。同時(shí)更新函數(shù)中如果有函數(shù)調(diào)用則其調(diào)用的函數(shù)和全局變量的鏈接地址可能會(huì)發(fā)生變化,需要對(duì)函數(shù)和全局變量的調(diào)用指令做出修改。

結(jié)合這些背景,本文提出了針對(duì)“龍芯”體系結(jié)構(gòu)的函數(shù)在軌更新方案以及設(shè)計(jì)了可調(diào)整調(diào)用指令的更新代碼提取工具,以滿足軟件具有在軌更新能力的航天任務(wù)要求。

1 函數(shù)在軌更新方案簡(jiǎn)介

文中基于“龍芯”平臺(tái)的VxWorks操作系統(tǒng)由于要符合航天系統(tǒng)操作系統(tǒng)盡量小的要求,剪裁掉了文件系統(tǒng),所以不能直接使用動(dòng)態(tài)加載模塊的方式實(shí)現(xiàn)函數(shù)在軌更新,本文的在軌更新基于RAM進(jìn)行,系統(tǒng)軟件在RAM中保留了一片區(qū)域,專用來(lái)保存在軌更新注入的函數(shù)代碼。龍芯計(jì)算機(jī)平臺(tái)下使用“JAL指令+函數(shù)名”的方式完成函數(shù)調(diào)用,在鏈接時(shí),函數(shù)名會(huì)被鏈接器替換為函數(shù)的地址。JAL指令在執(zhí)行時(shí),會(huì)將自身地址寫入到寄存器ra中。通常JAL指令之后會(huì)跟延遲槽,因此返回地址為原函數(shù)調(diào)用指令地址+8。

若將待更新函數(shù)的前幾條指令進(jìn)行替換,修改為“JAL指令+新函數(shù)的地址”,這樣調(diào)用該函數(shù)后,替換的JAL指令會(huì)調(diào)用新的函數(shù)。從新函數(shù)返回后,將回到原函數(shù)的代碼繼續(xù)執(zhí)行。因此需要將原函數(shù)第三條指令修改為返回指令,返回到原函數(shù)的調(diào)用處。

由于JAL指令調(diào)用新函數(shù)時(shí),會(huì)當(dāng)前地址寫入寄存器ra中,故會(huì)將原函數(shù)的返回地址(之前寄存器ra中的內(nèi)容)覆蓋掉,因此在JAL指令之前,須將寄存器ra中的內(nèi)容保存到堆棧中。在從新函數(shù)返回后,接著將堆棧中的原函數(shù)返回地址寫回到ra中,并通過(guò)返回指令回到原函數(shù)調(diào)用指令地址+8處,即回到原函數(shù)調(diào)用處的下一指令。

2 方案設(shè)計(jì)及內(nèi)存分配

2.1 函數(shù)替換模塊設(shè)計(jì)

本設(shè)計(jì)的結(jié)構(gòu)圖如圖1所示,原調(diào)用方式為通過(guò)JAL指令直接跳轉(zhuǎn)到被調(diào)函數(shù)然后通過(guò)jr ra返回,替換后的函數(shù)調(diào)用方式為將通過(guò)將原函數(shù)的前8條指令進(jìn)行修改,替換為以下形式的指令

 

 

從而實(shí)現(xiàn)對(duì)新函數(shù)的調(diào)用,圖1中給出了在軌替換前后的函數(shù)調(diào)用示例,可發(fā)現(xiàn)函數(shù)替換對(duì)其被調(diào)用者而言是不可見(jiàn)的,對(duì)其被調(diào)用者無(wú)任何影響。

 

 

2.2 在軌更新內(nèi)存分配

為了保存在軌更新的函數(shù)代碼,系統(tǒng)軟件在RAM中預(yù)留了一片空間,專用來(lái)存儲(chǔ)函數(shù)更新代碼,并建立函數(shù)更新表對(duì)其進(jìn)行管理,記錄原函數(shù)地址、更新代碼的存儲(chǔ)地址、更新函數(shù)的長(zhǎng)度等信息。

目前系統(tǒng)軟件啟動(dòng)完成后的內(nèi)存分配見(jiàn)圖2,其中USER_RESERVED區(qū)域?yàn)橛脩舯A魠^(qū),不會(huì)被系統(tǒng)軟件所使用。該區(qū)域的大小在BSP的config.h文件中定義。

 

 

對(duì)BSP中RAM初始化的代碼(對(duì)于基于ROM的和引導(dǎo)ROM的vxworks映像在romInit.s中)進(jìn)行修改,使初始化時(shí)不對(duì)USER_RESERVED區(qū)域清零。在系統(tǒng)首次加電時(shí)由應(yīng)用程序?qū)υ搮^(qū)域清零,而在系統(tǒng)復(fù)位時(shí)則不做清零處理。這樣修改是為了在系統(tǒng)復(fù)位后,USER_RESERVED區(qū)域中保存的內(nèi)容不被清除掉。如果每次復(fù)位后該區(qū)域的內(nèi)容均被擦除,其中保存的在軌更新代碼必須重新注入,在進(jìn)行了函數(shù)在軌更新后,須時(shí)刻關(guān)注系統(tǒng)狀態(tài),在復(fù)位發(fā)生后立即重新注入。這樣會(huì)對(duì)數(shù)據(jù)注入鏈路造成較大的壓力。

2.3 更新區(qū)域的布局

2.2中提到在RAM中預(yù)留了用戶保留區(qū)域USERRESERVED區(qū)域來(lái)建立函數(shù)更新表對(duì)函數(shù)更新進(jìn)行管理,該區(qū)域內(nèi)將記錄原函數(shù)地址、更新代碼的存儲(chǔ)地址、更新函數(shù)的長(zhǎng)度等信息。在更新代碼注入完成且校驗(yàn)正確后,需檢查是否有空間來(lái)存儲(chǔ)更新代碼,如果有則在函數(shù)更新表中增加一項(xiàng),并確定更新代碼在更新專用區(qū)域中的存放地址,然后將注入的代碼從緩沖區(qū)拷貝到該地址。

為了保證可靠性,函數(shù)更新表及更新代碼存儲(chǔ)區(qū)域均采用三模處理。函數(shù)更新表在內(nèi)部三模。更新代碼存儲(chǔ)區(qū)域則是將同一更新代碼存儲(chǔ)在3個(gè)區(qū)域,在執(zhí)行更新替換前進(jìn)行比對(duì),防止錯(cuò)誤。在軌更新區(qū)域內(nèi)存布局如圖3,ONLINEUPDATE_BEGIN定義了在軌更新區(qū)域首地址ONUNEUPDATE_LEN定義了區(qū)域長(zhǎng)度,ONLINE_UPDATE_END則定義了區(qū)域末地址,這些常量均需要在在軌更新頭文件(本文定義在onlineUpdate.h)中定義。

 

 

3 在軌更新接口函數(shù)

為了便于應(yīng)用程序使用在軌更新功能,制定并實(shí)現(xiàn)了在軌更新功能接口,分別實(shí)現(xiàn)在軌更新區(qū)域初始化,獲取下一個(gè)在軌更新的函數(shù)第一條指令的存儲(chǔ)地址,設(shè)置函數(shù)在軌更新,以及啟用和禁用函數(shù)更新功能。

4 系統(tǒng)調(diào)試代碼提取工具及調(diào)試結(jié)果

4.1 代碼提取工具

若待更新的函數(shù)中調(diào)用了其它函數(shù),或是使用了全局變量,由于重新編譯鏈接后,函數(shù)和全局變量的鏈接地址均可能發(fā)生變化,從而導(dǎo)致更新的函數(shù)中引用的地址與當(dāng)前星載計(jì)算機(jī)上正在運(yùn)行的軟件中地址不一致。在龍芯計(jì)算體系結(jié)構(gòu)下,并不需要對(duì)全局變量進(jìn)行處理,只需對(duì)函數(shù)調(diào)用指令進(jìn)行處理。本文設(shè)計(jì)的代碼提取工具完成更新代碼的提取,并將更新代碼中的函數(shù)調(diào)用指令進(jìn)行調(diào)整。

1)全局變量地址變化的處理方式

Gcc—wrs—mips交叉編譯器生成的數(shù)據(jù)段地址4 k字節(jié)對(duì)齊。更新后的函數(shù)體積若相對(duì)于原函數(shù)增加過(guò)大,則會(huì)造成數(shù)據(jù)段鏈接地址改變。由于龍芯體系結(jié)構(gòu)(基于mips體系

結(jié)構(gòu))中存在著全局指針寄存器即gp寄存器,使用該指針能方便的存取static和extern數(shù)據(jù),編譯器會(huì)將全局變量存放在gp中的全局指針指向的32 kB的地址范圍內(nèi),這樣鏈接地

址的改變并不影響全局變量在gp中的指針指向的范圍的存放地址,因此調(diào)用時(shí)并不需要對(duì)鏈接地址改變了的全局變量進(jìn)行修改,圖4,圖5為測(cè)試結(jié)果,圖4為全局變量gDatal的鏈接地址,圖5為gDatal鏈接地址變化前后編譯器通過(guò)gp寄存器調(diào)用gDatal的指令對(duì)比。

 

 

在軌運(yùn)行的軟件中,gDatal的地址分別為0x80led874,而在本地編譯生成的更新函數(shù)代碼中,gDatal的地址為0x801ed864。而此時(shí)使用gp寄存器調(diào)用gDatal的指令并未發(fā)生變化,由此可見(jiàn),通過(guò)利用gp寄存器,并不需要對(duì)改變了鏈接地址的全局變量改變做出修改。

2)函數(shù)鏈接地址的變化

在修改函數(shù)代碼重新編譯后,被修改函數(shù)之后的所有函數(shù)鏈接地址均會(huì)發(fā)生變化,由于修改了函數(shù)add,導(dǎo)致函數(shù)add和add之后的函數(shù)鏈接地址都發(fā)生了變化。add中調(diào)用了retOne函數(shù),由于龍芯的函數(shù)調(diào)用指令JAL指令是由指令操作符和目標(biāo)函數(shù)所在地址的低28位右移2位形成的指令偏移值一起構(gòu)成,如圖6所示,因此需對(duì)JAL指令的調(diào)整。

 

 

通過(guò)對(duì)更新代碼中的JAL指令進(jìn)行解析,通過(guò)指令編碼中的偏移地址與指令地址高4位計(jì)算出JAL調(diào)用的函數(shù)地址。查找新的MAP文件,得到調(diào)用的函數(shù)名。然后利用函數(shù)名查找舊的MAP文件,獲取星載計(jì)算機(jī)中該函數(shù)的鏈接地址。然后對(duì)調(diào)用函數(shù)的鏈接地址對(duì)JAL指令進(jìn)行調(diào)整,即完成了JAL指令的調(diào)整工作。

4.2 代碼提取工具執(zhí)行結(jié)果

代碼執(zhí)行結(jié)果如圖7所示。

 

 

5 結(jié)束語(yǔ)

本文設(shè)計(jì)的基于龍芯計(jì)算機(jī)平臺(tái)的vxWorks函數(shù)在軌更新研究可行,設(shè)計(jì)的代碼提取工具能完成任務(wù)需求。測(cè)試結(jié)果顯示軟件能達(dá)到了設(shè)計(jì)目的,在航天工程領(lǐng)域具備較好的工程利用價(jià)值。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉