本发明涉及计算机领域,尤其涉及一种手机器件异常监控方法及设备。
背景技术:
手机产品开发过程中大量的问题和器件的异常相关,但是器件异常常具有小概率出现、不易观察。
现有的日志系统做不到手机器件异常的主动监控,为了获取错误时的信息往往需要长时间的抓取日志,在抓取到海量的信息后需要人工复核判断是否生成了有效的内容,这样的效率是及其低下的而且小概率问题需要尽量大的样本,传统方法很难做到大规模测试采样。
技术实现要素:
本发明的一个目的是提供一种手机器件异常监控方法及设备。
根据本发明的一个方面,提供了一种手机器件异常监控方法,该方法包括:
手机的内核器件向手机的内核空间注册为客户端;
所述内核空间获取各客户端的内核器件异常消息,并保存到对应的缓存;
所述用户空间通过监听或轮询的方式,从所述缓存获取并保存所述内核器件异常消息。
进一步的,上述方法中,手机的内核器件向手机的内核空间注册为客户端,包括:
判断当前客户端总数是否超出上限,若超出返回异常;
若未超出,申请客户端需要的缓存,若失败返回异常;
若申请成功,根据传入的注册信息初始化客户端的各成员变量,包括:缓存大小、名称和接口,以完成注册。
进一步的,上述方法中,所述内核空间获取各客户端的内核器件异常消息并保存到对应的缓存,包括:
当内核器件发生异常时,所述内核空间尝试抢占缓存,若抢占失败放弃此次上报,反之更新缓存的占用标志位,表明缓存被占用;
将对应当内核器件异常消息保存到对应的缓存后,更新对应的客户端的上报标志位;
工作任务执行中,遍历所有客户端的上报标志位,若客户端的上报标志位被设置,则唤醒等待该客户端对应的等待队列。
进一步的,上述方法中,根据传入的注册信息初始化客户端的各成员变量,包括:
根据传入的注册信息初始化客户端的各成员变量句柄;
所述用户空间通过监听的方式,从所述缓存获取并保存所述内核器件异常消息,包括:
遍历所有的客户端句柄;
进入监听服务主题,若没有已注册的客户端句柄,则监听服务进程挂起;
若有已注册的客户端句柄,则使用select监听所有的客户端句柄,监听服务进程挂起,等待内核空间收到任意一个客户端句柄的内核器件异常消息后唤醒;
从所述缓存获取并保存所述内核器件异常消息;
保存完所有内核器件异常消息后,再次调用select挂起监听服务进程,等待下一次的内核器件异常消息。
进一步的,上述方法中,从所述缓存获取并保存所述内核器件异常消息,包括:
判断客户端句柄是否合法,若不合法,则返回错误;
若合法,判断对应的缓存是否有可读取的内核器件异常消息,
若有,计算此次从所述缓存中读取的数据的大小,根据计算的读取的数据的大小,拷贝到对应大小的内核器件异常消息到用户空间进行保存;
更新已经读取的记录,若已经完全读取则清除对应缓存的占用标志位。
进一步的,上述方法中,所述用户空间通过轮询的方式,从所述缓存获取并保存所述内核器件异常消息,包括:
遍历所有的客户端;
进入轮询服务主体,若没有已注册的客户端,则轮询服务进程挂起,等待新增已注册的客户端后唤醒;
若有已注册的客户端,则开始计算轮询的时钟间隔,每个时钟间隔出发时检查是否有客户端的轮询周期已到,否则继续休眠;
针对轮询周期已到的客户端,调用客户端各自的查询状态接口,从所述缓存获取并保存所述内核器件异常消息。
根据本发明的另一方面,还提供了一种基于计算的设备,其中,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
手机的内核器件向手机的内核空间注册为客户端;
所述内核空间获取各客户端的内核器件异常消息,并保存到对应的缓存;
所述用户空间通过监听或轮询的方式,从所述缓存获取并保存所述内核器件异常消息。
根据本发明的另一方面,还提供了一种计算机可读存储介质,其上存储有计算机可执行指令,其中,该计算机可执行指令被处理器执行时使得该处理器:
手机的内核器件向手机的内核空间注册为客户端;
所述内核空间获取各客户端的内核器件异常消息,并保存到对应的缓存;
所述用户空间通过监听或轮询的方式,从所述缓存获取并保存所述内核器件异常消息。
与现有技术相比,本发明采用客户端-服务器的设计模式,任何一个器件的驱动都可以向本方案实现的内核模块注册客户端,实现较好的可扩展性和可维护性,在器件发生异常时候能主动发现和记录器件异常消息,能做到主动监控异常且能后台运行,在发生异常后能记录异常的相关信息。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出本发明第一实施例的手机器件异常监控方法的流程图;
图2示出本发明第二实施例的手机器件异常监控方法的流程图;
图3示出本发明第三实施例的手机器件异常监控方法的流程图;
图4示出本发明第四实施例的手机器件异常监控方法的流程图;
图5示出本发明第五实施例的手机器件异常监控方法的流程图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
本发明提供一种手机器件异常监控方法,所述方法包括:
步骤s1,手机的内核器件向手机的内核空间注册为客户端;
步骤s2,所述内核空间获取各客户端的内核器件异常消息,并保存到对应的缓存;
步骤s3,所述用户空间通过监听或轮询的方式,从所述缓存获取并保存所述内核器件异常消息。
在此,所述内核空间(kernel)通过标准内核设备接口向用户空间进程提供数据交互的通道,包括open/close/read/write/poll/ioctl等功能,从而使用户空间(userspace)可以方便的获取内核器件驱动提供的异常信息,所述用户空间与器件驱动之间采取c-s模式。
用户空间作为一个守护进程随着系统的启动而启动并会随系统运行一直存在,主要是监听进程-负责处理内核空间上报的内核器件异常消息,并根据配置文件的要求,保存对应的内核器件异常消息;轮询进程负责按照配置文件的要求,按时查询各客户端的状态,若发现异常保存对应的内核器件异常消息。
内核空间主要的作用是管理所有异常情况上报/异常数据保存,统一向用户空间进程提供命令通道和数据通道,所有使用内核空间的器件驱动定义为用户,通过注册客户端的方式向内核模块传递消息,并将异常数据保存在内核空间申请的缓存中,当有异常发生时候会统一向用户空间报告消息和异常数据。
本发明采用客户端-服务器的设计模式,任何一个器件的驱动都可以向本方案实现的内核模块注册客户端,实现较好的可扩展性和可维护性,在器件发生异常时候能主动发现和记录器件异常消息,能做到主动监控异常且能后台运行,在发生异常后能记录异常的相关信息。
如图1所示,本发明的手机器件异常监控方法一实施例中,步骤s1,手机的内核器件向手机的内核空间注册为客户端,包括:
步骤s11,判断当前客户端总数是否超出上限,若超出返回异常;
步骤s12,若未超出,申请客户端需要的缓存,若申请失败返回异常;
步骤s13,若申请成功,根据传入的注册信息初始化客户端的各成员变量,包括:缓存大小、名称和接口,以完成注册。
在此,本实施例可以实现客户端的可靠注册。
如图2所示,本发明的手机器件异常监控方法一实施例中,步骤s2,所述内核空间获取各客户端的内核器件异常消息并保存到对应的缓存,包括:
步骤s21,当内核器件发生异常时,所述内核空间尝试抢占缓存,若抢占失败放弃此次上报,反之更新缓存的占用标志位,表明缓存被占用;
步骤s22,将对应当内核器件异常消息保存到对应的缓存后,更新对应的客户端的上报标志位;
步骤s23,工作任务执行中,遍历所有客户端的上报标志位,若客户端的上报标志位被设置,则唤醒等待该客户端对应的等待队列。
在此,为避免多核并发对日志缓冲区的竞争设计了锁机制,提升效率。可以通过异常上报接口将对应当内核器件异常消息保存到对应的缓存,异常上报接口是提供给内核各器件以便上报、保存消息,当向内核空间注册了客户端后,客户端发生了异常时,需要首先抢占缓存避免出现冲突,然后保存异常数据,然后在上报异常消息,在用户空间完成读取前,缓存一直处于被抢占状态,避免数据被破坏。
本发明的手机器件异常监控方法一实施例中,步骤s13,根据传入的注册信息初始化客户端的各成员变量,包括:
步骤s13,根据传入的注册信息初始化客户端的各成员变量句柄。
在此,各个器件注册属于自己的客户端(deviceclent)句柄,后续的消息传递、异常数据上报通过该句柄独立完成;
如图4所示,步骤s3,所述用户空间通过监听的方式,从所述缓存获取并保存所述内核器件异常消息,包括:
步骤s311,遍历所有的客户端句柄;
步骤s312,进入监听服务主题,若没有已注册的客户端句柄,则监听服务进程挂起;
步骤s313,若有已注册的客户端句柄,则使用select监听所有的客户端句柄,监听服务进程挂起,等待内核空间收到任意一个客户端句柄的内核器件异常消息后唤醒;
步骤s314,从所述缓存获取并保存所述内核器件异常消息;
步骤s315,保存完所有内核器件异常消息后,再次调用select挂起监听服务进程,等待下一次的内核器件异常消息。
在此,在需要获取日志信息的位置预制信息,在条件成立时可以生成并保存异常信息,避免海量的信息导致效率低下。
android系统的内核采用linux,因此前者的日志系统基于后者实现。嵌入式系统开发过程中主要的调试手段就是查看日志信息,日志信息是用于记录系统的运行信息,如手机使用信息,故障的记录,信息以字符串的形式存在,它默认记录保存在手机的系统文件下,方便后续手机系统故障的定位,日志信息需要预置在相应的代码位置,在条件成立的情况下当代码运行到代码位置就会输出字符串。
监听服务进程负责接收来自内核的消息上报。
如图3所示,本发明的手机器件异常监控方法一实施例中,从所述缓存获取并保存所述内核器件异常消息,包括:
判断客户端句柄是否合法,若不合法,则返回错误;
若合法,判断对应的缓存是否有可读取的内核器件异常消息,
若有,计算此次从所述缓存中读取的数据的大小,根据计算的读取的数据的大小,拷贝到对应大小的内核器件异常消息到用户空间进行保存;
更新已经读取的记录,若已经完全读取则清除对应缓存的占用标志位。
在此,可以将异常数据读取接口提供给用户空间,通过内核空间提供的read操作完成异常数据读取操作。
如图5所示,本发明的手机器件异常监控方法一实施例中,步骤s3,所述用户空间通过轮询的方式,从所述缓存获取并保存所述内核器件异常消息,包括:
步骤s321,遍历所有的客户端;
步骤s322,进入轮询服务主体,若没有已注册的客户端,则轮询服务进程挂起,等待新增已注册的客户端后唤醒;
步骤s323,若有已注册的客户端,则开始计算轮询的时钟间隔,每个时钟间隔出发时检查是否有客户端的轮询周期已到,否则继续休眠;
步骤s324,针对轮询周期已到的客户端,调用客户端各自的查询状态接口,从所述缓存获取并保存所述内核器件异常消息。
在此,在需要获取日志信息的位置预制信息,在条件成立时可以生成并保存异常信息,避免海量的信息导致效率低下。
android系统的内核采用linux,因此前者的日志系统基于后者实现。嵌入式系统开发过程中主要的调试手段就是查看日志信息,日志信息是用于记录系统的运行信息,如手机使用信息,故障的记录,信息以字符串的形式存在,它默认记录保存在手机的系统文件下,方便后续手机系统故障的定位,日志信息需要预置在相应的代码位置,在条件成立的情况下当代码运行到代码位置就会输出字符串。
轮询服务进程根据配置文件的设定,定时检查客户端的工作状态并保存异常消息。
根据本发明的另一方面,还提供了一种基于计算的设备,其中,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
手机的内核器件向手机的内核空间注册为客户端;
所述内核空间获取各客户端的内核器件异常消息,并保存到对应的缓存;
所述用户空间通过监听或轮询的方式,从所述缓存获取并保存所述内核器件异常消息。
根据本发明的另一方面,还提供了一种计算机可读存储介质,其上存储有计算机可执行指令,其中,该计算机可执行指令被处理器执行时使得该处理器:
手机的内核器件向手机的内核空间注册为客户端;
所述内核空间获取各客户端的内核器件异常消息,并保存到对应的缓存;
所述用户空间通过监听或轮询的方式,从所述缓存获取并保存所述内核器件异常消息
本发明的各设备和存储介质实施例的详细内容,具体可参见各方法实施例的对应部分,在此,不再赘述。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本发明的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本发明的方法和/或技术方案。而调用本发明的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本发明的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本发明的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。