チュートリアル

1. Linuxのカーネル領域をトレースするためのドライバ作成

Linuxのカーネル領域では、ファイルIO操作ができないため、一旦データを内部メモリに貯めた後、
Procファイルシステムを使ってファイルに書き出す方法を使います。
以下のようにファイルの追加、及び修正を行います。

1.1. サンプルドライバのダウンロード
対応OS 接続方式 言語 イベントID出力方式 ダウンロード
Linux ファイル書き出し C/C++ カーネル情報出力方式 ダウンロード
※カーネル情報出力ポイント挿入専用のドライバになります。
アプリ側の「イベントID出力方式」の設定では、必ず「カーネル情報出力ポイント挿入」を選択してください。
1.2. カーネルへDT10のドライバを追加する

1. $(kernel)/drivers/miscフォルダ下に、「dt_datawriting_drv.c」ファイルをコピーし、Makefileを修正します。

obj-$(CONFIG_SCHED_HMP)    += cci400.o
obj-$(CONFIG_MIPI_LLI)      += mipi-lli/

#for DT10
obj-y                += dt_datawriting_drv.o
1.3. ドライバのカスタマイズ

ドライバは使い方に合わせて、カスタマイズが可能です。
1.リングバッファの使用可否を設定します。
内部メモリには限界があるので、リングバッファの使用可否が設定できます。
デフォルト値は「使用」となっていますので、使わない場合はコメントアウトしてください。

#define RING_BUFF_USE									

2.保存する最大レポートデータの数を設定します。
最大保存可能なレポートデータの数を設定できます。デフォルト値は800,000件になります。

#define DT10_MAX_TESTREPORT_NUMBER   800000  /* Customize */						

※テストレポート1個のサイズは、18Byteです。

1.4. ユーザランド領域用のドライバ

カーネル領域だけではなく、ユーザランド領域も同時にトレースしたい場合のドライバになります。

1.「dt10_tpdrv.c」ファイルをテストポイントを挿入したソースコードがあるフォルダへコピーします。
2.Makefileを修正して「dt10_tpdrv.c」ファイルをビルド対象にします。

#for DT10
obj-y      += dt10_tpdrv.o
1.5. ファイル書き出し用のアプリを作成

「ProdFileOutput.c」ファイルは、カーネルのメモリに格納されているテストポイントのデータを
ファイルに書き出すソースコードになります。
通常アプリとしてビルドして、ターゲットへコピーします。
実行することで内部メモリのデータをファイルに書き出すことができます。

1.「ProcFileOutput.c」ファイルを開き、ファイルの保存先を設定します。

#define CONVERT_FILE      "/mnt/sdcard/Convert.DAT"   /* Customize */

2. ビルド

2.1. カーネルへDT10のドライバを追加する

カーネルを再ビルドし、dt10のドライバが正しくコンパイルされたかを確認します。
「dt_datawriting_drv.o」ファイルが生成されていればビルドは正しくできています。

$make –j4
2.2. ファイル書き出し用のアプリのビルド

ファイル書き出し用アプリをビルドし、ターゲットへコピーします。
以下は、Makefileの例です。

SUFFIXES : .c .o
 
CC = arm-none-linux-gnueabi-gcc
OBJS = ProcFileOutput.o
TARGET = ProcFileOutput
 
all : $(TARGET)
 
	$(TARGET): $(OBJS)
	$(CC) -o $@ $(OBJS)
 
clean :
	rm -f $(OBJS) $(TARGET)

※CCにはターゲット用のコンパイラを指定してください。

3. データ取得方法

3.1. データ取得の開始/停止

1.ターゲットのブート後、procファイルシステムを制御してデータ取得を開始/停止できます。

root@android:/ # echo 2 > /proc/dt10proc ★Buffer初期化
[146.235717] [DT10] Buffer Clear.
 
root@android:/ # echo 1 > /proc/dt10proc ★データ取得開始
[140.325677] [DT10] Trace Start.
—端末を操作してデータを取得
root@android:/ # echo 0 > /proc/dt10proc ★データ取得停止
[146.235717] [DT10] Trace Stop.
 
root@android:/ # ProcFileOutput ★カーネルのバッファ内容をConvert.DATファイルへ書き出す
>>>270 bytes saved.

2.データを取得し、保存された「Convert.DAT」ファイルをPCへコピーします。

3.2. Convert.DATファイルのインポート

1.DT10で[ファイル] → [インポート] → [「ファイル書き出し」で取得したレポートデータ…]を選択します。

8486_1

2. 「追加」ボタンをクリックし、「Convert.DAT」ファイルを選択します。

8486_2

3. 「データフォーマット…」ボタンを選択します。

8486_3

4. 1レコードのバイトサイズを18Byteに設定し、「時間データを絶対時間として扱う」にチェックします。

8486_4

5. マルチコア環境の場合は「ターゲットCPU:マルチコア」をチェックします。インポートした後で、
レポートデータをすぐ表示したい場合は「インポート完了後に最新のテストレポートを開く」をチェックします。

8486_5

6. インポートが完了すると、テストレポートが表示されます。

8486_6