一种嵌入式系统调试信息处理方法及装置的制造方法_3

文档序号:9235373阅读:来源:国知局
先级可如前所述)以及嵌入式系统实际配置的存储器,确定调试信息的存储器件(本实例中用debug_device表示),在debug_device中创建用于保存调试信息的日志文件(本实例中用log_file表示)。文件名可根据当前时间来定义,比如,日志文件名可为yymmddhhssmm (yy表示年份,mm表示月份,dd表示日期,hh表示小时,mm表示分钟,ss表示秒),一方面可以便于后续按照调试信息存储时间顺序进行日志文件的维护,另一方面也便于从存储器查找或输出需要的调试信息。
[0065]2、存储容量判断
[0066]计算debug_device的空余容量(debug_device中除了存储调试信息,还有可能存储其他数据),若当前空余容量小于设定容量阈值,则依据log_file的创建时间删除以前保存的部分log_file,比如,根据log_file文件名确定log_file文件的创建时间,将最早创建的一个或多个log_file删除;也可以先将未压缩的log_file文件进行压缩,然后再进行存储容量判断,若压缩后debug_deViCe的空余容量仍小于设定容量阈值,则依据创建时间先后删除最早创建的一个或多个log_f ile。其中,容量阈值可预先设定,并且容量阈值的大小可根据实际需求来设定,比如可以设置为debug_deViCe的存储容量的30%。
[0067]3、保存日志文件的路径信息
[0068]将log_file的路径信息(本实施例中用debug_path表示)保存到/tmp目录下的文件debug_file中,以便在嵌入式软件启动时,根据debug_file文件进行文件内存映射。进一步的,还可在debug_file中创建一个跨进程的线程互斥锁(本实施例中用debug_mutex表示),以便在嵌入式系统运行过程中,保证当前仅有一个线程向log_file写数据,以避免线程之间的冲突。
[0069]4、创建管道
[0070]在/tmp目录下创建一个FIFO (First Input First Output,先入先出)管道(本实施例中用fifo_pipe表示)。管道用于在不同线程(threads)之间直接传输数据。从本质上说,管道是一种文件,实际上,管道是一个固定大小的缓冲区,一个线程发送数据到该缓冲区,另一个线程从该缓冲区读取数据,以实现多个线程之间的数据共享。
[0071]进一步地,在创建的管道中可写入控制信息,该控制信息用来控制是否将调试信息写入log_file文件,以提高系统灵活性。比如,对于某种类型的异常事件或者对于某个应用程序的异常事件,可以通过在管道中写入控制信息的方式来控制针对该种异常事件或应用程序,是否向log_file文件写入调试信息。
[0072]5、创建线程互斥锁
[0073]为了保证在同一时刻仅有一个线程可以通过管道向log_file写入调试信息,可在dibug_file中创建一个跨进程的线程互斥锁(本实例中用debug_mutex表示)。该操作为可选操作。线程互斥锁是Iinux系统中的一种技术,本实例中创建线程互斥锁的操作可参照Iinux系统中的该技术来实现。
[0074]进一步地,为了节省debug_deViCe的存储空间,可以每隔一段时间t (时间t的长度可以根据需要预先设定),检测debug_device的空余容量。如果发现debug_device的空余容量在持续地减少,已经低于设定容量阈值,并且在debUg_deViCe上保存的所有数据中,嵌入式系统的调试信息所占用的比例高于设定的比例阈值(该比例阈值可根据需要来设定),则可依据log_file的创建时间删除以前保存的部分log_file,比如,根据log_file文件名确定log_file文件的创建时间,将最早创建的一个或多个log_file删除;也可以先将未压缩的log_file文件进行压缩,然后再进行存储容量判断,若压缩后debug_deViCe的空余容量仍小于设定容量阈值,则依据创建时间先后删除最早创建的一个或多个log_file。
[0075]以上各操作没有严格时序要求,比如,可先将日志文件的路径信息保存到debug_file中,再对degub_device的空余容量进行判断。
[0076]优选地,以上操作均可有一后台程序执行,S卩,一旦嵌入式系统启动,该后台程序将自动运行以执行上述配置操作。
[0077]嵌入式系统运行过程中,若有应用程序启动,则执行以下操作:
[0078]使用内存映射的方式,将文件debug_file (保存有log_file的路径信息debug_path)映射到内存中,以便后续进行log_file文件的读写操作。操作系统通过内存映射文件来读写存储器中的log_file文件。内存映射方式以及基于内存映射文件对物理存储器中的文件进行读写操作的具体实现,可参照Linux系统的相关文件操作规定来实现。
[0079]在应用程序的运行过程中实时检测该应用程序或嵌入式系统的运行状态,当检测到异常事件发生时,通过管道在log_file文件中写入调试信息。在向log_file写入调试信息时可使用跨进程的线程互斥锁debugjmitex锁定其他线程,以保证当前只有一个线程向log_file写入调试信息。
[0080]进一步地,若在创建fifo_pipe时,向fifo_pipe中写入了控制信息以控制是否需要将调试信息写到log_file中,则在异常事件发生后,若根据该控制信息判断允许写入,则通过fifo_pipe向log_file写入调试信息,若根据该控制信息判断禁止写入调试信息,则不向log_file中写入调试信息。进一步地,若禁止向log_file文件写入调试信息,则可以进一步地在嵌入式系统连接有串口终端或网络终端的情况下,将调试信息通过串口终端或网络终端输出。
[0081]进一步地,在嵌入式系统运行过程中,还可以按照设定周期检测存储器的空余容量,若存储器的空余容量低于设定容量阈值,且存储器存储的所有信息中所述嵌入式系统的调试信息所占比例高于设定比例,则可根据嵌入式系统的调试信息的保存时间,删除部分调试信息;或者,将尚未压缩的调试信息进行压缩,若将调试信息压缩后,存储器的空余容量仍低于所述设定容量阈值,且存储器存储的所有信息中嵌入式系统的调试信息所占比例高于所述设定比例,则根据嵌入式系统的调试信息的保存时间,删除部分调试信息。
[0082]基于相同的技术构思,本发明实施例还提供了一种嵌入式系统调试信息处理装置,该装置可应用于本发明的上述实施例。
[0083]参见图3,为本发明实施例提供的嵌入式系统调试信息处理装置的结构示意图,如图所示,该装置可包括:
[0084]检测单元31用于检测嵌入式系统的运行过程;获取单元32用于当检测单元31检测到异常事件发生时,获取所述异常事件发生时的嵌入式系统状态信息;处理单元33用于将所述获取单元获取到的嵌入式系统状态信息作为调试信息保存到所述嵌入式系统的存储器34中。
[0085]优选地,处理单元33还可在所述嵌入式系统启动时,确定用于存储调试信息的存储器;其中,若所述嵌入式系统配置有SD卡,则将所述SD卡确定为用于存储调试信息的存储器,若所述嵌入式系统未配置SD卡但配置有通用串行总线USB闪存驱动器,则将所述USB闪存驱动器确定为用于存储调试信息的存储器,若所述嵌入式系统未配置SD卡和USB闪存驱动器,则将所述嵌入式系统内置的闪存FLASH确定为用于存储调试信息的存储器。相应的,处理单元33具体用于:将获取到的嵌入式系统状态信息作为调试信息保存到所确定出的存储器中,所述存储器用于存储所述嵌入式系统发生异常事件时的调试信息的存储器中。
[0086]优选地,处理单元33还可在所述嵌入式系统启动时,创建跨进程的线程互斥锁。相应的,处理单元33可利用所述线程互斥锁锁定第一线程以外的其他线程,使用所述第一线程将获取到的嵌入式系统状态信息作为调试信息保存到所述嵌入式系统的存储器34中。
[0087]优选地,处理单元33还可在所述嵌入式系统启动时,创建用于存储所述嵌入式系统发生异常事件时的调试信息的日志文件,并为所述日志文件创建管道,所述管道中包含用于指示是否允许写入调试信息的控制信息。相应的,处理单元33可根据所述管道中的控制信息判断是否允许写入调试信息,若允许,则通过所述管道将获取到的嵌入式系统状态信息作为调试信息写入所述日志文件。
[0088]优选地,处理单元33还可按照设定周期检测所述存储器34的空余容量,若所述存储器34的空余容量低于设定容量阈值,且所述存
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1