[发明专利]基于MIPS架构和vxworks系统实现热补丁长跳转的方法在审
申请号: | 201510617430.2 | 申请日: | 2015-09-24 |
公开(公告)号: | CN105138341A | 公开(公告)日: | 2015-12-09 |
发明(设计)人: | 李智荣 | 申请(专利权)人: | 上海斐讯数据通信技术有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 上海硕力知识产权代理事务所 31251 | 代理人: | 郭桂峰 |
地址: | 201616 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 mips 架构 vxworks 系统 实现 补丁 跳转 方法 | ||
技术领域
本发明涉及一种通信技术领域的热补丁实现方法,具体涉及一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法。
背景技术
热补丁是在不重启设备的情况下,对设备当前软件版本的错误进行修复的一种解决方案。热补丁的主要原理是将被补丁函数的入口指令修改为跳转指令,跳转指令跳转到补丁函数执行。如图1所示,修改ip_rcv(被补丁函数)的入口指令为j指令(MIPS汇编跳转指令,跳转到补丁函数fos_patch_ip_rcv执行)。这样CPU执行到ip_rcv函数时会立即跳转到fos_patch_ip_rcv函数执行,这样便可以在补丁函数(fos_patch_ip_rcv)修复ip_rcv函数中存在的错误。
32位CPU单条跳转指令的跳转距离限制是热补丁必须解决的一个问题。如图1所示,被补丁函数(ip_rcv)跳转到补丁函数(fos_patch_ip_rcv)的距离如果大于跳转指令的跳转距离(如MIPSCPU的j指令,跳转范围最大是256M),CPU就无法完成跳转功能。
目前针对热补丁长跳转问题,目前常见解决方法有如下几种:1)通过修改链接器的链接脚本,确保被补丁函数到补丁函数的跳转距离在跳转指令的跳转范围内。这种方法仅适用代码段比较小的程序,且具体实现复杂;2)使用编译器的-mlongcall选项,生成64位长指令。这种方案需要编译器的支持,而且生成的程序文件比较大,在flash资源紧缺嵌入式系统中使用可能性较小;3)通过增加中间小函数。被补丁函数先跳转到中间小函数,然后跳转到补丁函数。这种方法需要对中间小函数在程序空间中的位置进行规划,实现比较复杂。
发明内容:
为了克服上述背景技术的缺陷,本发明提供一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法。
为了解决上述技术问题本发明的所采用的技术方案为:
一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,将补丁函数绝对地址的高位值加载到寄存器的高位,将绝对地址的低位值加载到寄存器的低位,将被补丁函数的入口指令修改为跳转至寄存器。
较佳地,将被补丁函数的入口指令修改为跳转至寄存器之前,检查确保被补丁函数的入口指令安全可修改。
较佳地,确保被补丁函数的入口指令安全可修改的具体方法为:遍历系统全部任务,检查每个任务的下一条待执行指令地址是否为被补丁函数的入口指令的地址,若否,则表示安全可修改,若是,则表示不可修改。
较佳地,确保将被补丁函数的入口指令修改为跳转至寄存器的动作以原子方式完成,该修改过程不被抢占。
较佳地,确保将被补丁函数的入口指令修改为跳转至寄存器的动作以原子方式完成的具体方法为:修改前设置关中断函数,修改后设置开中断函数。
较佳地,补丁函数绝对地址为32位,将补丁函数绝对地址的高16位值加载到寄存器的高16位,将补丁函数绝对地址的低16位值加载到寄存器的低16位。
较佳地,用lui指令将补丁函数绝对地址的高16位值加载到寄存器的高16位,用ori指令将补丁函数绝对地址的低16位值加载到寄存器的低16位。
较佳地,将被补丁函数的入口指令修改为jrt0,即跳转至t0寄存器。
本发明的有益效果在于:通过三条指令实现在4G程序空间范围内任意地址跳转,通过修改指令前的遍历检查操作确保系统中其他任务不因热补丁激活而被终端挂起,通过修改函数前后设置的关中断和开中断操作确保修改过程不被抢占。本发明方法不依赖编译器支持特殊选项(如-mlongcall选项),不需要增加中间跳转函数,跳转距离可以达到4G程序寻址空间范围,且实现原理简单。
附图说明
图1为热补丁实现方法示意图;
图2为未设置本发明实施例2中所述确保系统中没有任务在执行被补丁函数的步骤时,被补丁函数在存储器中的存储结构图;
图3为未设置本发明实施例2中所述确保系统中没有任务在执行被补丁函数的步骤,且补丁函数被激活后被补丁函数在存储器中的存储结构图;
图4为本发明实施例2的流程图;
图5为本发明实施例3的流程图。
具体实施方式
下面结合附图和实施例对本发明做进一步的说明。
实施例1,一种基于MIPS架构和vxworks系统实现热补丁长跳转的方法,包括以下步骤:
步骤S11,将补丁函数绝对地址的高位值加载到寄存器的高位,将绝对地址的低位值加载到寄存器的低位;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海斐讯数据通信技术有限公司,未经上海斐讯数据通信技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510617430.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:飞钓式渔线轮刹车快速切换机构
- 下一篇:基于RFID的山羊养殖信息系统