当前位置: 首页 > news >正文

【openwrt学习笔记】Dying Gasp功能和pstore功能的配置(高通 ipq95xx)

目录

    • 一、Dying Gasp信号
      • 1.1 概念
      • 1.2 实现原理
    • 二、pstore 功能
      • 2.1 概念
      • 2.2 实现原理
    • 三、openwrt中开启pstore功能
      • 3.1 软硬件参数
      • 3.2 各文件修改
        • 3.2.1 defconfig
        • 3.2.2 dts(ipq9574-default-memory.dtsi)
        • 3.2.3 fs/pstore/ram.c
    • 四、测试
      • 4.1 挂载
      • 4.2 触发命令和效果

参考资料:
ADSL的Dying gasp作用
Linux pstore 实现自动“抓捕”内核崩溃日志
Android7.1 RK3399 使用 ramoops 机制查看开机 Kernel Log
Pstore 的一些记录
pstore 工具配置及使用
pstore
The test I have done to pstore/blk

一、Dying Gasp信号

1.1 概念

Dying Gasp(临终之息)是一种通信技术术语,主要用于宽带通信(如DSL,数字用户线路)中。当通信设备(如DSL调制解调器)遇到电源中断或故障时,Dying Gasp信号被发送出去,以通知服务提供商关于这个问题。这个信号可以视为设备的最后一次尝试,表明其即将失去连接或停止工作。

Dying Gasp信号的目的是允许网络运营商和服务提供商快速识别问题,从而更有效地处理故障和提高用户满意度。这个信号有助于避免长时间的故障检测和定位过程,加速恢复服务。

通常,Dying Gasp信号在以下情况下触发:
电源中断:例如,在电力故障、设备过热或设备故障等情况下,设备可能会突然关闭,发送Dying Gasp信号。
硬件故障:例如,当设备内部硬件出现故障,如电源供应器或其他关键组件损坏时,设备可能会发送Dying Gasp信号。

1.2 实现原理

芯片厂商在设计芯片的时候会设计一个Dying gasp 性能模块在芯片内。此模块通过监测外部输入电压来实现Dying gasp功能。
因为为使得此功能能正常使用的前提是芯片必须还能正常工作,并且要向头端发送一定时间长度的信号,所以在论坛定义的Dying gasp信号有效时间内,供芯片正常工作的各种电源的电压不能小于此芯片规格书所描述的最小工作电压。
也就是说,监测点开始启动的电压与芯片各工作电压之差不能小于法定Dying gasp信号时间长度。
Dying Gasp顾名思义 - “死前喘口气”,利用最后存储的一点电能让CPE把最后的状态信息发送出去。 包括两个部分的电路:
1、 大电容储能,当外部输入电源掉电时,存储在大电容中的电能释放能量供整个核心电路再工作需要的喘口气的时间,一般几个ms。电路很简单 - 二极管 大电容(电解的,容量取决于电路板的功耗以及能够正常整流稳压的电压范围) 电压比较器。
2 、ADSL的主芯片有一个输入管脚检测电压比较器的输出电平,一旦触发就可以发出中断信号让系统进入“留遗嘱”状态。

二、pstore 功能

2.1 概念

pstore是persistent storage的缩写。内核发生异常时如果能将日志等信息保存下来不丢失,那么就可以通过这些信息来定位问题。
不同的平台可以提供的存储位置不同,例如有些平台支持硬盘,有些不支持。除了平台差异,异常类型也决定了在发生异常时该存储位置是否还可用。
pstore 的目标是提供一套通用的接口用来存储异常信息。pstore以文件系统的形式提供用户空间接口,可以通过mount命令挂载到指定目录下边,如xxx\pstore,那么保存的信息将以文件的形式出现在该目录下,可以使用文件读操作获取调试信息,通过删除操作清除调试信息。

pstore 在内核中的开关是 CONFIG_PSTORE,pstore 提供的是一套可扩展的机制,提供如下类型:

PSTORE_TYPE_DMESG, 表示内核日志
PSTORE_TYPE_MCE, 表示硬件错误
PSTORE_TYPE_CONSOLE, 表示控制台输出,所有内核信息。
PSTORE_TYPE_FTRACE, 表示函数调用序列, ftrace 信息。

ramoops 指的是采用 ram 保存 oops 信息的一个功能,这个功能从 3.10.40 开始采用 pstore 机制来实现,内核中的开关控制:

PSTORE_PMSG,用户空间信息,/dev/pmsg0,pmsg-ramoops-
PSTORE_CONSOLE,控制台输出,所有内核信息,console-ramoops-
PSTORE_FTRACE,函数调用序列, ftrace 信息。
PSTORE_RAM, panic/oops 信息

2.2 实现原理

pstore是Linux内核中的一个功能,它允许在系统崩溃、重启或关机后,保存和检查内核日志和其他相关信息。以下是pstore功能的一些基本实现原理:

  1. 持久存储:pstore使用持久存储(例如NVRAM,非易失性随机存取内存)或者保留区域(例如RAM的特定区域)来存储信息。这些存储区域在系统重启或关机后不会被清除。

  2. 日志和崩溃转储:当系统崩溃,或者由于某些原因,内核需要保存状态信息时,会将这些信息(例如panic信息,oops信息,console日志等)保存到pstore中。

  3. 内核接口:内核提供了一套接口(pstore API),允许内核的其他部分将信息写入到pstore中。

  4. 用户空间访问:在系统重启后,用户空间的程序(例如systemd-journald,kdump等)可以通过文件系统接口(例如/sys/fs/pstore)来访问pstore中的信息,以进行进一步的分析和处理。

三、openwrt中开启pstore功能

3.1 软硬件参数

openwrt版本19.07,但是很多软件包都进行了升级,这个影响不大。芯片是高通ipq9574,比较新的芯片,内核版本5.4。大致了解一下,开整。

root@405BE:/# ubus call system board
{"kernel": "5.4.164","hostname": "*******","model": "****/REV0","board_name": "qcom,ipq9574*****","release": {"distribution": "OpenWrt","version": "19.07-SNAPSHOT","revision": "r0-6ff4ad7","target": "ipq95xx/generic","description": "OpenWrt 19.07-SNAPSHOT r0-6ff4ad7"}
}

3.2 各文件修改

3.2.1 defconfig

新增下列config配置:

CONFIG_PSTORE=y
# CONFIG_PSTORE_DEFLATE_COMPRESS is not set
# CONFIG_PSTORE_LZO_COMPRESS is not set
# CONFIG_PSTORE_LZ4_COMPRESS is not set
# CONFIG_PSTORE_LZ4HC_COMPRESS is not set
# CONFIG_PSTORE_842_COMPRESS is not set
# CONFIG_PSTORE_ZSTD_COMPRESS is not set
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_PMSG=y
CONFIG_PSTORE_RAM=y

注释:若存储空间比较有限,可以将pstore的内容压缩后再保存到backend设备上,相应的压缩算法可以通过配置选项CONFIG_PSTORE_COMPRESS_DEFAULT或模块参数compress指定。上述注释掉的内容就是相关压缩算法,这里暂时不用。

3.2.2 dts(ipq9574-default-memory.dtsi)

高通提供此文件,直接新增就行,文件中有内存信息。

	/*		  Default Profile* +=========+==============+========================+* |        |              |                         |* | Region | Start Offset |          Size           |* |        |              |                         |* +--------+--------------+-------------------------+* |        |              |                         |* |        |              |                         |* |        |              |                         |* |        |              |                         |* | Linux  |  0x42000000  |         123MB           |* |        |              |                         |* |        |              |                         |* |        |              |                         |* +--------+--------------+-------------------------+* |        |              |                         |* |        |              |                         |* | TZ App |  0x49B00000  |           6MB           |* |        |              |                         |* |        |              |                         |* +--------+--------------+-------------------------+* |        |              |                         |* | uboot  |  0x4A100000  |           4MB           |* |        |              |                         |* +--------+--------------+-------------------------+* |  SBL   |  0x4A500000  |           1MB           |* +--------+--------------+-------------------------+* |        |              |                         |* | TZ+HYP |  0x4A600000  |           4MB           |* |        |              |                         |* +--------+--------------+-------------------------+* |  smem  |  0x4AA00000  |           1MB           |* +--------+--------------+-------------------------+* |        |              |                         |* |        |              |                         |* | WLAN   |              |                         |* |   Q6   |  0x4AB00000  |          43MB           |* |        |              |                         |* |        |              |                         |* +--------+--------------+-------------------------+* | M3 Dump|  0x4D600000  |           1MB           |* +--------+--------------+-------------------------+* | WLAN   |              |                         |* | Q6 ETR |  0x4D700000  |           1MB           |* | Region |              |                         |* +--------+--------------+-------------------------+* | caldb  |  0x4D800000  |           5MB           |* +--------+--------------+-------------------------+* |        |              |                         |* |  Pine0 |  0x4DD00000  |          53MB           |* |        |              |                         |* +--------+--------------+-------------------------+* |        |              |                         |* |  Pine1 |  0x51200000  |          53MB           |* |        |              |                         |* +--------+--------------+-------------------------+* |        |              |                         |* |  MHI0  |  0x54700000  |           9MB           |* |        |              |                         |* +--------+--------------+-------------------------+* |        |              |                         |* |  MHI1  |  0x55000000  |           9MB           |* |        |              |                         |* +=================================================+* |                                                 |* |                                                 |* |                                                 |* |            Rest of memory for Linux             |* |                                                 |* |                                                 |* |                                                 |* +=================================================+*/

使用此命令查看到板子里内存情况

# cat proc/iomem

在这里插入图片描述
查看上述dtsi文件,55000000 ~ 55900000 已经使用。 55900000-7fffffff可以使用,所以可以从55900000开始配置一段内存进行使用。

	rampoos_ram: ramoops_ram@55900000  {compatible = "ramoops_ram";reg = <0x0 0x55900000 0x0 0x00140000>;};/*这是一个名为 ramoops_ram@55900000的节点,
这个节点相关的硬件设备是一个RAM-based Oops/Panic logger,它记录内核panic和oops的消息。
名称中的@55900000表示这个设备在物理地址空间中的起始地址。下面是字段的详细解释:
compatible = "ramoops_ram";: 这个属性描述了硬件设备的类型或模型。
在这里,它的值是 ramoops_ram,表示这是一个RAM-based Oops/Panic logger。reg = <0x0 0x55900000 0x0 0x00140000>;: reg属性通常用于描述设备在物理内存中的位置和大小。
在这里,这个设备的起始地址是0x55900000,大小为0x00140000(1.3125MB)。
第一个0x0和第三个0x0通常表示地址空间或者偏移量,在这个例子中,
它们表示该设备是在主地址空间中定义的,没有偏移。
*/
3.2.3 fs/pstore/ram.c
-static ulong ramoops_console_size = MIN_MEM_SIZE;
+static ulong ramoops_console_size = 256*1024UL;-static unsigned long long mem_address;
+static unsigned long long mem_address = 0x55900000;- static ulong mem_size;
+ static ulong mem_size=0x100000;

四、测试

4.1 挂载

上述修改完成后,可以进行编译固件,烧录成功后,直接使用以下命令进行挂载。

mount -t pstore pstore /sys/fs/pstore

4.2 触发命令和效果

# echo c > /proc/sysrq-trigger 

使用此命令可以触发崩溃,重启,生成console-ramoops-0和dmesg-ramoops-0两个文件。
内容大致如下,dmesg-ramoops-0,保存了崩溃时的一些打印。
在这里插入图片描述
console-ramoops-0中书崩溃重启之前,控制台的打印信息。
在这里插入图片描述

注意:只有触发内核崩溃才会有两个文件生成,如果是输入命令重启、开门狗重启、poweroff或者kill触发的重启都只会生成
console-ramoops-0的重启文件。当然,如果是直接断电重启,那么就没有文件生成。

相关文章:

【openwrt学习笔记】Dying Gasp功能和pstore功能的配置(高通 ipq95xx)

目录 一、Dying Gasp信号1.1 概念1.2 实现原理 二、pstore 功能2.1 概念2.2 实现原理 三、openwrt中开启pstore功能3.1 软硬件参数3.2 各文件修改3.2.1 defconfig3.2.2 dts(ipq9574-default-memory.dtsi)3.2.3 fs/pstore/ram.c 四、测试4.1 挂载4.2 触发命令和效果 参考资料&am…...

使用RestSharp和C#编写程序

以下是一个使用RestSharp和C#编写的爬虫程序&#xff0c;用于爬取www.zhihu.com上的视频。此程序使用了https://www.duoip.cn/get_proxy来获取代理IP。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks…...

Leetcode 2911. Minimum Changes to Make K Semi-palindromes

Leetcode 2911. Minimum Changes to Make K Semi-palindromes 1. 解题思路2. 代码实现 题目链接&#xff1a;2911. Minimum Changes to Make K Semi-palindromes 1. 解题思路 这一题属实也是把我坑惨了…… 坦率地说&#xff0c;这道题本身并没有啥难度&#xff0c;但是坑爹…...

Node学习笔记之包管理工具

一、概念介绍 1.1 包是什么 『包』英文单词是package &#xff0c;代表了一组特定功能的源码集合 1.2 包管理工具 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作 借助包管理工具&#xff0c;可…...

分发糖果[困难]

优质博文&#xff1a;IT-BLOG-CN 一、题目 n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 【1】每个孩子至少分配到1个糖果。 【2】相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩…...

Java验证邮箱格式是否正确的正则表达式

Java验证邮箱格式是否正确的正则表达式 import java.util.regex.Pattern;public class EmailUtil {final static Pattern partern Pattern.compile("[a-zA-Z0-9][\\.]{0,1}[a-zA-Z0-9][a-zA-Z0-9]\\.[a-zA-Z]");/*** 验证输入的邮箱格式是否符合* param email* ret…...

快速排序原理JAVA和Scala实现-函数式编程的简洁演示

快速排序原理JAVA和Scala实现-函数式编程的简洁演示 目录 快速排序原理JAVA和Scala实现-函数式编程的简洁演示 C语言快速排序实现 Java 快速排序实现 Scala 快速排序实现 本文章向大家介绍快速排序原理JAVA和Scala实现-函数式编程的简洁演示&#xff0c;主要内容包括C语言…...

如何在linux服务器上安装Anaconda与pytorch

如何在linux服务器上安装Anaconda与pytorch 1&#xff0c;安装anaconda1.1 下载anaconda安装包1.2 安装anaconda1.3 设计环境变量1.4 安装完成验证 2 Anaconda安装pytorch2.1 创建虚拟环境2.2 查看现存环境2.3 激活环境2.4 选择合适的pytorch版本下载2.5 检测是否安装成功&…...

FPGA设计FIR滤波器低通滤波器,代码及视频

名称&#xff1a;FIR滤波器低通滤波器 软件&#xff1a;Quartus 语言&#xff1a;Verilog/VHDL 本资源含有verilog及VHDL两种语言设计的工程&#xff0c;每个工程均可实现以下FIR滤波器的功能。 代码功能&#xff1a; 设计一个8阶FIR滤波器&#xff08;低通滤波器&#xff…...

【数据结构】排序--快速排序

目录 一 概念 二 快速排序的实现 1. hoare版本 (1)代码实现 (2)单趟排序图解 (3) 递归实现图解 (4)细节控制 (5)时间复杂度 (6)三数取中优化 2 挖坑法 (1)代码实现 (2)单趟图解 3 前后指针法 (1) 代码实现 (2) 单趟图解 ​4 优化子区间 5 非递归快速排序 …...

【试题040】多个逻辑或例题2

1.题目&#xff1a;设int n0;&#xff0c;执行表达式n ||(n-1) ||(n0)||(n1)||(n2)后n的值是 &#xff1f; 2.代码解析&#xff1a; 逻辑或 || 运算符是一个短路运算符&#xff0c;它从左到右依次计算表达式&#xff0c;如果遇到一个为真&#xff08;非零&#xff09;的值&am…...

自然语言处理---Self Attention自注意力机制

Self-attention介绍 Self-attention是一种特殊的attention&#xff0c;是应用在transformer中最重要的结构之一。attention机制&#xff0c;它能够帮助找到子序列和全局的attention的关系&#xff0c;也就是找到权重值wi。Self-attention相对于attention的变化&#xff0c;其实…...

推荐收藏系列!2万字图解Hadoop

今天我用图解的方式讲解pandas的用法&#xff0c;内容较长建议收藏&#xff0c;梳理不易&#xff0c;点赞支持。 学习 Python 编程&#xff0c;给我的经验就是&#xff1a;技术要学会分享、交流&#xff0c;不建议闭门造车。一个人可能走的很快、但一堆人可以走的更远。如果你…...

Python高级篇(08):生成器

一、生成器定义和作用 定义&#xff1a;Python中&#xff0c;一边循环一边计算的机制&#xff0c;生成器对象也是迭代器对象&#xff0c;支持for循环、next()方法…等。作用&#xff1a;循环的过程中不断推算出后续的元素&#xff0c;这样就不必创建完整的list&#xff0c;从而…...

力扣100114. 元素和最小的山形三元组 II(中等)

题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 。 如果下标三元组 (i, j, k) 满足下述全部条件&#xff0c;则认为它是一个 山形三元组 &#xff1a; i < j < knums[i] < nums[j] 且 nums[k] < nums[j] 请你找出 nums 中 元素和最小 的山形三元组…...

LuatOS-SOC接口文档(air780E)--lcdseg - 段式lcd

常量 常量 类型 解释 lcdseg.BIAS_STATIC number 没偏置电压(bias) lcdseg.BIAS_ONEHALF number 1/2偏置电压(bias) lcdseg.BIAS_ONETHIRD number 1/3偏置电压(bias) lcdseg.BIAS_ONEFOURTH number 1/4偏置电压(bias) lcdseg.DUTY_STATIC number 100%占空比(d…...

实现图像处理和分析的关键技术

在计算机视觉中&#xff0c;我们可以利用摄像头捕捉到的图像来进行各种分析和处理。以下是一些常见的计算机视觉任务&#xff1a; 对象检测&#xff1a;识别图像中的特定对象并标注其位置。人脸识别&#xff1a;识别和验证人脸身份。姿态估计&#xff1a;估计人体的姿态和动作…...

【C++学习笔记】内联函数

1. 概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调 用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数&#xff0c;在编译期间编译器会用函数…...

macOS Sonoma 14.1RC(23B73)发布

黑果魏叔10 月 18 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.1 RC更新&#xff08;内部版本号&#xff1a;23B73&#xff09;&#xff0c;本次更新距离上次发布隔了 7 天。 macOS Sonoma 14.1RC&#xff08;23B73&#xff09;的更新内容主要包括以下方面&…...

数据结构数组 Array 手写实现,扩容原理

数组数据结构 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型数据的集合。 数组的特点&#xff1a; 数组是相同数据类型的元素集合&#xff08;int 不能存放 double&#xff09;数组中各元素的存储是有先…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...