
在内核的源代码中,pr_debug / dev_dbg输出了许多日志信息(例如,由设备树,/ fdt.c的驱动程序/解析的代码). 默认情况下,内核不会将这些日志输出到控制台. 例如,dev_dbg的定义如下:
#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
第一次使用linux日志分类,如果定义了CONFIG_DYNAMIC_DEBUG,则使用动态调试机制dynamic_pr_debug();

第二种用法,如果定义了DEBUG,则使用printk(KERN_DEBUG ...)
默认情况下,不打印第三种用法(因此默认情况下,打印在dmesg中不可见).
第三种用法绝对不是我们想要的. 第一次使用有点复杂. 今天我们将介绍第二种用法

1)DEBUG宏已打开
方法一: 打开DEBUG宏的最简单方法是修改Makefile文件. 例如,我们要在内核/驱动程序/ mmc /下的所有文件以及子目录下的所有文件中打开DEBUG宏. 将以下代码添加到Makefile中. 其中,如果是ccflags -y: = -DDEBUG表示仅打开内核/ drivers / mmc /下文件的DEBUG宏,但不包括子目录中文件的DEBUG宏,并且subdir-ccflags -y: = -DDEBUG表示全部打开.


方法二: 实际上,打开DEBUG宏的方法非常简单. 在需要pr_debug / dev_dbg输出的模块的开头linux日志分类,您可以直接#define DEBUG,请记住位于开头,如下图所示,如果将其放在头文件的include之后,则可能该头文件包含由pr_debug定义的头文件printk.h,这将导致无法打开打印. 打开后,您可以在dmesg中看到pr_debug / dev_dbg的打印.

2)内核printk的默认日志级别大于7

首先查看默认的控制台打印级别:

将上图中的7更改为大于7的数字,例如8:

打印级别信息不足将被写入日志,并且可以通过dmesg命令查看
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-180346-1.html
不叫炒股
纯网时代下的新生代经济——给新生代偶像搭建了一个全方位展示其商业价值的平台
作品是能不断挖掘自己潜质和获得肯定的根本