本文共 1450 字,大约阅读时间需要 4 分钟。
基于pstore和ramoops实现在非易失性内存中保存panic日志
在内核开发过程中,有时需要在非易失性内存中保存panic日志以供调试和分析。这可以通过ramoops模块实现,但需要进行一系列配置和准备工作。
在开始操作之前,需要提前知道用来保存panic日志的非易失性内存的起始地址和长度。例如,可以使用以下内核配置参数:
ramoops.mem_address=0x11ff000000ramoops.mem_size=0x1000000
这表示内存块从物理地址0x11ff000000开始,大小为16M。
在内核代码中,确保ramoops驱动被正确配置和编译。具体来说,需要检查以下文件:
fs/pstore/ram_core.c
其中,request_mem_region函数需要根据实际情况选择使用persistent_ram_vmap或persistent_ram_iomap来映射物理地址到内核线性地址空间。
对于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
在完成上述配置后,重启系统并登录系统后,检查是否成功加载了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
更多关于ramoops模块的配置和使用,可以参考以下文档:
Documentation/ramoops.txtDocumentation/ABI/testing/pstore/
如需进一步了解ramoops模块的实现和使用方法,可以参考相关技术博客和开发文档。
转载地址:http://wznfk.baihongyu.com/