内核中的大部分驱动都使用了dev_dbg
接口打印调试信息,这些信息非常有用帮助你去调试理解代码,默认是不会输出到控制台的。基于Linux version 4.14.78
有两种方法让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
1.定义DEBUG宏:
在需要打印dev_dbg调试信息的驱动文件开头定义DEBUG宏, 注意必须是在<linux/device.h> 或者<linux /paltforam_device.h>前面定义.
2.打开动态调试功能:
CONFIG_DEBUG_FS=y
CONFIG_DYNAMIC_DEBUG=y
动态调试方法:
mount -t debugfs none /sys/kernel/debug 路径也可以自己选择,这里用系统默认路径
echo -n 'file xxx.c +p' > /data/debugfs/dynamic_debug/control 增加xxx.c文件dynamic debug的输出
echo -n 'file xxx.c -p' > /data/debugfs/dynamic_debug/control 去掉xxx.c文件dynamic debug的输出
3.调整显示级别:
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=10
查看:
cat /proc/sys/kernel/printk
10 4 1 10