
NVDIMM原理与应用之四:基于pstore 和 ramoops保存Kernel panic日志
发布日期:2025-04-22 10:55:17
浏览次数:8
分类:精选文章
本文共 1457 字,大约阅读时间需要 4 分钟。
在非易失性内存中保存panic日志
基于pstore
和ramoops
实现在非易失性内存中保存panic
日志
在内核开发过程中,有时需要在非易失性内存中保存panic
日志以供调试和分析。这可以通过ramoops
模块实现,但需要进行一系列配置和准备工作。
1. 确定内存块的起始地址和大小
在开始操作之前,需要提前知道用来保存panic
日志的非易失性内存的起始地址和长度。例如,可以使用以下内核配置参数:
ramoops.mem_address=0x11ff000000ramoops.mem_size=0x1000000
这表示内存块从物理地址0x11ff000000
开始,大小为16M
。
2. 修改内核以支持ramoops驱动
在内核代码中,确保ramoops
驱动被正确配置和编译。具体来说,需要检查以下文件:
fs/pstore/ram_core.c
其中,request_mem_region
函数需要根据实际情况选择使用persistent_ram_vmap
或persistent_ram_iomap
来映射物理地址到内核线性地址空间。
3. 在内核命令行中指定启动参数
对于ramoops
模块的内核(若使用内核自带的ramoops
模块),需要在内核启动参数中添加以下内容:
ramoops.mem_address=0x11ff000000ramoops.mem_size=0x1000000pstore.backend=ramoops
对于ramoops
模块的内核(若使用内核外部的ramoops
模块),需要确保内核命令行中包含以下参数:
pstore.backend=ramoops
此外,在内核启动后,需要通过以下命令加载ramoops
驱动:
modprobe ramoops.ko ramoops.mem_address=0x11ff000000 ramoops.mem_size=0x1000000
需要注意的是,ramoops.ko
模块依赖reed_solomon.ko
,请提前安装好reed_solomon.ko
。可以通过以下命令生成reed_solomon.ko
:
cd lib/reed_solomon && make -C /lib/modules/`uname -r`/build modulesmodprobe reed_solomon
4. 测试和验证
在完成上述配置后,重启系统并登录系统后,检查是否成功加载了ramoops
驱动。可以通过以下命令查看日志:
dmesg | grep pstore
例如,输出中可能包含以下信息:
[ 301.921706] console [pstore-1] enabled[ 301.921841] pstore: Registered ramoops as persistent store backend[ 301.921862] ramoops: attached 0x1000000@0x11ff000000, ecc: 0/0
此外,可以通过以下命令检查/sys/fs/pstore
目录下的文件:
ls -alrt /sys/fs/pstore
5. 参考文档
更多关于ramoops
模块的配置和使用,可以参考以下文档:
Documentation/ramoops.txtDocumentation/ABI/testing/pstore/
如需进一步了解ramoops
模块的实现和使用方法,可以参考相关技术博客和开发文档。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月02日 23时47分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!