Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116109
  • 博文数量: 50
  • 博客积分: 2495
  • 博客等级: 大尉
  • 技术积分: 535
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-04 11:44
文章分类
文章存档

2011年(20)

2010年(30)

我的朋友

分类: LINUX

2010-10-24 20:52:39

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) |
0

上一篇:2.6.29内核编译方法

下一篇:内核链表

给主人留下些什么吧!~~