一种基于Linux系统的嵌入式设备重启状态记录方法与流程

文档序号:16247017发布日期:2018-12-11 23:40阅读:478来源:国知局
一种基于Linux系统的嵌入式设备重启状态记录方法与流程

本发明属于嵌入式设备稳定性领域,涉及一种基于linux系统的嵌入式设备重启状态记录方法。

背景技术

嵌入式系统是以应用为中心,以计算机技术为基础。软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统嵌入式系统是将先进的计算机技术、半导体技术、电子技术和具体应用相结合的产物。

近年来,在计算机、互联网和通信技术高速发展的同时,嵌入式系统开发技术取得迅速发展,嵌入式系统应用范围也急剧扩大。数码产品、智能手机、网络摄像机及各种掌上型多媒体设备都是典型的嵌入式系统。除此之外,更多的嵌入式系统隐身在不为人知的角落,从小到电子手表、电子体温计、翻译机等,大到如冷气机、电冰箱、电视机,甚至马路上红绿灯的控制器、战斗机中的飞控系统、自动导航设备、汽车中燃油控制、汽车雷达、abs等的微计算机系统、医院中的医疗器材、工厂中的自动机械等,嵌入式系统几乎无处不在。

稳定性是嵌入式系统的生命线,而实验室中的嵌入式产品在调试、安装测试通过后放到实际应用后,往往还会出现很多故障和不稳定的现象。国内很多电子产品卖不到好价格,很大的原因就是它的稳定性没有充足的保障。许多文章也都从各种不同的角度揭示和解决嵌入式系统的稳定性问题,都做了比较细致的研究,提供了许多解决办法。使用这些方法和措施确实能够解决工程实践中的很多问题,但是嵌入式系统是一个综合了软件和硬件的复杂系统,单单依靠那个方面都不能完全的解决其抗干扰问题,只有从嵌入式系统硬件、软件以及结构设计等方面进行全面的考虑,综合应用各种抗干扰技术来全面应对系统内外的各种干扰,才能有效提高其抗干扰性能。

嵌入式设备产品投入市场后,其稳定性维护就显得及其重要,当前加载有linux系统的嵌入式设备产品(例如,网络摄像机ipc)在系统运行层面仅仅做了看门狗保护,设备中一旦程序运行异常,就会触发看门狗重启整个设备系统,以防止设备卡死。这是嵌入式设备运行不稳定的一种常用规避方法,但是对于后期的问题定位与维护没有任何帮助。仅仅知道设备重启过,不知道是以何种方式重启。嵌入式设备重启方式可分为三类:断电重启,整个系统电源关闭后重新上电启动;非断电软重启,在系统电源工作正常的情况下,通过系统软件主动重启设备;非断电看门狗触发重启,因嵌入式设备软件运行异常导致看门狗中断重启整个系统。以某种机制去记录嵌入式设备上一次重启的状态属于哪一种就显得相当必要。



技术实现要素:

针对上述现有技术存在的问题,本发明提供一种基于linux系统的嵌入式设备重启状态记录方法,为嵌入式设备的稳定性维护提供支持途径。

为了解决上述技术问题,本发明采用如下技术方案:

一种基于linux系统的嵌入式设备重启状态记录方法,包括以下步骤:

s1,启动嵌入式设备,加载eeprom驱动程序,判断所述嵌入式设备是否为断电重启,若是,在eeprom中记录所述断电重启信息;若否,擦除非断电重启标志;

s2,加载看门狗驱动模块,启动看门狗,看门狗中断服务函数对所述eeprom进行读写;

s3,运行linux系统,用户可通过proc接口访问所述eeprom中记录的设备重启信息;

s4,若所述嵌入式设备发生断电重启,直接关闭所述嵌入式设备,等待设备再次上电启动,返回步骤s1;

若所述嵌入式设备收到reboot重启命令,在eeprom中记录所述reboot重启信息,重启所述嵌入式设备,之后关闭所述嵌入式设备,并返回步骤s1;

若所述嵌入式设备发生看门狗重启,linux系统进入所述看门狗中断服务函数,在eeprom中记录所述看门狗重启信息,关闭所述嵌入式设备,返回步骤s1。

进一步地,所述eeprom的存储空间包括非断电重启标志区、重启次数统计区和数据记录区,所述数据记录区根据所述嵌入式设备重启时间先后存储地址值依次增加。

进一步地,所述步骤s3中,所述设备重启信息包括所述断电重启信息、reboot重启信息和看门狗重启信息。

进一步地,所述步骤s3中,用户通过proc接口访问eeprom中记录的设备重启信息时,可擦除部分或全部设备的重启信息,或者,根据eeprom的存储空间,删除较早的设备重启信息。

进一步地,所述步骤s1中,加载eeprom驱动程序后,判断嵌入式设备是否为断电重启,具体包括以下步骤:

s11,读取所述eeprom中非断电重启标志区的值;

s12,判断非断电重启标志区的值,若为1(即,非断电重启),则修改此区域的值为0;

s13,判断非断电重启标志区的值,若为0(即,断电重启),则读取所述eeprom中重启次数统计区的值,将此值加1后更新此区域;

s14,根据s13中统计的重启次数计算下一块可用数据记录区的起始地址空间,并将上次断电重启信息记录入eeprom数据记录区。

进一步地,所述步骤s2中,看门狗中断服务函数对所述eeprom进行读写,具体包括以下步骤:

s21,读取所述eeprom中重启次数统计区的值,将此值加1后更新此区域;

s22,将所述eeprom中非断电重启标志区的值写1;

s23,根据s21中统计的重启次数计算下一块可用数据记录区的起始地址空间,并将当前设备运行时间和内核信息记录入此数据记录区。

进一步地,所述步骤s4中,所述嵌入式设备收到reboot重启命令,在eeprom中记录所述reboot重启信息,具体为:

s41,所述嵌入式设备收到reboot命令,将eeprom中的非断电重启标志区写1;

s42,读取eeprom中的重启次数统计区的值,将此值加1后更新此区域;

s43,根据步骤s42统计的重启次数计算下一块可用数据记录区的起始地址空间,并将当前系统运行时间和内核信息记录入此数据记录区。

本发明的有效结果:

采用本发明所述重启状态记录方法,可统计嵌入式设备过去多次重启的记录信息,包括断电重启、看门狗重启和reboot重启。在用户层面可通过终端命令行下的proc接口,直接获取设备重启记录信息,也可直接管理eeprom中记录的设备重启信息。为嵌入式设备的稳定性维护提供了较佳的支持途径。

附图说明

图1是本发明eeprom通过i2c总线扩展情况;

图2是本发明实例中eeprom使用分布情况;

图3是本发明机制划分的四个工作阶段;

图4是本发明所述重启状态记录过程。

具体实施方式

为了使本发明的目的、技术方案更加清楚明白,以下结合实例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。下面结合附图对本发明的应用原理作详细的描述。

本发明涉及的嵌入式设备可移植运行linux系统,最小系统需包括一个处理芯片(例如,arm架构系列芯片s3c2240、hisi3516a)、运行内存sdram以及flash存储和eeprom存储器件等。

本发明使用的所述eeprom是带电可擦除可编程只读存储器,一种掉电后数据不丢失的存储芯片,用于记录设备每次重启的状态数据和时间数据。通常为i2c总线式串口通信,在存储空间不够的情况下可扩展多块eeprom存储芯片,可参照图1。

所述的reboot命令属于linux系统busybox中的一个命令,用户可在命令行终端执行此命令完成嵌入式设备的重启操作,在本发明中,reboot不仅仅需要完成重启操作,而且在设备重启之前需要向eeprom设备中记录下此次设备重启的状态数据和时间,并将设备重启次数计数值加一,在本发明中需修改reboot命令源码,重新编译busybox工具,并替换进linux内核。

所述的eeprom驱动程序,linux驱动程序代码实现,其工作需完成基本的i2c通信,即实现基本的eeprom存储芯片的读写操作。在加载eeprom驱动程序时,需检查eeprom上的非断电重启标志位是否被写1,用于判断嵌入式设备掉电启动的特殊情况,并清除此位为下次设备关机重启做准备。若为掉电重启,此驱动程序还需完成设备的上次掉电重启的状态记录,并写入eerpom中。另外,在eeprom驱动程序中增加linux系统下的proc接口,提供给用户便于用户读取eeprom中记录的设备重启记录,管理此设备的重启记录信息。

所述的嵌入式设备关机前的状态数据,本发明记录嵌入式设备关机重启的三种状态。第一种为设备断电重启,这种情况下内存中的数据会全部丢失,断电重启后内存中的数据为随机的数据。第二种为设备不断电软重启,即reboot命令重启,不断电软重启之前先在eeprom中记录下必要的数据信息,再重启嵌入式设备。第三种为设备不断电异常重启,由设备看门狗重启,在设备程序运行异常后程序不再喂狗,触发看门狗中断,在中断服务函数接口中先将内核的关键寄存器信息记录进eeprom,然后重启设备。

所述的eeprom存储空间,需将eeprom的存储空间划分为以下几种不的同功能区域:1、非断电重启标志区,主要用于区别嵌入式设备断电重启状态;2、重启次数统计区,主要用于统计嵌入式设备重启次数;3、数据记录区,此区域是按照设备重启时间先后存储地址值依次增加的固定大小区块,其中包括设备重启时间等信息,可参考图2。

所述的看门狗linux内核模块是linux系统下的看门狗驱动程序,首先该嵌入式设备必须支持看门狗功能,且支持看门狗中断。在本发明中,嵌入式设备软件运行异常后,首先会触发看门狗中断,进入看门狗服务函数中。看门狗服务函数需要完成此次设备关机重启前的信息记录工作,需向eeprom设备中写入必要的记录信息。这种设备异常重启需重点关注,可将内核中的关键信息记录入eeprom存储芯片中,便于用户取用分析设备问题所在。

本实施例在jz2440开发平台完成,嵌入式微处理器为s3c2440,是三星公司开发的一款基于arm9内核的微处理器。eeprom芯片为cat24c128,共16kb。eeprom内部存储数据地址范围为0x0000—0x3fff,可参考图2。

如图3-4所示,本发明所述方法的关键四个阶段分别为:s1-嵌入式设备启动阶段、s2-看门狗模块加载阶段、s3-嵌入式设备运行阶段和s4-嵌入式设备重启阶段。下面将针对各个阶段做详细阐述。

嵌入式设备启动阶段,此阶段需完成eeprom存储芯片的驱动程序加载,可将此驱动模块编译进内核,或者将此驱动模块编译为内核模块,每次嵌入式设备启动在脚本中加载。此阶段完成工作主要为读取eeprom存储芯片上的非断电重启标志区,数字1表示上次设备重启为reboot重启或者watchdog重启,数字0表示上次设备重启为断电重启。若此值为1,擦除此标志区并写入0;若此值为0,将eeprom中的设备重启次数统计区的数值加1,并消耗一块block区,用于记录上次断电重启的状态,并记录当前系统时间到此block区。可参考图2。

看门狗驱动模块加载阶段,代码实现,此阶段需完成看门狗的驱动程序和看门狗中断服务函数中对eeprom的读写操作,为嵌入式设备运行异常情况做准备,一旦发生异常,系统首先进入看门狗中断服务函数中,该函数的工作分为三步:1、读取eeprom的设备重启次数统计区的值,并将此值加1后更新此区域;2、将eeprom的非断电重启标志区写1;3、根据步骤1统计的设备重启次数计算出下一块可用block区的起始地址空间(例如,此次为第3次重启,将消耗block3区,该区域的起始地址为:0x0000+1+1+(3-1)*sizeof(block)=0x0082,此处取sizeof(block)大小为64bytes,可参考图2),并将当前系统运行时间和其他关键内核信息记录入此block区域。

嵌入式设备运行阶段,此阶段主要有eeprom驱动程序支持,提供proc接口给用户,便于用户通过proc接口访问eeprom中记录的设备重启信息,以及管理此信息,例如擦除部分或者全部设备的重启记录信息等。也可提供一些较高级的管理方式,可根据eeprom的存储空间实际大小,自适应的删除较早的设备重启状态记录信息,为接下来的设备重启状态数据提供可用空间。

嵌入式设备重启阶段,系统运行过程中,也在等待设备运行结束这个状态的到来。第一种为,设备突然断电,在下次设备启动加载eeprom驱动时,会根据eeprom的非断电重启状态区判断上次设备重启是否为断电重启,并做相应的信息记录。第二种为,设备接收到软件下发的重启命令reboot,这里需修改reboot命令,代码实现,并重新编译busybox替换到设备中,reboot命令需完成的工作有一下三步:1、写1到eeprom非断电重启标志区;2、读取eeprom的设备重启次数统计区的值,并将此值加1后更新此区域;3根据步骤2统计的设备重启次数计算出下一块可用block区的起始地址空间,并将当前系统运行时间和其他信息记录入此block区域,最后重启设备。第三种为,设备系统运行异常,导致触发看门狗中断,在看门狗中断服务函数中,写eeprom标志以及异常运行状态数据,并重启设备。

本发明所述方法的逻辑总结如下:

s1,启动嵌入式设备,加载eeprom驱动程序,判断所述嵌入式设备是否为断电重启,若是,在eeprom中记录所述断电重启信息;若否,擦除非断电重启标志;

s2,加载看门狗驱动模块,启动看门狗,看门狗中断服务函数对所述eeprom进行读写;

s3,运行linux系统,用户通过proc接口访问所述eeprom中记录的设备重启信息;

s4,若所述嵌入式设备发生断电重启,直接关闭所述嵌入式设备,等待设备再次上电启动,返回步骤s1;

若所述嵌入式设备收到reboot重启命令,在eeprom中记录所述reboot重启信息,重启所述嵌入式设备,之后关闭所述嵌入式设备,并返回步骤s1;

若所述嵌入式设备发生看门狗重启,linux系统进入所述看门狗中断服务函数,在eeprom中记录所述看门狗重启信息,关闭所述嵌入式设备,返回步骤s1。

如此循环,用户可在linux系统环境下通过proc接口访问eeprom中记录的设备重启信息,查看上次或过去多次设备重启状态的记录。

以上所述,仅是本发明的较佳实施例而已,并非是对本发明作任何其他形式的限制,依据本发明的技术实质所作的任何修改或等同变化,仍属于本发明所要求保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1