亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于“龍芯”的VxW orks系統(tǒng)函數(shù)在軌更新研究

        2015-01-24 12:24:26史毅龍薛長斌
        電子設(shè)計工程 2015年21期
        關(guān)鍵詞:函數(shù)調(diào)用龍芯調(diào)用

        史毅龍 , 薛長斌

        (1.中國科學(xué)院大學(xué) 北京 100190;2.中國科學(xué)院空間科學(xué)與應(yīng)用研究中心 北京 100190)

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

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

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

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

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

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

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

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

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

        addiu$sp,$sp,-4

        sw$ra,0($sp)

        jal......

        nop

        lw$ra 0($sp)

        jr$ra

        nop

        addiu$sp,$sp,4

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

        圖1 在軌替換前后函數(shù)調(diào)用示例Fig.1 On-orbit replacement sample before and after the function call

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

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

        目前系統(tǒng)軟件啟動完成后的內(nèi)存分配見圖2,其中USER_RESERVED區(qū)域為用戶保留區(qū),不會被系統(tǒng)軟件所使用。該區(qū)域的大小在BSP的config.h文件中定義。

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

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

        圖2 系統(tǒng)軟件啟動完成后的內(nèi)存分配圖Fig.2 Memory allocation system diagram

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

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

        圖3 函數(shù)更新表Fig.3 Function update figure

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

        為了便于應(yīng)用程序使用在軌更新功能,制定并實(shí)現(xiàn)了在軌更新功能接口,分別實(shí)現(xiàn)在軌更新區(qū)域初始化,獲取下一個在軌更新的函數(shù)第一條指令的存儲地址,設(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ī)上正在運(yùn)行的軟件中地址不一致[4]。在龍芯計算體系結(jié)構(gòu)下,并不需要對全局變量進(jìn)行處理,只需對函數(shù)調(diào)用指令進(jìn)行處理。本文設(shè)計的代碼提取工具完成更新代碼的提取,并將更新代碼中的函數(shù)調(diào)用指令進(jìn)行調(diào)整。

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

        Gcc-wrs-mips交叉編譯器生成的數(shù)據(jù)段地址4 k字節(jié)對齊。更新后的函數(shù)體積若相對于原函數(shù)增加過大,則會造成數(shù)據(jù)段鏈接地址改變[5]。由于龍芯體系結(jié)構(gòu)(基于mips體系結(jié)構(gòu))中存在著全局指針寄存器即gp寄存器,使用該指針能方便的存取static和extern數(shù)據(jù),編譯器會將全局變量存放在gp中的全局指針指向的32 kB的地址范圍內(nèi),這樣鏈接地址的改變并不影響全局變量在gp中的指針指向的范圍的存放地址,因此調(diào)用時并不需要對鏈接地址改變了的全局變量進(jìn)行修改,圖4,圖5為測試結(jié)果,圖4為全局變量gData1的鏈接地址,圖5為gData1鏈接地址變化前后編譯器通過gp寄存器調(diào)用gData1的指令對比。

        圖4 函數(shù)更新后全局變量鏈接地址變化Fig.4 Global variable link address of updated function

        圖5 全局變量鏈接地址發(fā)生變化前后gp指令對比Fig.5 Comparison of gp instructions before and after link address change

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

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

        在修改函數(shù)代碼重新編譯后,被修改函數(shù)之后的所有函數(shù)鏈接地址均會發(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所示,因此需對JAL指令的調(diào)整。

        圖6 jal指令構(gòu)成Fig.6 Jal instruct

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

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

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

        圖7 代碼提取工具與原碼對比Fig.7 Comparison between code from onlineUpdate tool and the old one

        5 結(jié)束語

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

        [1]安軍社,劉艷秋,孫輝先.VxWorks操作系統(tǒng)板級支持包的設(shè)計與實(shí)現(xiàn)[J].計算機(jī)工程,2003,29(7):117-119.AN Jun-she,LIU Yan-qiu,SUN Hui-xian.The design and implementation of operating system board support package[J].computer engineering,2003,29(1):117-119.

        [2]張然峰,郝賢鵬,金龍旭,等.空間相機(jī)軟件在軌重注方法研究與實(shí)現(xiàn)[J].光機(jī)電信息,2011,28(6):30-34.ZHANG Ran-feng,HE Xian-peng,JIN Long-xu,et al.Onorbit space camera software research and implementation of heavy injection method[J].OME Information,2011,28 (6):30-34.

        [3]喬從連.Vx Works系統(tǒng)的BSP概念及啟動過程[J].艦船電子對抗,2005,28(1):61-64.QIAOCong-lian.VxWorksSystem concept of BSPand concept of starting the process[J].Ship Electronic Countermeasures,2005,28(1):61-64.

        [4]高進(jìn).衛(wèi)星在軌編程技術(shù)研究[C].中國宇航學(xué)會計算機(jī)應(yīng)用專業(yè)委員會學(xué)術(shù)交流會論文集,2004.

        [5]朱虹,王海燕.一種星載軟件在軌編程功能的設(shè)計和實(shí)現(xiàn)技術(shù)[J].上海航天,2004(1):26-31.ZHU Hong,WANG Hai-yan.An orbit space-borne software programming function design and implementation of the technology[J]Aerospace Shanghai,2004(1):26-31.

        [6]胡奇明.VxWorks操作系統(tǒng)的重新編譯和優(yōu)化研究與實(shí)現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2008.

        猜你喜歡
        函數(shù)調(diào)用龍芯調(diào)用
        基于國產(chǎn)化龍芯的動環(huán)數(shù)據(jù)采集系統(tǒng)
        基于C語言的數(shù)學(xué)菜單的設(shè)計與實(shí)現(xiàn)
        核電項目物項調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        基于函數(shù)調(diào)用序列模式和函數(shù)調(diào)用圖的程序缺陷檢測方法*
        探討C++編程中避免代碼冗余的技巧
        Unity3D項目腳本優(yōu)化分析與研究
        中國新通信(2017年1期)2017-03-08 03:12:21
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        “龍芯之父”胡偉武
        華人時刊(2016年13期)2016-04-05 05:50:06
        龍芯發(fā)布新一代處理器產(chǎn)品
        免费无码又爽又刺激又高潮的视频 | 日本污视频| 亚洲传媒av一区二区三区| 亚洲AV无码成人精品区H| 中文字幕一区二区三区四区久久| 色久悠悠婷婷综合在线| 成人无码网www在线观看| 国产精品熟妇视频国产偷人| 天天躁日日操狠狠操欧美老妇| 国产亚洲高清在线精品不卡| 国产三级av大全在线爽| 亚洲精品乱码久久久久久中文字幕| 麻豆精品久久久久久久99蜜桃| 免费人成在线观看播放国产| 白白白色视频在线观看播放| 中文字幕乱码日本亚洲一区二区| 中文字幕日本人妻久久久免费| 美女胸又www又黄的网站| 成年女人在线观看毛片| 国家一级内射高清视频| 免费国产a国产片高清网站| 黄又色又污又爽又高潮动态图| 日韩一区二区三区中文字幕| 隔壁人妻欲求不满中文字幕| 免费人成视频网站网址| 50岁熟妇大白屁股真爽| 亚洲国产成人久久综合一区77 | 日本一区二区三区视频免费在线| 成年女人色毛片| 无码夜色一区二区三区| 亚洲成在人网av天堂| 人妻少妇偷人精品久久人妻| 亚洲国产精品无码成人片久久| 成人欧美一区二区三区| 大胆欧美熟妇xxbbwwbw高潮了| 熟女白浆精品一区二区| 亚洲最大在线视频一区二区| 特黄特色的大片观看免费视频| 老色鬼永久精品网站| 一本色道加勒比精品一区二区| 精品精品国产自在97香蕉|