3

Android AVD に Ftrace をインストールし、Ftrace の機能を使用しようとしましたが、機能しません。

以下は私がしたことのリストです:

  1. ubuntu 10.04 LTS をインストール
  2. Android SDK、ツールチェーン、ライブラリなどの必須ツールをインストールします
  3. 金魚カーネルの 参照をダウンロード - http://blog.markloiseau.com/2012/07/how-to-compile-the-android-goldfish-emulator-kernel/
  4. カーネル構成ファイルを変更します (トレーサー オプションをオンにします)。
  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

関数トレーサーがフリーズする理由はいくつかあります。これは非常に侵襲的なトレーサーです (カーネルのほぼすべての機能をトレースします)。1 つの問題は、割り込みを無効にするなどの内部機能をトレースする場合です。これにより、無限ループに陥ります。Android を実行している場合は、ARM デバイスを使用していると仮定します。構成によっては、ARM の低レベル関数の一部をトレースされないように、notrace としてマークする必要がある場合があります。動的トレースを有効にしている場合は、1 つの関数だけをトレースしてみます。それが機能する場合は、トレースすべきでないものに問題があることがわかります。単一の関数をトレースするには、次のようにします。

エコースケジュール > set_ftrace_filter; エコー機能 > current_tracer

幸運を。

于 2012-12-06T04:50:41.000 に答える