linux内核调试的几个方法

news/2024/12/28 18:41:50/

参考 以下内容:
Linux 笔记:
https://xuesong.blog.csdn.net/article/details/109522945?spm=1001.2014.3001.5502

printk:

printk在内核源码中用来记录日志信息的函数,只能在内核源码范围内使用。用法和printf非常相似;
printk函数主要做两件事情:第一件就是将信息记录到log中,而第二件事就是调用控制台驱动来将信息输出。
1.日志级别
printk相比printf来说还多了个:日志级别的设置,用来控制printk打印的这条信息是否在终端上显示的,当日志级别的数值小于控制台级别时,printk要打印的信息才会在控制台打印出来,否则不会显示在控制台!

在我们内核中一共有8种级别,他们分别为

#define	KERN_EMERG	"<0>"	/* system is unusable			*/
#define	KERN_ALERT	"<1>"	/* action must be taken immediately	*/
#define	KERN_CRIT	"<2>"	/* critical conditions			*/
#define	KERN_ERR	"<3>"	/* error conditions			*/
#define	KERN_WARNING	"<4>"	/* warning conditions			*/
#define	KERN_NOTICE	"<5>"	/* normal but significant condition	*/
#define	KERN_INFO	"<6>"	/* informational			*/
#define	KERN_DEBUG	"<7>"	/* debug-level messages			*/

2.控制台级别

#define MINIMUM_CONSOLE_LOGLEVEL  1   /*可以使用的最小日志级别*/
#define DEFAULT_CONSOLE_LOGLEVEL  7 /*比KERN_DEBUG 更重要的消息都被打印*/
#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL,/*控制台日志级别,优先级高于该值的消息将在控制台显示*/
/*默认消息日志级别,printk没定义优先级时,打印这个优先级以上的消息*/
DEFAULT_MESSAGE_LOGLEVEL,
/*最小控制台日志级别,控制台日志级别可被设置的最小值(最高优先级)*/
MINIMUM_CONSOLE_LOGLEVEL,
DEFAULT_CONSOLE_LOGLEVEL,/* 默认的控制台日志级别*/
};

在进行查看的时候,可以使用命令 cat /proc/sys/kernel/printk来查看这四个值
在这里插入图片描述
可以看出7 4 1 7 的来源在console_printk 这;

3.printk函数使用
在使用printk时我们会将日志级别放到最开始的位置,如

printk(KERN_EMERG "EMERG\n");

但无论当前控制台日志级别是何值,即使没有在控制台打印出来,可以通过两种方法查看日志:

第一种是使用dmesg命令打印。第二种是通过cat /proc/kmsg来打印。

另外如果配置好并运行了 syslogd 或 klogd,没有在控制台上显示的 printk 的信息也会追加到 /var/log/messages.log 中。

休眠唤醒

在这里插入图片描述

Oops

在这里插入图片描述

在这里插入图片描述

用户侧

在这里插入图片描述

ioremap

在这里插入图片描述

devmem

在这里插入图片描述

dump_stack

内核调用的打印 在这里插入图片描述
在这里插入图片描述

动态打印

在这里插入图片描述
修改宏,重定义
在这里插入图片描述

debugfs

linux kernel中计算代码运行时间

linux错误码


http://www.ppmy.cn/news/65957.html

相关文章

delete方法删除对象数组中元素导致原始数据被修改

记录一个自己在码代码过程中遇到的问题。 要求&#xff1a;删除数组对象中每一组对象中的一个属性。 下面是我原始的写法(当然是错误的)。 const { log } require("console");// 用于测试delete方法&#xff0c;删除对象中的指定元素 const testForDelete () >…

Problem E. 矩阵游戏 (2023年ccpc河南省赛)

原题链接&#xff1a; https://codeforces.com/gym/104354 题意&#xff1a; 有一个n*m的矩阵&#xff0c;只有三种字符&#xff1a;0,1和?。从[1,1]走到[n,m],每次只能向下走或者向下走。当走到1的时候得一分&#xff0c;走到0的时候不得分&#xff0c;走到?的时候可以将他…

linux中查看某个文件夹下文件的个数和大小

一、统计某个目录的文件和子目录的大小 1、stat指令 stat命令 主要用于显示文件或文件系统的详细信息&#xff0c;该命令的语法格式如下&#xff1a; -f  不显示文件本身的信息&#xff0c;显示文件所在文件系统的信息-L  显示符号链接-t  简洁模式&#xff0c;只显示…

WuThreat身份安全云-TVD每日漏洞情报-2023-05-08

漏洞名称:SBS20 SCANSERVJS 命令注入 漏洞级别:严重 漏洞编号:CVE-2023-2564 相关涉及:SBS20 SCANSERVJS 之前的 2.27.0 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-11118 漏洞名称:Parallels Desktop for Mac Toolgate组件路径穿越漏洞 漏…

python中字符分割为列表,以及将列表中的字符串转为数字

目录 1、字符分割为列表 2、将列表中的字符串转为数字 3、map() 函数 1、字符分割为列表 a "1 2 3 4 5 6" b a.split( ) print(b)# [1, 2, 3, 4, 5, 6] 2、将列表中的字符串转为数字 a [1, 2, 3, 4, 5, 6] b list(map(int,a)) print(b)# [1, 2, 3, 4, 5, 6…

Laf Assistant:云开发从未如此爽快!

原文链接&#xff1a;https://forum.laf.run/d/67 工欲善其事&#xff0c;必先利其器。在编写代码时&#xff0c;IDE 也是我们不可或缺的。它可以让我们更高效地完成代码编写&#xff0c;提高开发效率。因此&#xff0c;IDE 是我们编写代码中最亲密的伙伴之一。 虽然 Laf 云开…

运维自动化工具 Ansible的安装部署和常用模块介绍

ansible安装 ansible的安装有很多种方式 官方文档&#xff1a;https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.ht ml https://docs.ansible.com/ansible/latest/installation_guide/index.html 下载 https://releases.ansible.com/ansible…

设计模式之【适配器模式】,两个人之间确实需要月老的搭线~

文章目录 一、什么是适配器模式1、适配器模式使用场景2、代理、桥接、装饰器、适配器 4 种设计模式的区别3、适配器模式结构 二、类适配器1、实例 三、对象适配器1、实例 四、接口适配器1、实例 五、源码中的应用 一、什么是适配器模式 适配器模式&#xff08;Adapter Design …