当程序代码编写好时很少不会出错误,这个时候就要用printk()函数来调试了。
该函数的功能与printf()差不多,但是,它只能由内核例程来调试,该函数在kernel/printk.c中实现,原型如下:
int printk(const char *fmt,…);
printk()函数的使用方法与printf()基本相同,但参数的第一个位置可以使用表示信息重要性的宏,这些宏称为“日志级别”。
include/linux/kernel.h文件的第31~38行定义了代表8种不同级别的宏,第43行定义了默认(即在使用printk()函数时没有使用宏)采用的日志级别为KERN_WARING。
以下是内核中定义的宏:
Include/linux/kernel.h
31 #define KERN_EMERG”<0>” /*system no longer useble*/
32 #define KERN_ALERT”<1>” /* action to be terminated at once*/
33 #define KERN_CRIT”<2>” /*critical condition*/
34 #define KERN_ERR”<3>” /*error*/
35 #define KERN_WARNING”<4>” /*warning*/
36 #define KERN_NOTICE”<5>” /*normal,but noteworthy*/
37 #define KERN_INFO”<6>” /*information*/
38 #define KERN_DEBUG”<7>” /*debug level*/
43 #define default_message_loglevel(console_printk[1])
kernel/printk.c中定义的console_printk[1]为4
kernel/printk.c
49 #define DEFAULT_MESSAGE_LOGLEVEL 4 /*KERN_WARNING*/
57 int console_printk[4]={
58 DEFAULT_CONSOLE_LOGLEVEL, /*console_loglevel*/
59 DEFAULT_MESSAGE_LOGLEVEL, /*default_ message_loglevel*/
60 MINIMUM_CONSOLE_LOGLEVEL, /*minimum_console_loglevel*/
61 DEFAULT_CONSOLE_LOGLEVEL, /*default_console_loglevel*/
62 };