Linux驱动开发 -- 打开dev_dbg()

 Linux驱动开发 -- 打开dev_dbg() 2012-10-23 19:21:54



分类: LINUX



linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KERN_DEBUG )来输出打印信息。要打开这个开关需要下面两步。



     1、打开调试开关:你调试的文件中必然包含了<linux/device.h>,或者<linux /paltforam_device.h>,后者包含了前者,在包含此头文件之前,使用#define DEBUG 1 来打开调试开关:例如

#include <linux/kernel.h>

#include <linux/init.h>

#include <linux/clk.h>

#include <linux/module.h>

#define DEBUG    1

#include <linux/platform_device.h>



     在linux/device.h文件中:

#define dev_printk(level, dev, format, arg...)    \

    printk(level "%s %s: " format , dev_driver_string(dev) , (dev)->bus_id , ## arg)



#ifdef DEBUG

#define dev_dbg(dev, format, arg...)        \

    dev_printk(KERN_DEBUG , dev , format , ## arg)

#else

static inline int __attribute__ ((format (printf, 2, 3)))

dev_dbg(struct device * dev, const char * fmt, ...)

{

    return 0;

}

#endif

    但是这个打开了之后,也不能顺利的输出信息,原因是printk有默认的信息级别。

    linux/kern_levels.h文件中

#define KERN_EMERG      KERN_SOH "0"    /* system is unusable */

#define KERN_ALERT      KERN_SOH "1"    /* action must be taken immediately */

#define KERN_CRIT       KERN_SOH "2"    /* critical conditions */

#define KERN_ERR        KERN_SOH "3"    /* error conditions */

#define KERN_WARNING    KERN_SOH "4"    /* warning conditions */

#define KERN_NOTICE     KERN_SOH "5"    /* normal but significant condition */

#define KERN_INFO       KERN_SOH "6"    /* informational */

#define KERN_DEBUG      KERN_SOH "7"    /* debug-level messages */

#define KERN_DEFAULT    KERN_SOH "d"    /* the default kernel loglevel */

可以看到KERN_DEBUG是级别最低的。





2、修改文件kernel/printk.h文件



#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])
其中 default_console_loglevel 为终端console输出的最低级别,比这严重的都将输出。原来该值为7,则调试信息无法输出,修改为0则全部有输出。

 

你可能感兴趣的:(linux)