2

当我们要跟踪gs4的内核函数时,想使用ftrace。

所以,我接受了这里的内容。

http://www.linuxforu.com/2010/11/kernel-tracing-with-ftrace-part-1/

mount -t debugfs nodev /sys/kernel/debug

当你输入命令时,出来如下。

root@android:/sys/kernel/debug/tracing # mount -t debugfs nodev /nodev /sys/kernel/debug
mount: Device or resource busy

还,

root@android:/sys/kernel/debug/tracing # cat current_tracer
nop
root@android:/sys/kernel/debug/tracing # echo function > current_tracer
root@android:/sys/kernel/debug/tracing # cat current_tracer
nop

就这样出来。

root@android:/sys/kernel/debug/tracing # ls -al current_tracer
-rw-r--r-- root     root            0 2013-08-27 20:32 current_tracer

上次更新时间会改变,无法改变 currnet_tracer 的内容。

当然,出来如下。

root@android:/sys/kernel/debug/tracing # cat trace
# tracer: nop
#
# entries-in-buffer/entries-written: 0/0   #P:1
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |

我无法更改 currnet_tracer。tracking_on 能够改变。

root@android:/sys/kernel/debug/tracing # cat tracing_on
0
root@android:/sys/kernel/debug/tracing # echo 1 > tracing_on
root@android:/sys/kernel/debug/tracing # cat tracing_on
1
root@android:/sys/kernel/debug/tracing #

我可以用atrace,我根据对应选项出来的信息如下,想跟踪内核函数的调用。

root@android:/sys/kernel/debug/tracing # atrace -s -w capturing trace < /test/trace.txt
root@android:/sys/kernel/debug/tracing # cat /test/trace.txt
capturing trace... done
TRACE:
# tracer: nop
#
# entries-in-buffer/entries-written: 532/532   #P:1
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
          atrace-22948 [000] ...2 623726.157067: sched_switch: prev_comm=atrace prev_pid=22948 prev_prio=120 prev_state=S ==> next_comm=AsyncTask #2 next_pid=21620 next_prio=130

....

我想知道如何更改 current_tracer 以及如何使用 debugfs 进行挂载。

接受并感谢帮助。

感谢!

4

2 回答 2

5

您错过了 /sys/kernel/debug/tracing 下的 available_tracers 选项,它显示了内核可用的跟踪功能。要查看可用跟踪器的列表,请执行 -

      cat /sys/kernel/debug/tracing/available_tracers

这将向您显示所有可用的示踪剂。现在,如果您找到了“函数”,那么您将能够跟踪内核函数,否则就不会。

如果您有可用的功能跟踪器选项来激活它,请执行以下操作 -

    echo function > /sys/kernel/debug/tracing/current_tracer
    echo 1 > /sys/kernel/debug/tracing/tracing_on

现在,您将通过 /sys/kernel/debug/tracing/trace 找到跟踪输出。要禁用跟踪,请执行

   echo 0 > /sys/kernel/debug/tracing/tracing_on
   echo nop > /sys/kernel/debug/tracing/current_tracer

因此,更改当前跟踪器的主要要求是,该功能必须可用,可以通过 current_tracer 找到。

于 2013-08-27T12:25:33.137 回答
1

您可能最好使用 trace-cmd 来做这些事情,然后在控制台中打印这些跟踪要容易得多。

http://www.omappedia.com/wiki/Installing_and_Using_Ftrace#Using_FTrace_with_Trace-cmd

于 2013-08-28T07:02:15.287 回答