Ich möchte eine Funktion während Kernel-Boot-Prozess mit ftrace function_graph
verfolgen, um zu verstehen, was es tut, aber es ist nicht verfügbar in available_filter_functions
.Wie mache ich eine Linux-Kernel-Funktion für ftrace function_graph tracer verfügbar?
Ich habe versucht, es mit EXPORT_SYMBOL()
zu exportieren, raten, dass es zur Verfügung gestellt wird, aber das ist nicht der Fall.
Haben Sie eine Lösung?
Für Informationen, Funktionen, die ich verfolgen möchte, sind persistent_ram_init_ringbuffer
und persistent_ram_early_init
in Android Kernel 3.4.
ich durch die Dokumentation zu lesen, aber nichts dazu gefunden und grep mehr nicht geholfen ...
Dank
Aus meinem Verständnis von Ftrace, die dynamische Ablaufverfolgung von Funktionen beruht auf einer mcount Funktionsaufruf am Anfang jeder Kernel-Funktion. Wenn die Funktion, an der Sie interessiert sind, nicht anzeigt, dass ein verfügbarer Filter nicht angezeigt wird. Haben Sie in Betracht gezogen, keine dynamische Ablaufverfolgung zu verwenden? Es kann zu besseren Ergebnissen führen. –
EXPORT_SYMBOL scheint mehr mit dem Kernel-Modullader zu tun zu haben, der GPL/Nicht-GPL Lizenzprobleme löst, nicht Ftrace. – bazza
Wenn Sie available_filter_functions auflisten, wird überhaupt etwas aufgelistet? Von was ich sagen kann, wenn Sie einen Kernel mit CONFIG_FUNCTION_TRACER (und allen anderen ftrace gubbins), die eingeschaltet sind, kompilieren, wird die Einlauf-/Ausgangsverfolgung der Kernfunktion implementiert, indem Optionen in der GCC-Befehlszeile gesetzt werden. Diese Optionen bewirken, dass gcc für jede kompilierte Funktion einen bestimmten Funktionsaufruf ausgibt. Wenn ich das richtig verstanden habe, heißt das, dass jede Linux-Kernel-Funktion automatisch von ftrace erfasst werden sollte. Dies führte mich zu der Frage, ob in Ihrem Kernel überhaupt etwas zurückverfolgt werden konnte. – bazza