目录
- 简介
- 环境配置
- 内核配置
- 参考
- 备注
简介
Pstore(Persistent store support)是用于系统发生oops或panic时,自动保存内核log buffer中的日志。随着功能不断完善,Duo S使用Linux 5.10已经支持保存console日志、ftrace消息和用户空间日志的收集,也支持将这些消息保存在不同的存储设备中,如内存、块设备或mtd设备。 为了提高灵活性和可扩展性,pstore将以上功能分别抽象为前端和后端,区别如下:
-
pstore
的前端,是指转存的日志类型,目前支持以下几个前端:- dmesg:主要是转存
Panic/Oops
时log_buf
里面的内核日志 - pmsg:提供给用户空间存储日志的入口,在Android里有看到被用于存储系统的日志。
- console:终端日志
- ftrace:
function trace
的信息
- dmesg:主要是转存
-
pstore
的后端,是指转存到什么类型的设备,目前支持以下几种后端:-
pstore/ram:Persistent Ram,重启不会丢数据的内存
-
pstore/blk:(v5.8以后的版本)所有可写的块设备,例如磁盘、U盘、emmc、NFTL nand等
-
mtd device:(v5.8以后的版本)mtd设备,例如 mtd nand。(mtd设备的支持依赖于 pstore/blk 后端,准确来说不是一种独立后端)
-
环境配置
source build/milkvsetup.sh
# Duo S
source device/milkv-duos-sd/boardconfig.sh
defconfig cv1813h_milkv_duos_sd
内核配置
修改配置文件:build/boards/cv181x/cv1813h_milkv_duos_sd/linux/cvitek_cv1813h_milkv_duos_sd_defconfig
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_sd/linux/cvitek_cv1813h_milkv_duos_sd_defconfig b/build/boards/cv181x/cv1813h_milkv_duos_sd/linux/cvitek_cv1813h_milkv_duos_sd_defconfig
index d07358d26..c1475d639 100644
--- a/build/boards/cv181x/cv1813h_milkv_duos_sd/linux/cvitek_cv1813h_milkv_duos_sd_defconfig
+++ b/build/boards/cv181x/cv1813h_milkv_duos_sd/linux/cvitek_cv1813h_milkv_duos_sd_defconfig
@@ -530,3 +530,7 @@ CONFIG_BT_HCIUART_H4=y
# CONFIG_BT_HCIVHCI is not set
# CONFIG_BT_MRVL is not set
# CONFIG_BT_MTKSDIO is not set
+
+CONFIG_PSTORE=y # PStore 功能开启
+CONFIG_PSTORE_CONSOLE=y # 前端:console
+CONFIG_PSTORE_RAM=y # 后端:ram
说明:
CONFIG_PSTORE=y
,PStore 功能开启;CONFIG_PSTORE_CONSOLE=y
,PStore 前端:console;CONFIG_PSTORE_RAM=y
,PStore 后端:ram;
修改后使用如下命令使修改生效并重新生成新uImage
# 配置
menuconfig_kernel
# 编译
build_kernel
待解决编译错误。---- 230408
参考
- 参考1. Linux pstore 实现自动“抓捕”内核崩溃日志
- 参考2. linux内核调试(三)内核崩溃日志抓取pstore
备注
-
Makefile保存精简后的defconfig为默认配置文件
diff --git a/build/Makefile b/build/Makefile index 9746743d1..28faaa083 100644 --- a/build/Makefile +++ b/build/Makefile @@ -300,6 +300,8 @@ kernel-menuconfig: ${KERNEL_OUTPUT_CONFIG_PATH} $(call print_target) ${Q}$(MAKE) -j${NPROC} -C ${KERNEL_PATH} O=${KERNEL_PATH}/${KERNEL_OUTPUT_FOLDER} menuconfig ${Q}$(MAKE) -j${NPROC} -C ${KERNEL_PATH} O=${KERNEL_PATH}/${KERNEL_OUTPUT_FOLDER} savedefconfig + ${Q}cmp -s ${KERNEL_DEFAULT_CONFIG_PATH} ${KERNEL_PATH}/${KERNEL_OUTPUT_FOLDER}/defconfig || \ + ${Q}cp -vb ${KERNEL_PATH}/${KERNEL_OUTPUT_FOLDER}/defconfig ${KERNEL_DEFAULT_CONFIG_PATH}