2017-05-13 59 views
2

在Linux树中的设备驱动程序源代码中,我看到了dev_dbg(...)dev_err(...),我在哪里可以找到记录的消息?dev_dbg在哪里写入日志?

一个参考文献建议添加#define DEBUG。其他reference涉及动态调试和调试,我迷路了。

回答

2

dev_dbg()根据编译标志展开为dynamic_dev_dbg(),dev_printk()或no-op。

#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 

dynamic_dev_dbg()dev_printk()呼叫dev_printk_emit()这就要求vprintk_emit()

当你只做一个printk()这个非常相同的功能在正常模式下被调用。请注意,其余功能如dev_err()将以相同的功能结束。

因此,显然,缓冲区都是一样的,即内核intrenal缓冲区。

在结束记录的消息被打印到

  1. 当前控制台如果内核记录级值(可通过内核命令行或者通过procfs的改变)是一定的消息,这里KERN_DEBUG足够高。
  2. 可通过运行dmesg命令读取的内部缓冲区。

请注意,只要缓冲区中还有空间,数据将保留2。由于它是有限的和循环的,所以新的数据抢占了旧数据。