[發(fā)明專利]基于MIPS架構(gòu)和vxworks系統(tǒng)實(shí)現(xiàn)熱補(bǔ)丁長(zhǎng)跳轉(zhuǎn)的方法在審
| 申請(qǐng)?zhí)枺?/td> | 201510617430.2 | 申請(qǐng)日: | 2015-09-24 |
| 公開(kāi)(公告)號(hào): | CN105138341A | 公開(kāi)(公告)日: | 2015-12-09 |
| 發(fā)明(設(shè)計(jì))人: | 李智榮 | 申請(qǐng)(專利權(quán))人: | 上海斐訊數(shù)據(jù)通信技術(shù)有限公司 |
| 主分類號(hào): | G06F9/44 | 分類號(hào): | G06F9/44 |
| 代理公司: | 上海碩力知識(shí)產(chǎn)權(quán)代理事務(wù)所 31251 | 代理人: | 郭桂峰 |
| 地址: | 201616 *** | 國(guó)省代碼: | 上海;31 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 mips 架構(gòu) vxworks 系統(tǒng) 實(shí)現(xiàn) 補(bǔ)丁 跳轉(zhuǎn) 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及一種通信技術(shù)領(lǐng)域的熱補(bǔ)丁實(shí)現(xiàn)方法,具體涉及一種基于MIPS架構(gòu)和vxworks系統(tǒng)實(shí)現(xiàn)熱補(bǔ)丁長(zhǎng)跳轉(zhuǎn)的方法。
背景技術(shù)
熱補(bǔ)丁是在不重啟設(shè)備的情況下,對(duì)設(shè)備當(dāng)前軟件版本的錯(cuò)誤進(jìn)行修復(fù)的一種解決方案。熱補(bǔ)丁的主要原理是將被補(bǔ)丁函數(shù)的入口指令修改為跳轉(zhuǎn)指令,跳轉(zhuǎn)指令跳轉(zhuǎn)到補(bǔ)丁函數(shù)執(zhí)行。如圖1所示,修改ip_rcv(被補(bǔ)丁函數(shù))的入口指令為j指令(MIPS匯編跳轉(zhuǎn)指令,跳轉(zhuǎn)到補(bǔ)丁函數(shù)fos_patch_ip_rcv執(zhí)行)。這樣CPU執(zhí)行到ip_rcv函數(shù)時(shí)會(huì)立即跳轉(zhuǎn)到fos_patch_ip_rcv函數(shù)執(zhí)行,這樣便可以在補(bǔ)丁函數(shù)(fos_patch_ip_rcv)修復(fù)ip_rcv函數(shù)中存在的錯(cuò)誤。
32位CPU單條跳轉(zhuǎn)指令的跳轉(zhuǎn)距離限制是熱補(bǔ)丁必須解決的一個(gè)問(wèn)題。如圖1所示,被補(bǔ)丁函數(shù)(ip_rcv)跳轉(zhuǎn)到補(bǔ)丁函數(shù)(fos_patch_ip_rcv)的距離如果大于跳轉(zhuǎn)指令的跳轉(zhuǎn)距離(如MIPSCPU的j指令,跳轉(zhuǎn)范圍最大是256M),CPU就無(wú)法完成跳轉(zhuǎn)功能。
目前針對(duì)熱補(bǔ)丁長(zhǎng)跳轉(zhuǎn)問(wèn)題,目前常見(jiàn)解決方法有如下幾種:1)通過(guò)修改鏈接器的鏈接腳本,確保被補(bǔ)丁函數(shù)到補(bǔ)丁函數(shù)的跳轉(zhuǎn)距離在跳轉(zhuǎn)指令的跳轉(zhuǎn)范圍內(nèi)。這種方法僅適用代碼段比較小的程序,且具體實(shí)現(xiàn)復(fù)雜;2)使用編譯器的-mlongcall選項(xiàng),生成64位長(zhǎng)指令。這種方案需要編譯器的支持,而且生成的程序文件比較大,在flash資源緊缺嵌入式系統(tǒng)中使用可能性較小;3)通過(guò)增加中間小函數(shù)。被補(bǔ)丁函數(shù)先跳轉(zhuǎn)到中間小函數(shù),然后跳轉(zhuǎn)到補(bǔ)丁函數(shù)。這種方法需要對(duì)中間小函數(shù)在程序空間中的位置進(jìn)行規(guī)劃,實(shí)現(xiàn)比較復(fù)雜。
發(fā)明內(nèi)容:
為了克服上述背景技術(shù)的缺陷,本發(fā)明提供一種基于MIPS架構(gòu)和vxworks系統(tǒng)實(shí)現(xiàn)熱補(bǔ)丁長(zhǎng)跳轉(zhuǎn)的方法。
為了解決上述技術(shù)問(wèn)題本發(fā)明的所采用的技術(shù)方案為:
一種基于MIPS架構(gòu)和vxworks系統(tǒng)實(shí)現(xiàn)熱補(bǔ)丁長(zhǎng)跳轉(zhuǎn)的方法,將補(bǔ)丁函數(shù)絕對(duì)地址的高位值加載到寄存器的高位,將絕對(duì)地址的低位值加載到寄存器的低位,將被補(bǔ)丁函數(shù)的入口指令修改為跳轉(zhuǎn)至寄存器。
較佳地,將被補(bǔ)丁函數(shù)的入口指令修改為跳轉(zhuǎn)至寄存器之前,檢查確保被補(bǔ)丁函數(shù)的入口指令安全可修改。
較佳地,確保被補(bǔ)丁函數(shù)的入口指令安全可修改的具體方法為:遍歷系統(tǒng)全部任務(wù),檢查每個(gè)任務(wù)的下一條待執(zhí)行指令地址是否為被補(bǔ)丁函數(shù)的入口指令的地址,若否,則表示安全可修改,若是,則表示不可修改。
較佳地,確保將被補(bǔ)丁函數(shù)的入口指令修改為跳轉(zhuǎn)至寄存器的動(dòng)作以原子方式完成,該修改過(guò)程不被搶占。
較佳地,確保將被補(bǔ)丁函數(shù)的入口指令修改為跳轉(zhuǎn)至寄存器的動(dòng)作以原子方式完成的具體方法為:修改前設(shè)置關(guān)中斷函數(shù),修改后設(shè)置開(kāi)中斷函數(shù)。
較佳地,補(bǔ)丁函數(shù)絕對(duì)地址為32位,將補(bǔ)丁函數(shù)絕對(duì)地址的高16位值加載到寄存器的高16位,將補(bǔ)丁函數(shù)絕對(duì)地址的低16位值加載到寄存器的低16位。
較佳地,用lui指令將補(bǔ)丁函數(shù)絕對(duì)地址的高16位值加載到寄存器的高16位,用ori指令將補(bǔ)丁函數(shù)絕對(duì)地址的低16位值加載到寄存器的低16位。
較佳地,將被補(bǔ)丁函數(shù)的入口指令修改為jrt0,即跳轉(zhuǎn)至t0寄存器。
本發(fā)明的有益效果在于:通過(guò)三條指令實(shí)現(xiàn)在4G程序空間范圍內(nèi)任意地址跳轉(zhuǎn),通過(guò)修改指令前的遍歷檢查操作確保系統(tǒng)中其他任務(wù)不因熱補(bǔ)丁激活而被終端掛起,通過(guò)修改函數(shù)前后設(shè)置的關(guān)中斷和開(kāi)中斷操作確保修改過(guò)程不被搶占。本發(fā)明方法不依賴編譯器支持特殊選項(xiàng)(如-mlongcall選項(xiàng)),不需要增加中間跳轉(zhuǎn)函數(shù),跳轉(zhuǎn)距離可以達(dá)到4G程序?qū)ぶ房臻g范圍,且實(shí)現(xiàn)原理簡(jiǎn)單。
附圖說(shuō)明
圖1為熱補(bǔ)丁實(shí)現(xiàn)方法示意圖;
圖2為未設(shè)置本發(fā)明實(shí)施例2中所述確保系統(tǒng)中沒(méi)有任務(wù)在執(zhí)行被補(bǔ)丁函數(shù)的步驟時(shí),被補(bǔ)丁函數(shù)在存儲(chǔ)器中的存儲(chǔ)結(jié)構(gòu)圖;
圖3為未設(shè)置本發(fā)明實(shí)施例2中所述確保系統(tǒng)中沒(méi)有任務(wù)在執(zhí)行被補(bǔ)丁函數(shù)的步驟,且補(bǔ)丁函數(shù)被激活后被補(bǔ)丁函數(shù)在存儲(chǔ)器中的存儲(chǔ)結(jié)構(gòu)圖;
圖4為本發(fā)明實(shí)施例2的流程圖;
圖5為本發(fā)明實(shí)施例3的流程圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明做進(jìn)一步的說(shuō)明。
實(shí)施例1,一種基于MIPS架構(gòu)和vxworks系統(tǒng)實(shí)現(xiàn)熱補(bǔ)丁長(zhǎng)跳轉(zhuǎn)的方法,包括以下步驟:
步驟S11,將補(bǔ)丁函數(shù)絕對(duì)地址的高位值加載到寄存器的高位,將絕對(duì)地址的低位值加載到寄存器的低位;
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于上海斐訊數(shù)據(jù)通信技術(shù)有限公司,未經(jīng)上海斐訊數(shù)據(jù)通信技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201510617430.2/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專利網(wǎng)。
- 一種面向MIPS平臺(tái)的內(nèi)存虛擬化方法
- 處理器和橋片的連接電路與主板
- 車載終端應(yīng)用程序的升級(jí)方法及裝置
- 車載終端的無(wú)線升級(jí)方法及裝置
- 車載終端操作系統(tǒng)的WIFI升級(jí)方法及裝置
- 多通終端及其系統(tǒng)MIPS控制方法和模塊
- 基于MIPS架構(gòu)的嵌入式實(shí)驗(yàn)平臺(tái)
- 一種帕金森病致病基因突變篩查檢測(cè)方法
- 一種實(shí)現(xiàn)MIPS架構(gòu)運(yùn)行SPECCPU的方法及系統(tǒng)
- 一種實(shí)現(xiàn)云原生的MIPS架構(gòu)容器云的方法
- 一種VXWORKS操作系統(tǒng)移植的方法
- 實(shí)現(xiàn)VxWorks與Qt通信的消息隊(duì)列方法
- 一種VxWorks映像文件正確性的檢查方法
- 一種用于IEC61850協(xié)議轉(zhuǎn)換設(shè)備的VxWorks操作系統(tǒng)的設(shè)計(jì)方法
- 一種VxWorks系統(tǒng)中BSP的設(shè)計(jì)方法
- 將VxWorks任務(wù)移植到Linux的方法及裝置
- 內(nèi)核加載方法、裝置及存儲(chǔ)介質(zhì)
- VxWorks的快速啟動(dòng)方法
- 一種定制雙系統(tǒng)
- 一種簡(jiǎn)便的VxWorks操作系統(tǒng)系統(tǒng)日志記錄方法





