说明:
本文基于内核:linux-4.19.125
概述
最近因工作关系,启用了linux的pstore功能。
pstore的主要功能是存储linux内核崩溃前的内核日志,具体可参考内核文档介绍:
linux-4.19.125\Documentation\admin-guide\ramoops.rst
也可以参考宋宝华老师的博客:Linux pstore 实现自动“抓捕”内核崩溃日志_宋宝华-CSDN博客
在原理方面,宋宝华老师写的非常详细。
我这里仅记录我的操作总结。
总体来说,分为4步:
1. 配置内核config,开启pstore功能
2. 配置dts,指定用于存储log的RAM地址空间
3. 触发kernel panic
4. 抓取Log
第一步:配置内核config
在menuconfig中选择内核pstore模块
$ make menuconfig |-> File systems |-> Miscellaneous filesystems
|-> Persistent store support # pstore支持
|-> Log kernel console messages # console 前端
|-> Log user space messages # pmsg 前端
|-> Persistent function tracer # ftrace 前端
|-> Log panic/oops to a RAM buffer # pstore/ram 后端
|-> Log panic/oops to a block device # pstore/blk 后端

配置后增加的Kernel config项:
CONFIG_PSTORE=y
CONFIG_PSTORE_DEFLATE_COMPRESS=y
CONFIG_PSTORE_COMPRESS=y
CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y
CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_RAM=y
CONFIG_REED_SOLOMON=y
CONFIG_REED_SOLOMON_ENC8=y
CONFIG_REED_SOLOMON_DEC8=y
第二步:配置dts
在 reserved-memory中添加ramoops配置:
reserved-memory {
#address-cells = <1>;
#size-cells = <1>;
ranges;
......
ramoops@66000000{
compatible = "ramoops";
reg = <0x66000000 0xf0000>;
record-size = <0x40000>;
console-size = <0x80000>;
ftrace-size = <0x20000>;
};
};
第三步:触发panic
手动触发panic:
echo c > /proc/sysrq-trigger
第四步:抓取Log
这一步很关键,我就因为少了这一步一直没有抓取到Log。
panic后重启设备,注意不能掉电,否则是没法抓取到Log的。
在设备重启后,命令行输入:
mount -t pstore pstore /sys/fs/pstore
这样就可以在/sys/fs/pstore目录下看到抓取到的Log了:
![]()
本文介绍了如何在Linux 4.19.125内核上启用并配置pstore功能,以捕获内核崩溃前的日志。主要步骤包括:修改内核配置启用pstore及相关前端和后端支持,配置dts预留RAM空间,触发kernel panic以及在系统重启后抓取并查看保存的Log。通过这些步骤,可以有效地获取和分析内核故障信息。
307

被折叠的 条评论
为什么被折叠?



