使用printk()函数调试设备驱动程序



当程序代码编写好时很少不会出错误,这个时候就要用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        };

你可能感兴趣的:(嵌入式,内核,调试,printk)