参考 以下内容:
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种级别,他们分别为

#defineKERN_EMERG""/* system is unusable*/#defineKERN_ALERT""/* action must be taken immediately*/#defineKERN_CRIT""/* critical conditions*/#defineKERN_ERR""/* error conditions*/#defineKERN_WARNING""/* warning conditions*/#defineKERN_NOTICE""/* normal but significant condition*/#defineKERN_INFO""/* informational*/#defineKERN_DEBUG""/* 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错误码