sysrq阅读记录

article/2025/9/24 14:57:15

sysrq

文章目录

  • sysrq
    • 使用
    • 初始化
    • 操作列表
      • 更改`log`等级
      • 重启
      • 强制触发`panic`
      • 打印相关锁信息
      • 发送`SIGTERM`终止进程信号
      • 人为触发`OOM Killer`
      • 人为发送`SIGKILL`信号
      • 对设备进行解冻
      • 虚拟终端授信
      • 打印所有CPU的寄存器信息和堆栈信息
      • 打印内存信息
      • 对实时线程的`nice`值进行修改
      • 打印寄存器信息
      • 打印定时器相关信息
      • 复位键盘模式
      • 紧急同步
      • 打印进程信息
      • 重新挂载所有文件系统为只读
      • 打印`blocked(D)`进程信息
      • 打印`traceing`信息

使用

内核文档中有说如何使用:

在这里插入图片描述

  • b :立即重启系统,无同步或卸载磁盘的操作
  • c :通过写NULL指针手动触发系统崩溃。如果配置了crashdump,会生成crashdump
  • d :显示所有持有的锁
  • e :将SIGTERM信号发送给所有进程,初始化init进程和内核进程除外
  • f :调用oom killer杀死内存消耗进程,如果没有杀死进程也不会触发panic
  • g :由内核kdgb使用
  • h :显示帮助信息
  • i :发送SIGKILL信号给所有进程,初始化init进程和内核进程除外
  • j :强制解冻ioctl(FIFREEZE)冻结的文件系统
  • k :安全访问秘钥(SAK)杀死当前虚拟终端(虚拟控制台)上的所有进程
  • l :显示所有活动CPU的堆栈回溯
  • m :将内存信息打印在当前终端
  • n :用于修改RT实时任务的nice值修改
  • o :关闭系统(如果配置支持的话)
  • p :打印当前寄存器和标志
  • q :打印每个CPU在使用的高精度定时器hrtimer列表(不是普通的定时器)
  • r :关闭键盘原始模式,并设置为XLATE
  • s :尝试同步所有已挂载的文件系统
  • t :打印当前任务列表及信息
  • u :尝试以只读的方式重新挂载所有文件系统
  • v :强制还原帧缓冲控制台;打印ETM缓冲区的信息(ARM特定)
  • w :打印不可打断的任务(blocked-D状态的任务)
  • xpowerpc上用的
  • ysparc-64上用的
  • z :打印ftrace缓冲区内容
  • 0-9 :设置控制台日志级别,控制哪些内核信息将被打印到控制台

每一个sysrq的键对应的后面的代码其实都挺庞大的,比如panicoom killer、堆栈信息和寄存器信息打印等,每一块后面的代码都需要花很多时间去阅读,后续有机会的话慢慢补上。

初始化

sysrq初始化入口:

在这里插入图片描述

proc文件创建:

在这里插入图片描述

proc输入参数处理:
在这里插入图片描述

判断是否开启sysrq功能:

在这里插入图片描述

sysrq注册处理:

在这里插入图片描述

读取设备树的配置,用一组按键来检测是否需要去复位系统,类似于Linux重启密码。

在这里插入图片描述

connect时注册工作队列任务以及定时器任务:

在这里插入图片描述

初始化的工作任务,给connect注册的handle发送事件:

在这里插入图片描述

定时器任务是同步后进行重启:处理按键发现是重启后如果有设置重启延时,那么延时一段时间后重启。

在这里插入图片描述

sysrq断开连接时,对相应的资源进行释放:

在这里插入图片描述

过滤器过滤事件,对于EV_KEY按键事件,调用sysrq_handle_keypress()进行处理:

在这里插入图片描述

这里就对按键按下进行处理:

在这里插入图片描述

在这里插入图片描述

根据不同的按键去获取对应的操作集:

在这里插入图片描述

在这里插入图片描述

获取操作集的过程:

在这里插入图片描述

不同范围的key在数组中的位置需要减去不同的基数:

在这里插入图片描述

操作列表

在这里插入图片描述

在这里插入图片描述

更改log等级

在这里插入图片描述

这个console_loglevel是在printk.h头文件中定义的,暂时就先不关注了,后续如果看printk的代码的话可以多了解一下。

在这里插入图片描述

重启

在这里插入图片描述

lockdep_off是配置了CONFIG_LOCKDEP死锁检测时会用到;local_irq_enable关中断。

重启内核最后还是走的machine_restart(),在arm64重启的文档中有分析过一下过程,这里就不写了。

在这里插入图片描述

在这里插入图片描述

强制触发panic

在这里插入图片描述

乖乖,强制往空指针里面写数据,后面应该会触发ARM64的异常,具体的异常流程还不了解,后续可以学习一下,目前来看只有arch/arm64/kernel/traps.c里面的die函数:

在这里插入图片描述

打印相关锁信息

在这里插入图片描述

打印相关锁信息的函数:

在这里插入图片描述

在这里插入图片描述

打印进程信息及锁信息:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

发送SIGTERM终止进程信号

在这里插入图片描述

略过内核进程和init进程发送SIGTERM信号:

在这里插入图片描述

人为触发OOM Killer

在这里插入图片描述

人为发送SIGKILL信号

在这里插入图片描述

SIGTERM信号一样,忽略内核进程和init进程。

对设备进行解冻

在这里插入图片描述

遍历所有超级块设备执行thaw_bdev()

在这里插入图片描述

thaw_bdev()看注释是解锁文件系统:

在这里插入图片描述

虚拟终端授信

在这里插入图片描述

暂时不了解。

打印所有CPU的寄存器信息和堆栈信息

在这里插入图片描述

打印寄存器信息:

在这里插入图片描述

打印栈回溯信息:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

打印内存信息

在这里插入图片描述

遍历pgd以及pgd下的zone区打印内存信息:

在这里插入图片描述

对实时线程的nice值进行修改

在这里插入图片描述

将用户的实时进程的nice值改为0:

在这里插入图片描述

打印寄存器信息

在这里插入图片描述

打印定时器相关信息

在这里插入图片描述

遍历每个CPU打印相关的定时器事件信息:

在这里插入图片描述

复位键盘模式

在这里插入图片描述

暂时不看。

紧急同步

在这里插入图片描述

遍历所有超级块以及块设备同步:

在这里插入图片描述

打印进程信息

在这里插入图片描述

在这里插入图片描述

遍历所有进程,过滤后打印进程信息:

在这里插入图片描述

暂时不细看了:

在这里插入图片描述

重新挂载所有文件系统为只读

在这里插入图片描述

遍历所有超级块,将非只读的超级块挂载为只读:

在这里插入图片描述

打印blocked(D)进程信息

在这里插入图片描述

通打印进程信息,多了一个过滤条件TASK_UNINTERRUPTIBLE

打印traceing信息

在这里插入图片描述

开启了ftrace相关的选项才有,暂时不看。


http://chatgpt.dhexx.cn/article/a8LMZkXU.shtml

相关文章

Linux:内核调试之内核魔术键sysrq

在linux系统下,我们可能会遇到系统某个命令hang住的情况,通常情况下,我们会查看/proc/pid/wchan文件,看看进程处于什么状况,然后进一步查看系统日志或者使用strace跟踪命令执行时的系统调用等等方法来分析问题。我们知…

Linux内核sysrq调试调优

1.sysrq机制的文件系统节点 2.内核注册: 在drivers/tty/sysrq.c中注册的此文件节点, 系统依赖配置CONFIG_MAGIC_SYSRQ. 3. 实现接口 ops table的定义 以触发crash的c命令为例(echo c > /proc/sysrq-trigger) 触发方式很简单,直接在空指针…

了解sysrq-trigger

了解下sysrq-trigger,便于观察内核调试信息和debug。 echo m > /proc/sysrq-trigger 导出内存分配信息 echo t > /proc/sysrq-trigger 导出当前任务状态信息 echo c > /proc/sysrq-trigger 产生空指针panic事件,人为导致系统崩溃 echo p >…

Linux sysrq使用

Linux sysrq使用 1. 介绍 Sysrq被称为”魔术组合键”, 是内建于Linux内核的调试工具。只要内核没有完全锁住(还可以响应中断),不管内核在做什么事情,使用这些组合键都可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。…

决策树CART介绍*

属性划分使用Gini指数 回顾:ID3使用信息增益,C4.5使用信息增益率。都是基于计算熵,熵运算涉及到对数运算,耗时。 CART使用Gini指数代替信息增益。 直观上,Gini指数表示从数据集D随机抽取两个样本,类别不一…

cart决策树Matlab实现,CART决策树的理解及其实现

CART决策树介绍 使用CART(Classification and regression tree)算法构建的决策树是二叉树,它对特征进行二分,迭代生成决策树。 CART回归树 假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集 $$D\{(x_1,y_1),(x_2,y_2…

CART决策树算法Python实现 (人工智能导论作业)

文章目录 决策树的介绍CART决策树算法简介基尼指数 CART决策树生成算法及Python代码实现 决策树的介绍 决策树是以树的结构将决策或者分类过程展现出来,其目的是根据若干输入变量的值构造出一个相适应的模型,来预测输出变量的值。预测变量为离散型时&am…

CART树分类、回归、剪枝实现

决策树ID3,C4.5是多叉树,CART树是一个完全二叉树,CART树不仅能完成分类也能实现回归功能,所谓回归指的是目标是一个连续的数值类型,比如体重、身高、收入、价格等,在介绍ID3,C4.5其核心是信息熵…

sklearn 决策树例子_sklearn CART决策树分类

sklearn CART决策树分类 决策树是一种常用的机器学习方法,可以用于分类和回归。同时,决策树的训练结果非常容易理解,而且对于数据预处理的要求也不是很高。 理论部分 比较经典的决策树是ID3、C4.5和CART,分别分析信息增益、增益率…

机器学习--详解CART树剪枝原理和过程

这一节主要讲前面多次的提到的决策树问题,前面的决策树生成算法递归的产生决策树,直到不能继续分支或者达到要求为止,这样的决策树往往对训练数据的分类很准确,因为他就是基于训练数据的熵或者基尼不存度进行分类的,因…

【树模型与集成学习】(task2)代码实现CART树(更新ing)

学习心得 task2学习GYH大佬的回归CART树,并在此基础上改为分类CART树。 更新ing。。 这里做一些对决策树分裂依据更深入的思考引导:我们在task1证明离散变量信息增益非负时曾提到,信息增益本质上就是联合分布和边缘分布乘积的kl散度&#xf…

CART 决策树

ID3使用信息增益,而C4.5使用增益比率进行拆分。 在此,CART是另一种决策树构建算法。 它可以处理分类和回归任务。 该算法使用名为gini索引的新度量标准来创建分类任务的决策点。 CART树的核心是决策规则将通过GINI索引值决定。 停止条件。 如果我们继续…

CART决策树算法

在进行自动识别窃漏电用户分析实战时,用到了CART决策树算法,所以整理记录该算法的内容。内容整理参考文档决策树——CART算法及其后的参考文章。 一、CART(classification and regression tree)分类与回归树,既可用于…

CART树算法解析加举例

算法步骤 CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在…

ID3、C4.5与CART树的联系与区别

ID3、C4.5与CART树的联系与区别: 参考博客: 链接1 链接2 特征选择准则: ID3的特征选择准则为信息增益,即集合D的经验熵H(D)与给定特征A下条件经验熵H(D|A)之差,即: H(D)表现了数据集D进行分类的不确定性…

决策树构建算法—ID3、C4.5、CART树

决策树构建算法—ID3、C4.5、CART树 决策树构建算法—ID3、C4.5、CART树 构建决策树的主要算法ID3C4.5CART三种算法总结对比 决策树构建算法—ID3、C4.5、CART树 构建决策树的主要算法 ID3C4.5CART (Classification And Rsgression Tree) ID3 ID3算法…

3-6 决策树、CART树、GBDT、xgboost、lightgbm一些关键点梳理

目录 1、决策树 2、CART树 2.1 CART分类树-输入样本特征;输出样本对应的类别(离散型) 2.2 CART回归树-输入样本特征;输出样本的回归值(连续型) 3、GBDT 3.1 提升树 3.2 GBDT 4、xgboost 4.1 损失函数及节点展开 4.2 精确贪心算法及相关近似算法…

CART树回归

说明:本博客是学习《python机器学习算法》赵志勇著的学习笔记,其图片截取也来源本书。 基于树的回归算法是一类基于局部的回归算法,通过将数据集切分成多份,在每一份数据中单独建模。与局部加权线性回归不同的是,基于…

剪枝、cart树

一、剪枝 1. 为什么要剪枝 在决策树生成的时候,更多考虑的是训练数据,而不是未知数据,这会导致过拟合,使树过于复杂,对于未知的样本不准确。 2. 剪枝的依据——通过极小化决策树的损失函数 损失函数的定义为&#x…

【机器学习】决策树——CART分类回归树(理论+图解+公式)

🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 数据集 完整源码&…