1.简介
pstore(persistent storage)
主要用于存储内核异常时的log信息。实现方式是,管理一块“非易失性的存储空间”,如不断电的RAM或外部存储,当系统异常时,将log信息写到pstore管理的存储空间,直到下一次系统正常时,在将log读出来,以文件形式提供给用户使用。
ramoops指的是采用ram保存oops信息的一个功能,在内核开关中用4个开关控制:PSTORE_CONSOLE控制是否保存控制台内核输出,PSTORE_PMSG控制是否保存控制台用户输出,PSTORE_FTRACE控制是否保存函数调用序列,PSTORE_RAM控制是否保存panic/oops信息。
pstore简单来说就是一个小文件系统。主要是读取Android设备内核日志时会用到该模块。
2.整体框架
代码路径:fs/pstore
很简单,一共就6个文件,不做过多分析
框架如下
3.配置
3.1.dts
32bit操作系统如下配置
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
ramoops_mem@90008000 {
compatible = "ramoops_mem";
reg = <0x90008000 0x100000>;
record-size = <0x0 0x20000>;
console-size = <0x0 0x20000>;
ftrace-size = <0x0 0x20000>;
pmsg-size = <0x0 0x20000>;
};
};
ramoops {
memory-region = <&reserved-memory>;
status = "okay";
};
由于dts指定的是物理地址,如果内核地址为0x80008000那么可以把pstore地址配置为0x90008000,留出256M空间给内核使用。reg这么配置是32位。每个日志是128KB,总大小是1M,最多可有8个。