开启dev_dbg调试日志

内核中的大部分驱动都使用了dev_dbg接口打印调试信息,默认是不会输出到控制台的。

先看一下dev_dbg的定义:

文件路径:/kernel/include/linux/device.h
#if defined(CONFIG_DYNAMIC_DEBUG)
#define dev_dbg(dev, format, ...)		     \
do {						     \
	dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
} while (0)
#elif defined(DEBUG)
#define dev_dbg(dev, format, arg...)		\
	dev_printk(KERN_DEBUG, dev, format, ##arg)
#else
#define dev_dbg(dev, format, arg...)				\
({								\
	if (0)							\
		dev_printk(KERN_DEBUG, dev, format, ##arg);	\
})
#endif

动态调试dev_dbg要打开CONFIG_DYNAMIC_DEBUG这个配置项,具体没有操作过,其中的原理也没有跟踪分析。这里指介绍第二种开启dev_dbg的方式。

在需要打印dev_dbg调试信息的驱动文件开头定义DEBUG宏。注意必须是在前面:

#define DEBUG
#include 

打开DEBUG宏是第一步,这个时候还是不能输出到控制台的,还必须要修改printk打印等级。

printk打印等级:
#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 */

printk.c中定义的默认打印等级如下:

#define CONSOLE_LOGLEVEL_SILENT  0 /* Mum's the word */
#define CONSOLE_LOGLEVEL_MIN	 1 /* Minimum loglevel we let people use */
#define CONSOLE_LOGLEVEL_QUIET	 4 /* Shhh ..., when booted with "quiet" */
#define CONSOLE_LOGLEVEL_DEFAULT 7 /* anything MORE serious than KERN_DEBUG */

printk默认的打印等级是7,而dev_dbg的打印等级也是7,只有等级高于printk默认打印等级的日志信息才能输出出来。

所以这里直接修改DEFAULT_CONSOLE_LOGLEVEL为8,这样dev_dbg就可以输出了,当然还有其他的修改方式。

在cmdline中传入loglevel=8也能输出dev_dbg日志。

你可能感兴趣的:(开启dev_dbg调试日志)