优先顺序 - printk()vs dev_dbg()vs netdev_dbg()

时间:2014-02-27 18:42:51

标签: linux kernel linux-device-driver kernel-module

我最近在linux源代码树中运行了一个scripts / checkpatch.pl脚本并得到了这个警告:

WARNING: Prefer netdev_dbg(netdev, ... then dev_dbg(dev, ... then pr_debug(...  to printk(KERN_DEBUG ...
printk(KERN_DEBUG "Hello World! \n");

据我所知,pr_debug和dev_dbg提供的动态调试界面对printk有明显的优势,因此它们比printk更受欢迎。

即使在dev_dbg和pr_debug中,如果我们有一个结构设备来标准化设备信息输出以及我们的调试消息,我们更喜欢dev_dbg。它提供了逃避“编辑/重建/重启循环”的功能,还允许通过dynamic_debug / control接口维护一个简洁的日志。

我的问题是: 为什么netdev_dbg首选dev_dbg?

1 个答案:

答案 0 :(得分:16)

每个内核子系统通常都有自己的printk格式。因此,当您使用网络子系统时,您必须使用netdev_dbg;当您使用V4L时,您必须使用v4l_dbg。它标准化了子系统中的输出格式。

netdev_dbg 这不是绝对优先的印刷风格。如果您正在使用netdevice,那么它是首选。如果您查看源代码here,您将看到它需要一个struct netdevice对象,并且只有在网络子系统中工作时才有这种对象

可能是消息混乱,因为它应该建议您使用您正在处理的子系统的打印方法。您收到了警告,因为您正在使用prink()这是打印内容的原始方式。

根据您编码的内容,您应使用不同的打印样式:

printk():永远不会

pr_debug():总是很好

dev_dbg():当您拥有struct device对象时,首选

netdev_dbg():当您拥有struct netdevice对象时,首选

[something]_dbg():当你有某个对象

时更喜欢