Linux内核调试输出
Linux内核调试输出
老是忘记,遂总结如下
输出等级
一般在内核中,调试输出函数为printk
,用法同printf
,但是printk输出的信息具有日志级别,日志级别是通过在printk()输出的字符串前加一个带尖括号的整数来控制的,如printk("<6>Hello, world!/n");
或printk(KERN_INFO "Hello, world!/n");
。内核中共提供了八种不同的日志级别,在linux/kernel.h
中有相应的宏对应:
1 |
未指定日志级别的 printk() 采用的默认级别是DEFAULT_MESSAGE_LOGLEVEL
,这个宏在kernel/printk.c
中被定义为整数 4,即对应KERN_WARNING
设置日志级别
在/proc/sys/kernel/printk
中会有4个数值(可由echo
修改),分别表示:当前控制台日志级别、未明确指定日志级别的默认消息日志级别、最小(最高)允许设置的控制台日志级别、引导时默认的日志级别。通过读写/proc/sys/kernel/printk
文件可读取和修改控制台的日志级别:
1 | # cat /proc/sys/kernel/printk |
当 printk中的消息日志级别小于当前控制台日志级别时,printk的信息(要有/n
符)就会在控制台上显示。
kmsg和dmesg方法查看
但无论当前控制台日志级别是何值,通过cat /proc/kmsg
(或使用dmesg)总能查看。另外如果配置好并运行了syslogd
或klogd
,没有在控制台上显示的printk的信息也会追加到/var/log/messages.log
中。
另一种使用dmesg命令来查看(新开一个shell,输入一下指令):
1 | while true |
-c
:显示信息后,清除ring buffer中的内容- 本质为每1秒查看当前系统的日志并清空
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 spaceman!