gpt4 book ai didi

linux - 偏好顺序 - printk() vs dev_dbg() vs netdev_dbg()

转载 作者:IT王子 更新时间:2023-10-28 23:53:33 37 4
gpt4 key购买 nike

我最近在 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 提供的动态调试接口(interface)比printk 有明显的优势,因此比printk 更喜欢它们。

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

我的问题是:为什么 netdev_dbg 优于 dev_dbg?

最佳答案

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

netdev_dbg 它不是绝对首选的打印样式。如果您使用的是网络设备,则首选它。如果你看一下源代码 here你会看到它需要一个 struct netdevice 对象,并且只有在网络子系统中工作时才会有这种对象

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

根据您编写的代码,您应该使用不同的打印样式:

printk(): 从不

pr_debug():总是好的

dev_dbg():当你有一个struct device对象时首选

netdev_dbg():当你有一个 struct netdevice 对象时首选

[something]_dbg():当你有一个 something 对象时首选

关于linux - 偏好顺序 - printk() vs dev_dbg() vs netdev_dbg(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077540/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com