1. printk 优先级分类
printk 是内核态打印函数。我们可以通过附加不同的“优先级”,对信息分类。
1.1 优先级列表
目前共有 8 种优先级,按优先级从高到低顺序排列如下:
1 #define KERN_EMERG 0 /*紧急事件消息,系统崩溃之前提示,表示系统不可用*/ 2 #define KERN_ALERT 1 /*报告消息,表示必须立即采取措施*/ 3 #define KERN_CRIT 2 /*临界条件,通常涉及严重的硬件或软件操作失败*/ 4 #define KERN_ERR 3 /*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/ 5 #define KERN_WARNING 4 /*警告条件,对可能出现问题的情况进行警告*/ 6 #define KERN_NOTICE 5 /*正常但又重要的条件,用于提醒*/ 7 #define KERN_INFO 6 /*提示信息,如驱动程序启动时,打印硬件信息*/ 8 #define KERN_DEBUG 7 /*调试级别的消息*/
2. printk 优先级配置
2.1 /proc/sys/kernel/printk
Linux 中,printk 优先级设置在 /proc/sys/kernel/printk 中。可以通过以下命令,查看相关配置:
1 $ cat /proc/sys/kernel/printk 2 4 4 1 7
2.1.1 参数 1
控制台日志级别:优先级高于该值的消息将被打印至控制台。
2.1.2 参数 2
缺省的消息日志级别:将用该值来打印没有优先级的消息。
2.1.3 参数 3
最低的控制台日志级别:控制台日志级别可能被设置的最小值。
2.1.4 参数 4
缺省的控制台:控制台日志级别的缺省值。
3. /proc/sys/kernel/printk 默认值修改
/proc/sys/kernel/printk 的默认值在 linuxSrc/include/linux/printk.h 中定义:
1 #define console_loglevel (console_printk[0]) 2 #define default_message_loglevel (console_printk[1]) 3 #define minimum_console_loglevel (console_printk[2]) 4 #define default_console_loglevel (console_printk[3])
console_printk 的定义在 linuxSrc/kernel/printk/printk.c 中:
1 int console_printk[4] = { 2 CONSOLE_LOGLEVEL_DEFAULT, /* console_loglevel */ 3 MESSAGE_LOGLEVEL_DEFAULT, /* default_message_loglevel */ 4 CONSOLE_LOGLEVEL_MIN, /* minimum_console_loglevel */ 5 CONSOLE_LOGLEVEL_DEFAULT, /* default_console_loglevel */ 6 };