Poco M3安卓设备/sys/fs/pstore为空无法使用问题修复咨询
Poco M3 设备/sys/fs/pstore目录为空修复方案
你已经完成pstore内核配置开启、模块加载、root权限配置、自动挂载、SELinux切为宽容模式排除权限拦截,目录仍为空的问题,可按以下步骤逐一排查修复:
1. 校验ramoops预留内存配置有效性
pstore本身不提供持久存储能力,依赖ramoops后端预留专属物理内存段存日志,90%以上的空目录问题都是这步配置缺失或错误导致:
- 执行命令查看当前生效的ramoops参数:
cat /sys/module/ramoops/parameters/*
- 正常配置下以下参数不能为0或空值:
mem_address:预留内存的物理起始地址mem_size:预留内存总大小,最低建议设置为1MB(0x100000)console_size:内核控制台日志存储分区大小,设为非0值才会保存崩溃前的dmesgpmsg_size:用户态日志存储分区大小,按需设置
- 如果上述参数存在0/空值,说明ramoops没有拿到可用的预留内存:
你可以选择修改设备树(DTB)中的ramoops节点补全配置,也可以直接在内核启动cmdline中追加参数,参数示例如下,具体地址和大小需要匹配你设备的内存布局:
注意:Poco M3为高通平台,选内存地址时要避开调制解调器、ADSP、GPU、连续内存分配器已经占用的预留段,可以通过ramoops.mem_address=0x9ff00000 ramoops.mem_size=0x100000 ramoops.console_size=0x40000 ramoops.pmsg_size=0x40000cat /proc/iomem查看当前内存占用情况,优先选DDR高位的空闲内存段。
2. 确认是否触发过日志写入条件
pstore不会主动存储系统正常运行时的全量日志,只有触发特定异常事件时才会把日志写入预留内存,下次启动后才会在/sys/fs/pstore下生成对应文件,未触发写入时目录本来就是空的:
- 可触发pstore写入的常见场景:
- 内核panic崩溃
- 长按电源键10秒以上触发的硬重启(系统正常流程的软重启不一定触发写入)
- 可以主动触发写入做验证:保存好当前设备运行的所有数据后,执行
echo c > /proc/sysrq-trigger手动触发内核panic,等设备自动重启后再查看pstore目录。
3. 排查内存地址冲突问题
如果ramoops参数配置正常,主动触发panic重启后目录仍为空,基本是你设置的ramoops内存段和其他硬件/内核模块的预留内存重叠,写入的日志在启动过程中被覆写了:
- 核对
/proc/iomem的输出,确认你分配给ramoops的地址段,没有和modem、adsp、cdsp、gpu、contiguous mem这类标记为reserved的段重叠 - 高通平台设备最稳妥的方式是把ramoops放在DDR内存的最末尾位置,比如6G内存版本的Poco M3物理内存最高地址为0x17FFFFFFF,分配1MB空间的话,把
mem_address设为0x17FE00000基本不会出现冲突。
4. 其他少见问题排查
- 检查内核配置,确认没有开启
CONFIG_PSTORE_ZONE_INIT_ON_MOUNT选项,该选项会在pstore挂载时直接清空存储区的历史日志,如果系统启动时pstore挂载时机早于日志读取流程,会导致日志被直接擦除,关闭该选项即可 - 如果使用第三方编译内核,确认没有定制补丁把pstore的日志挂载点重定向到其他路径,部分定制内核会把崩溃日志存到
/vendor/fs/pstore这类自定义路径下。
内容的提问来源于stack exchange,提问作者Poperton
相关产品推荐
相关产品推荐

