[发明专利]一种处理家庭网关系统内核崩溃的方法及系统有效
申请号: | 201510311687.5 | 申请日: | 2015-06-09 |
公开(公告)号: | CN104899111B | 公开(公告)日: | 2018-03-20 |
发明(设计)人: | 赵伟;周转运;王志军 | 申请(专利权)人: | 烽火通信科技股份有限公司 |
主分类号: | G06F11/07 | 分类号: | G06F11/07;H04L12/66 |
代理公司: | 北京捷诚信通专利事务所(普通合伙)11221 | 代理人: | 王卫东 |
地址: | 430074 湖北省*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 处理 家庭 网关 系统 内核 崩溃 方法 | ||
技术领域
本发明涉及Linux内核异常处理技术领域,具体来讲是一种处理家庭网关系统内核崩溃的方法及系统。
背景技术
Linux系统是一种基于POSIX(Portable Operating System Interface of Unix,可移植操作系统Unix)和Unix的多用户、多任务、多线程和多CPU的操作系统。如今,已经有许多硬件设备安装了完整版本或裁减版本的Linux系统,例如家庭网关,手机,平板电脑,计算机,大型服务器等。
基于Linux的家庭网关作为一款三网融合的用户侧终端产品,应用越来越广泛,需求也越来越多。开发者在进行驱动开发或用户在应用产品时,时常会碰到一些内核崩溃(Kernel Panic)的现象。所谓的内核崩溃,是指操作系统监测到内部的致命错误,并无法安全处理此错误时采取的动作。这个概念主要被限定在Unix以及类Unix系统中,对于Microsoft Windows系统,等同的概念通常被称为蓝屏死机。
目前,当家庭网关出现内核崩溃现象时,Linux内核会立即将一些异常打印信息(oops信息)通过串口输出到控制台或者屏幕,完成输出后,家庭网关的串口输入输出功能即会失效(因为系统已经崩溃)。此时,开发者(或用户)就只能通过控制台或者屏幕上的异常打印信息进行内核崩溃信息的捕获及问题调试。但是,上述处理方法在解决实际问题时,还是存在以下缺陷:
(1)该处理方法必须基于出现内核崩溃前就已经接上有效串口。若内核崩溃前未及时接上串口或串口故障,因为系统已经崩溃无法进行任何有效输入输出,所以系统根本无法将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任务的内存地址;以该内存地址为索引,在存放所有内核函数的内核符号表中进行查找,获取调用过的内核函数的名字、内核函数的大小,调用到内核函数中的配置地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于烽火通信科技股份有限公司,未经烽火通信科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510311687.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种移动终端信息指示的方法及移动终端
- 下一篇:一种虚拟机负载均衡处理的方法