3

我已经在 android AVD 上安装了 Ftrace 并尝试使用 Ftrace 的功能,但它不起作用。

以下是我所做的列表:

  1. 安装 ubuntu 10.04 LTS
  2. 安装必要的工具,例如 android sdk、toolchain、libs 等
  3. 下载金鱼内核 参考 - http://blog.markloiseau.com/2012/07/how-to-compile-the-android-goldfish-emulator-kernel/
  4. 修改内核配置文件(开启 Tracer Options)
  5. 使用已使用跟踪器选项编译的自定义内核启动金鱼
  6. 尝试使用 Ftrace 功能
  7. 内核冻结

这是日志:

\# mount -t debugfs nodev /sys/kernel/debug
\# ls /sys/kernel/debug
sched_features
mmc0
tracing
bdi

\# cd /sys/kernel/debug/tracing
\# ls
events
set_event
available_events
printk_formats
per_cpu
options
saved_cmdlines
trace_marker
buffer_size_kb
trace_pipe
README
tracing_thresh
tracing_max_latency
current_tracer
available_tracers
trace
tracing_cpumask
trace_options
tracing_enabled
tracing_on
set_ftrace_pid

\# cat available_tracers
function_graph function sched_switch nop

\# cat current_tracer 
nop

\# echo sched_switch > current_tracer 
\# cat current_tracer 
sched_switch

\# cat trace | /data/busybox head -10
\# tracer: sched_switch
\#
\#           TASK-PID    CPU#    TIMESTAMP  FUNCTION
\#              | |       |          |         |
        bash-258   [000]   490.261240:    258:120:R   + [000]     4:115:S events/0
        bash-258   [000]   490.262087:    258:120:S ==> [000]    45:120:R adbd
        adbd-45    [000]   490.262318:     45:120:S ==> [000]     4:115:R events/0
    events/0-4     [000]   490.262457:      4:115:R   + [000]    43:120:S qemud
    events/0-4     [000]   490.262492:      4:115:S ==> [000]    43:120:R qemud
       qemud-43    [000]   490.262643:     43:120:R   + [000]   109:112:S er$SensorThread

\# echo function > current_tracer  *<--- this command occur freeze*

如上所示,某些功能运行良好。但是在我打开跟踪功能时,一个关键功能,系统停机了。

我应该怎么办 ?

4

1 回答 1

5

函数跟踪器可能会冻结有几个原因。这是一个非常具有侵入性的跟踪器(跟踪内核的几乎所有功能)。一个问题是它是否跟踪诸如禁用中断之类的内部功能。这将导致它进入无限循环。现在我假设你有一个 ARM 设备,如果你运行的是 Android。根据配置,ARM 的一些低级函数可能需要标记为 nottrace 以防止它们被跟踪。如果您启用了动态跟踪,请尝试仅跟踪单个函数,如果可行,您就知道问题出在不应该被跟踪的东西上。要跟踪单个函数,只需:

回声计划> set_ftrace_filter;回声函数 > current_tracer

祝你好运。

于 2012-12-06T04:50:41.000 回答