1. pstore
pstore是persistent storage的缩写。内核发生异常时如果能将日志等信息保存下来不丢失,那么就可以通过这些信息来定位问题。不同的平台可以提供的存储位置不同,例如有些平台支持硬盘,有些不支持。除了平台差异,异常类型也决定了在发生异常时该存储位置是否还可用。
pstore的目标是提供一套通用的接口用来存储异常信息。pstore以文件系统的形式提供用户空间接口,可以通过mount命令挂载到指定目录下边,如xxx\pstore,那么保存的信息将以文件的形式出现在该目录下,可以使用文件读操作获取调试信息,通过删除操作清除调试信息。
在内核中使用pstore前需要首先初始化一个pstore_info类型的结构体变量,然后调用int pstore_register(struct pstore_info *)注册。
pstore_info结构体中有些变量可以不需要赋值,但是读写,删除用到的函数指针需要赋值。
pstore在内核中的开关是CONFIG_PSTORE,在2.6.39版本中第一次合入主线,3.10.40中的ramoops使用的就是pstore机制。pstore提供的是一套可扩展的机制,目前提供的类型包括以下四种:
PSTORE_TYPE_DMESG表示内核日志,PSTORE_TYPE_MCE表示硬件错误,PSTORE_TYPE_CONSOLE表示控制台输出,PSTORE_TYPE_FTRACE表示函数调用序列。
2. ramoops
ramoops指的是采用ram保存oops信息的一个功能,这个功能最开始不是基于pstore实现的,在3.10.40中,它已经采用pstore机制实现了,在内核开关中用3个开关控制:PSTORE_CONSOLE控制是否保存控制