一种处理家庭网关系统内核崩溃的方法及系统技术方案

技术编号:12027892 阅读:102 留言:0更新日期:2015-09-10 12:52
本发明专利技术公开了一种处理家庭网关系统内核崩溃的方法及系统,涉及Linux内核异常处理技术领域。该方法包括以下步骤:在系统内核崩溃后出现异常的CPU寄存器内,查找并记录与当前系统对应的所有堆栈的寄存器指针变量;读取每个寄存器指针变量中的内核崩溃信息,并将其保存至全局缓冲区;将全局缓冲区中所有的内核崩溃信息写入到Flash存储器的指定文件夹;根据系统的内核崩溃状态打印异常提示信息至系统终端,用户根据异常提示信息及Flash存储器内的内核崩溃信息进行调试。本发明专利技术能在不依赖串口的情况下,完整地捕获内核崩溃信息,处理过程高效、便捷,且复用性高。

【技术实现步骤摘要】

本专利技术涉及Linux内核异常处理
,具体来讲是一种处理家庭网关系统内核崩溃的方法及系统
技术介绍
Linux系统是一种基于POSIX(Portable Operating System Interface of Unix,可移植操作系统Unix)和Unix的多用户、多任务、多线程和多CPU的操作系统。如今,已经有许多硬件设备安装了完整版本或裁减版本的Linux系统,例如家庭网关,手机,平板电脑,计算机,大型服务器等。基于Linux的家庭网关作为一款三网融合的用户侧终端产品,应用越来越广泛,需求也越来越多。开发者在进行驱动开发或用户在应用产品时,时常会碰到一些内核崩溃(Kernel Panic)的现象。所谓的内核崩溃,是指操作系统监测到内部的致命错误,并无法安全处理此错误时采取的动作。这个概念主要被限定在Unix以及类Unix系统中,对于Microsoft Windows系统,等同的概念通常被称为蓝屏死机。目前,当家庭网关出现内核崩溃现象时,Linux内核会立即将一些异常打印信息(oops信息)通过串口输出到控制台或者屏幕,完成输出后,家庭网关的串口输入输出功能即会失效(因为系统已经崩溃)。此时,开发者(或用户)就只能通过控制台或者屏幕上的异常打印信息进行内核崩溃信息的捕获及问题调试。但是,上述处理方法在解决实际问题时,还是存在以下缺陷:(I)该处理方法必须基于出现内核崩溃前就已经接上有效串口。若内核崩溃前未及时接上串口或串口故障,因为系统已经崩溃无法进行任何有效输入输出,所以系统根本无法将OOPS信息进行有效输出,开发者(或用户)无法在没有OOPS信息的基础上进行内核崩溃?目息的捕获,进而无法准确定位冋题所在。(2)该处理方法中,oops信息仅能一次性输出到控制台或者屏幕上,关掉电源后无法进行再次查看,开发者(或用户)只能通过手抄或者拍照的方式来记录,操作比较困难;与此同时,由于屏幕只能显示一页Oops信息(因为无法通过输入输出来调整显示的信息),因此当Oops信息过多时,根本无法显示完整的内容,缺少完整的oops信息也就无法进一步进行处理。综上所述,设计一种不依赖串口来处理内核崩溃的方法,是目前基于Linux的家庭网关亟待解决的技术问题。
技术实现思路
本专利技术的目的是为了克服上述
技术介绍
的不足,提供一种处理家庭网关系统内核崩溃的方法及系统,能在不依赖串口的情况下,完整地捕获内核崩溃信息,处理过程高效、便捷,且复用性高。为达到以上目的,本专利技术提供一种处理家庭网关系统内核崩溃的方法,包括以下步骤:A、在系统内核崩溃后出现异常的CPU寄存器内,查找并记录与当前系统对应的所有堆栈的寄存器指针变量,转到步骤B ;B、读取每个寄存器指针变量中的内核崩溃信息,内核崩溃信息的读取顺序依次为异常地址信息、最后返回的地址信息、CPU寄存器状态值和CPU寄存器调用过的内核函数的信息;将所有寄存器指针变量中的内核崩溃信息均保存至全局缓冲区,转到步骤C;C、将全局缓冲区中所有的内核崩溃信息写入到Flash存储器的指定文件夹,转到步骤D ;D、根据系统的内核崩溃状态打印异常提示信息至系统终端;用户根据异常提示信息及Flash存储器内的内核崩溃信息进行调试,结束。在上述技术方案的基础上,步骤A之前包括以下步骤:初始化一个用于禁止本地中断、禁止内核抢占的自旋锁;步骤C与D之间包括以下步骤:将自旋锁进行释放。在上述技术方案的基础上,步骤C具体包括以下步骤:在Flash存储器中指定需要写入文件夹的名称和路径;根据内核崩溃信息的起始地址、字节数大小,将全局缓冲区中所有的内核崩溃信息写入到指定文件夹中。在上述技术方案的基础上,步骤D所述根据系统的内核崩溃状态打印异常提示信息至系统终端,具体包括以下步骤:读取CPU的状态,判断当前CPU是否处于中断条件,若是,打印中断异常提示信息至系统终端;否则,休眠3?8秒,打印非中断异常提示信息至系统终端。在上述技术方案的基础上,步骤B中,读取CPU寄存器调用过的内核函数的信息的具体步骤包括:利用寄存器指针变量查询当前CPU任务的内存地址;以该内存地址为索引,在存放所有内核函数的内核符号表中进行查找,获取调用过的内核函数的名字、内核函数的大小,调用到内核函数中的配置地址。在上述技术方案的基础上,步骤A具体包括以下步骤:在当前系统正在运行的堆栈中记录寄存器指针变量;根据所述堆栈中存储的上一级调用函数的栈指针回溯至上一级堆栈,记录上一级堆栈内的寄存器指针变量;依次回溯,直至记录所有堆栈的寄存器指针变量,转到步骤B。在上述技术方案的基础上,步骤B中所述将所有寄存器指针变量中的内核崩溃信息均保存至全局缓冲区的具体步骤为:将所有寄存器指针变量中的内核崩溃信息均保存至全局缓冲区的最后。本专利技术还提供一种实现上述方法的处理家庭网关系统内核崩溃的系统,包括寄存器指针变量记录模块、内核崩溃信息捕获模块、内核崩溃信息写入模块和提示信息打印模块;所述寄存器指针变量记录模块用于:在系统内核崩溃后出现异常的CPU寄存器内,查找并记录与当前系统对应的所有堆栈的寄存器指针变量;向内核崩溃信息捕获模块发送捕获信号;所述内核崩溃信息捕获模块用于:收到捕获信号后,读取每个寄存器指针变量中的内核崩溃信息,内核崩溃信息的读取顺序依次为异常地址信息、最后返回的地址信息、CPU寄存器状态值和CPU寄存器调用过的内核函数的信息;将所有寄存器指针变量中的内核崩溃信息均保存至全局缓冲区;向内核崩溃信息写入模块发送写入信号;所述内核崩溃信息写入模块用于:收到写入信号后,将全局缓冲区中所有的内核崩溃信息写入到Flash存储器的指定文件夹;向提示信息打印模块发送打印信号;所述提示信息打印模块用于:收到打印信号后,根据系统的内核崩溃状态打印异常提示信息至系统终端。在上述技术方案的基础上,所述提示信息打印模块包括处理模块和打印模块;所述处理模块用于:读取CPU的状态,判断当前CPU是否处于中断条件下,若是,发送中断异常打印信号;否则,发送非中断异常打印信号;所述打印模块用于:收到中断异常打印信号后,打印中断异常提示信息至系统终端;收到非中断异常打印信号后,休眠3?8秒,打印非中断异常提示信息至系统终端。在上述技术方案的基础上,该系统还包括自旋锁控制模块,所述自旋锁控制模块用于:在寄存器指针变量记录模块开始记录前,初始化一个用于禁止本地中断、禁止内核抢占的自旋锁;在内核崩溃信息写入后、异常提示信息打印前,释放自旋锁。本专利技术的有益效果在于:(I)本专利技术中,在家庭网关系统出现内核崩溃时,是将所捕获到的完整的内核崩溃信息写入到Flash存储器的指定文件夹中,而不是按照传统的方式将信息通过串口输出到控制台或者屏幕。与现有技术中只能依赖串口进行内核崩溃信息的输出相比,本专利技术能够在不使用串口的情况下对内核崩溃信息进行完整的保存,并能在关掉电源后(或重启后)通过Flash存储器的指定文件夹进行反复查看,复用性高,不仅方便开发者(或用户)快速解决内核崩溃问题,而且能够降低家庭网关设备的制造成本及维护成本。(2)本专利技术对内核崩溃信息进行捕获时,会在出现异常的CPU寄存器内,通过回溯的方式记录下所有堆栈的寄存器指针变量,利用寄存器指针变量中的异常地址本文档来自技高网
...
一种处理家庭网关系统内核崩溃的方法及系统

【技术保护点】
一种处理家庭网关系统内核崩溃的方法,其特征在于,包括以下步骤:A、在系统内核崩溃后出现异常的CPU寄存器内,查找并记录与当前系统对应的所有堆栈的寄存器指针变量,转到步骤B;B、读取每个寄存器指针变量中的内核崩溃信息,内核崩溃信息的读取顺序依次为异常地址信息、最后返回的地址信息、CPU寄存器状态值和CPU寄存器调用过的内核函数的信息;将所有寄存器指针变量中的内核崩溃信息均保存至全局缓冲区,转到步骤C;C、将全局缓冲区中所有的内核崩溃信息写入到Flash存储器的指定文件夹,转到步骤D;D、根据系统的内核崩溃状态打印异常提示信息至系统终端;用户根据异常提示信息及Flash存储器内的内核崩溃信息进行调试,结束。

【技术特征摘要】

【专利技术属性】
技术研发人员:赵伟周转运王志军
申请(专利权)人:烽火通信科技股份有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1