printk在内核中使用,允许根据严重程度,通过附件不同的“优先级”,对消息进行分类。
日志级别一共有8个级别,printk的日志级别定义如下(在linux2.6源码目录/include/linux/kernel.h中):
#defineKERN_EMERG"<0>"
/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
#defineKERN_ALERT"<1>"
/*报告消息,表示必须立即采取措施*/
#defineKERN_CRIT"<2>"
/*临界条件,通常涉及严重的硬件或软件操作失败*/
#defineKERN_ERR"<3>"
/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/
#defineKERN_WARNING"<4>"
/*警告条件,对可能出现问题的情况进行警告*/
#defineKERN_NOTICE"<5>"
/*正常但又重要的条件,用于提醒。常用于与安全相关的消息*/
#defineKERN_INFO"<6>"
/*提示信息,如驱动程序启动时,打印硬件信息*/
#defineKERN_DEBUG"<7>"
/*调试级别的消息*/
使用示例:
printk(KERN_INFO"INFO\n"); 或
printk(“<6>INFO\n"); 或
printk(“<6>”“INFO\n");
使用宏的时候不必加双引号,因为在定义的时候已经有了。
没有指定优先级时,默认使用
DEFAULT_ MESSAGE_LOGLEVEL,在kernel/printk.c中定义。
在2.6.29内核中#define DEFAULT_ MESSAGE_LOGLEVEL 4
控制台优先级:
int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL,
/*控制台日志级别,优先级高于该值的消息将在控制台显示*/
DEFAULT_MESSAGE_LOGLEVEL,
/*printk默认消息日志级别*/
MINIMUM_CONSOLE_LOGLEVEL,
/*最小控制台日志级别*/
DEFAULT_CONSOLE_LOGLEVEL,
/* 默认的控制台日志级别*/
};
可以使用命令 cat /proc/sys/kernel/printk来查看这四个值。要想在控制台上打印出消息,printk消息日志必须高于控制台级别。当然也可以改变该文件控制台的默认级别。
注:无论是否在控制台上有输出,所有打印信息都会打印在日志文件/var/log/messages中。
在调试程序过程中可以同时开多开一个终端,执行命令:
tail -f /var/log/messages就能实时看到打印信息。
阅读(607) | 评论(0) | 转发(0) |