发明名称 一种嵌入式系统的错误侦测和修复方法
摘要 本发明涉及一种嵌入式系统的错误侦测和修复方法。目前无线传感器节点的系统无法避免应用程序对系统核心的存储空间做存取的动作,可能会让系统产生不可预期的错误。本发明在SOS系统上以最小的修改系统架构方式,提出了一种可侦测存储器存取错误,并能使用模块替换的方式加以修复的方法,使存储器存取错误产生机会减少,搜集的信息也能更加有效益,在维护系统上更是轻而易举。利用本发明方法不必担心何时该侦测网络上的无线传感器节点是否出错,可能出错的传感器节点会被侦测到并主动修复,不需要有人随时在服务器端守候。
申请公布号 CN101604289B 申请公布日期 2011.01.05
申请号 CN200910100612.7 申请日期 2009.07.10
申请人 杭州电子科技大学 发明人 吴国华;郑秋华;张祯;方美娥
分类号 G06F11/36(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 杭州求是专利事务所有限公司 33200 代理人 杜军
主权项 一种嵌入式系统的错误侦测和修复方法,包括侦测嵌入式系统错误和修复嵌入式系统错误,其特征在于:侦测嵌入式系统错误的方法包括静态检查和动态检查;所述的静态检查的具体方法是:检查所有静态给定存储空间位址的存储器存储指令,所述的存储器存储指令包括直接调用指令和相对跳跃指令;同一模块内的函数调用采用相对跳跃指令,不同模块内的函数调用采用直接调用指令;直接调用指令和相对跳跃指令格式如下:  Instruction   Operation   Call k   PC=k   Jmp.+k   PC=PC+k   Jmp.‑k   PC=PC‑k 如果直接调用后面给定位址中的任何一个位址不是系统调用跳跃表里面的其中一个合法值,则该模块为不合法,不能上传到传感器节点上;如果全部直接调用都是跳跃表里的合法值,则该模块为合法;判断位址是否为合法值的方法为:将跳跃表的开头位址加上在跳跃表内的顺序乘以2,被检查的位址其值减掉跳跃表的开头位址后,将该值再除以2,若为整数,即为合法地址;否则不合法;所述的动态检查的具体方法是:步骤(1).改写模块内容、增加指令,就是把存储空间位址作为参数传进动态检查系统内以备调用;在编译时,如果目的位址无法在给定的指令前插入检查指令,则将欲存取的的存储空间位址设为参数,用来检查该位址的合法性;这些指令包括三形式,分别为间接调用、载入和存储,指令格式如下:  Instruction   Operation   icall   PC=Z(R31:R30)   ld Rd,X   Rd=[X(R27:R26)]   ld Rd,Y   Rd=[Y(R29:R28)]   ld Rd,Z   Rd=[Z(R31:R30)]    st X,Rr   [X(R27:R26)]=Rr   st Y,Rr   [Y(R29:R28)]=Rr   st Z,Rr   [Z(R31:R30)]=Rr 当一段连续载入或存储指令出现时,并且其目的位址连续、中间未被修改,则在这一段连续载入或存取指令的第一个存取指令前加上两个位址的检查,分别是这个连续存取存储空间位址的开头和结尾,如果确定两个位址的检查均合法,则该段连续的存取都合法;步骤(2).检查调用存储空间位址和检查存储器载入存储过程,当一个调用的位址被传入时,这个函数首先取得该模块的编号,使用系统内原本提供的系统函数;然后依序检查该位址是否是系统调用的进入点、向系统预约的其它模块函数进入点或模块本身内部的跳跃点,如果是系统调用的进入点、向系统预约的其它模块函数进入点或模块本身内部的跳跃点中的任何一个,则存取合法,进行回传;如果不是系统调用的进入点、向系统预约的其它模块函数进入点或模块本身内部的跳跃点中的任何一个,则检查出发生错误;所述的依序检查该位址是否是系统调用的进入点、向系统预约的其它模块函数进入点或模块本身内部的跳跃点的具体方法为:首先检查系统调用进入点,先用最后一个进入点的值和传入的位址比较,比较值大的直接跳到下一个比较区域,如果传入位址比跳跃表开头还小,则为错误;其次检查向系统预约的其它模块函数,先修改节点上的加载器,载入模块时,从模块的档案中获得该模块向系统预约了哪些函数,将信息记录下来,执行检查时,如果是记录过的函数调用,则合法;否则,不合法;修复嵌入式系统错误的方法具体是:步骤(a).如果侦测出有错,则有错的模块立即停止工作;步骤(b).向服务器发送替换出错模块的请求,服务器收到请求后,检查是否有其它版本,如果有,则将另一版本加载到传感器节点上,用来取代原来模块的工作;如果没有,则传递原来版本再试一次,若再次出错,且没有发现其它版本,则修复无效,服务器留下记录告知使用者。
地址 310018 浙江省杭州市江干区下沙高教园区2号大街