printk函数

printk函数在linux内核中,将打印信息输出到内核信息缓冲区中,内核信息缓冲区环形缓冲区

"当日志级别的数值小于控制台级别时,printk要打印的信息才会在控制台打印出来,否则不会显示在控制台!"

日志级别

#define KERN_EMERG      "<0>"    /* system is unusable*/
#define KERN_ALERT      "<1>"    /* action must be taken immediately */
#define KERN_CRIT       "<2>"    /* critical conditions */
#define KERN_ERR        "<3>"    /* error conditions */
#define KERN_WARNING    "<4>"    /* warning conditions */
#define KERN_NOTICE     "<5>"    /* normal but significant condition */
#define KERN_INFO       "<6>"    /* informational*/
#define KERN_DEBUG      "<7>"    /* debug-level messages */

日志级别对应的含义

  <0>级,紧急事件,系统崩溃之前提示的消息;
  <1>级,必须立即采取行动;
  <2>级,临界状态,通常涉及严重的硬件或软件操作失败;
  <3>级,报告错误状态,设备驱动程序会经常使用KERN_ERR 报告来自硬件的问题;
  <4>级,对可能出现问题的情况进行警告;
  <5>级,有必要进行提示的正常情况,许多与安全相关的状况用这个级别进行提示;
  <6>级,内核提示性信息,很多驱动程序在启动的时候用这个级别打印出它们找到的硬件信息;
  <7>级,用于调试信息。

 控制台级别

 在kernel/printk.c里找到控制台console_printk的定义

/* printk's without a loglevel use this.. */
#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
 
/* We show everything that is MORE important than this.. */
#define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
DECLARE_WAIT_QUEUE_HEAD(log_wait);
  int console_printk[4] = {
        DEFAULT_CONSOLE_LOGLEVEL,       /* console_loglevel */
        DEFAULT_MESSAGE_LOGLEVEL,       /* default_message_loglevel */
        MINIMUM_CONSOLE_LOGLEVEL,       /* minimum_console_loglevel */
        DEFAULT_CONSOLE_LOGLEVEL,       /* default_console_loglevel */};
#define DEFAULT_MESSAGE_LOGLEVEL  4   表示默认消息日志级别,printk没定义优先级时,printk打印这个优先级以上的消息;

#define MINIMUM_CONSOLE_LOGLEVEL  1   表示最小控制台日志级别,控制台日志级别可被设置的最小值;

#define DEFAULT_CONSOLE_LOGLEVEL  7   表示默认的控制台日志级别,级别比这个值更高的消息日志都可以被打印;假如这个值为0,那么只有KERN_EMERG级别的日志消息才会被打印

可以使用命令 cat /proc/sys/kernel/printk来查看这四个值,例如

 [xuanmiao@192 /]$ cat /proc/sys/kernel/printk 4 4 1 7 

举个栗子

   1 printk(KERN_DEBUG "DEBUG: Passed %s %d \n",__FUNCTION__,__LINE__); 

  等同于

   2 printk(<7> "DEBUG: Passed %s %d \n",__FUNCTION__,__LINE__); 

 

posted @ 2023-01-08 14:11  轩邈、  阅读(84)  评论(0编辑  收藏  举报