开启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宏。注意必须是在<linux/device.h>前面:

#define DEBUG
#include <linux/device.h>

打开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日志。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值