3

特定のシナリオで実行されるすべての機能を知りたい。

具体的には、Linux カーネルの MMC/SD カード スタックを理解したいと考えています。

私のアイデアは、次のようなプリントを配置することでした:

pr_info("Entering %s\n", __func__);

pr_info("Leaving %s\n", __func__);

に存在するすべての機能にdrivers/mmc/

しかし、これは面倒な作業です。

これを行うためのより良い方法はありますか?

注: gcc__cyg_profile_func_enterおよび__cyg_profile_func_exit.

これらのインスツルメンテーション関数は、小さなモジュールに対して完全に機能します。

しかし、これらの関数は Linux カーネルでも使用できますか? または、これには別の方法がありますか?

私の環境 : コードは Cortex A7/A9 用にクロス コンパイルされます。

4

2 に答える 2

4

で必要なソース ファイルをコンパイルできます-finstrument-functions。次に、これら 2 つの関数をカーネルのファイルに自分で実装できます。

ご了承ください:

  1. __cyg_profile_func_enter/exitwithを含むファイルをコンパイルしてはなりません-finstrument-functions(または、を使用する必要があります__attribute__((no_instrument_function)))。
  2. 関数__cyg_profile_func_enter/exitは、でコンパイルされたコードを呼び出してはなりません-finstrument-functions。これにより、無限再帰が発生します。それらが行うことはすべてでありprintkprintkそれが呼び出す低レベルのドライバーがこのようにコンパイルされていない場合は、問題ありません。
于 2013-09-01T06:50:00.333 に答える
1

Linuxftraceトレーサーも試してください。

于 2013-11-01T11:34:10.090 に答える