|
在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以控制打印输出。
|
|