2014-02-27 6 views
9

ich die Skripte/checkpatch.pl Skript innerhalb der Linux-Sourcen und bekam diese Warnung vor kurzem lief:Reihenfolge der Präferenz - printk() vs dev_dbg() vs netdev_dbg()

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

Ich verstehe, dass die Die von pr_debug und dev_dbg angebotene dynamische Debugging-Schnittstelle hat gegenüber printk offensichtliche Vorteile und wird deshalb von printk bevorzugt.

Sogar zwischen dev_dbg und pr_debug bevorzugen wir dev_dbg, wenn wir ein Struct-Gerät haben, um die Ausgabe der Geräteinformationen zusammen mit unserer Debug-Nachricht zu standardisieren. Es bietet die Möglichkeit, aus dem "Edit/Rebuild/Re-Boot-Zyklus" zu entkommen und erlaubt auch ein gepflegtes Log über die Dynamic_debug/Control-Schnittstelle.

Meine Frage ist: Warum ist netdev_dbg gegenüber dev_dbg bevorzugt?

Antwort

14

Jedes Kernel-Subsystem hat normalerweise ein eigenes printk-Format. Wenn Sie also ein Netzwerk-Subsystem verwenden, müssen Sie netdev_dbg; Wenn Sie V4L verwenden, müssen Sie v4l_dbg verwenden. Es standardisiert das Ausgabeformat innerhalb des Subsystems.

netdev_dbgist es nicht der absolut bevorzugte Druckstil. Es wird bevorzugt, wenn Sie mit einem netdevice arbeiten. Wenn Sie einen Blick auf den Quellcode nehmen here Sie werden sehen, dass es ein struct netdevice Objekt erforderlich ist, und Sie haben diese Art von Objekt nur, wenn Sie im Netzwerk-Subsystem arbeiten

Wahrscheinlich wird die Nachricht verwirren, weil sie vorschlagen sollte Sie verwenden die Druckmethode des Subsystems, an dem Sie gerade arbeiten. Sie haben die Warnung erhalten, weil Sie prink() verwenden, was die rohe Art ist, etwas zu drucken.

Je nachdem, was Sie Codierung Sie einen anderen Druckstil verwenden sollten:

printk(): nie

pr_debug(): immer gut

dev_dbg(): lieber, wenn Sie ein struct device Objekt

netdev_dbg(): bevorzugt, wenn Sie ein struct netdevice Objekt

haben

[something]_dbg(): lieber, wenn Sie ein, dass etwas Objekt

+0

In diesem Fall haben habe ich 2 Fragen: 1. Was genau netdev_dbg Angebot „zusätzlich“ tut dev_dbg. 2. Gibt es auch einen Grund, netdev_dbg() in dieser Warnmeldung und nicht * Subsystem * _dbg() zu verwenden. (Ich frage dies, weil diese Nachricht von checkpatch.pl kommt - was ein generisches Skript ist, das in Linux verwendet wird, um nach "allen" Patches zu suchen. Warum sagt es netdev_dbg und nicht etwas anderes?) – Yogesh

+0

werfen Sie einen Blick auf den Quellcode und die git histry ** (1) ** das ist, was netdev _ *() ausdrucken http://lxr.free-electronics.com/source/net/core/dev.c#L6717 ** (2.1) ** _8f26b8376faad26372a579606ecbdbbb20e99dd8_ ist der Patch, der die Warnmeldung einführt ** (3) ** Ich nehme an, dass Sie auf einem netdevice sind, also warum netdev_dbg() sollte nicht bevorzugt werden ?. ** (4) ** Wenn Sie nicht mit netdevice arbeiten, haben wir vielleicht ein Problem. – Federico

+0

Danke dafür. Ich habe 1 und 2.1 gesehen. Ich bin nur nicht sicher, warum netdev_dbg zu anderen Subsystemen * _dbg Anrufe (in Bezug auf diese Nachricht) bevorzugt wird.Wie für (3) und (4) arbeite ich _NOT_ an netdevice. In der Tat können Sie das einfachste Modul "Hallo Welt" (nicht einmal einen Gerätetreiber) schreiben und es mit checkpatch.pl überprüfen. Diese Warnmeldung wird angezeigt. – Yogesh

Verwandte Themen