チュートリアル
Linuxカーネルのファイル書き出しでの導入方法
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で[ファイル] → [インポート] → [「ファイル書き出し」で取得したレポートデータ…]を選択します。
2. 「追加」ボタンをクリックし、「Convert.DAT」ファイルを選択します。
3. 「データフォーマット…」ボタンを選択します。
4. 1レコードのバイトサイズを18Byteに設定し、「時間データを絶対時間として扱う」にチェックします。
5. マルチコア環境の場合は「ターゲットCPU:マルチコア」をチェックします。インポートした後で、
レポートデータをすぐ表示したい場合は「インポート完了後に最新のテストレポートを開く」をチェックします。
6. インポートが完了すると、テストレポートが表示されます。