九鼎创展论坛

标题: printk函数使用 [打印本页]

作者: armeasy    时间: 2012-7-19 12:07
标题: printk函数使用
在linux驱动中通常使用printk函数实现串口输出,跟踪调试信息。
与标准C语言的printf不同的是,printk支持分级输出。

在linux/kernel.h中,定义了以下8个级别:
#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                */

通常我们使用如下语句打印跟踪信息:
printk(KERN_INFO"your message\n");

如果不定义输出级别,即使用下面的语句打印信息:
printk("your message\n");
则用默认的级别DEFAULT_MESSAGE_LOGLEVEL。

在printk.c中,定义了默认的级别:
#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */

在/linux/kernel.h中定义了打印的级别console_loglevel以及缺省的打印级别default_message_loglevel:
#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
console_printk[]数组定义为:
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 /* 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 */
可见,打印级别为DEFAULT_CONSOLE_LOGLEVEL=7,任何小于该级别的输出都会显示在终端上。我们可以修改console_loglevel以控制打印输出。






欢迎光临 九鼎创展论坛 (http://bbs.9tripod.com/) Powered by Discuz! X3.2