チュートリアル
Android(Framework)機器への導入方法
1. AndroidでDT10を使う為のドライバ作成
1.1. サンプルドライバのダウンロード
対応OS | 接続方式 | 言語 | イベントID出力方式 | ダウンロード |
---|---|---|---|---|
Android OS | ファイル書き出し | Java | ドライバ対応方式 | ダウンロード |
アプリ側の「イベント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
※ドライバの修正内容については「Linux kernelデータ取得用ファイル書き出しドライバ」をご参考ください。
1.3. SHARED_LIBRARYの登録
AndroidOS側からカーネルのprocファイルシステムへwriteするドライバを「Shared Library」として登録します。
1. $(android)/externalフォルダにdt10_libフォルダを作成し, 「Android.mk」と「dt10drv.c」ファイルをコピーします。
external/dt10_lib/
├── Android.mk
└── dt10drv.c
2.「core.mk」ファイルにモジュール登録します。
$vi ./my-android-git/build/target/product/core.mk
PRODUCT_PACKAGES := \
…
libdt10drv \
1.4. Android Third Party APIの登録
Java領域からデータを取得するため、Java用ドライバをAndroid Third Party APIとして登録します。
1. $(android)/frameworks/base/core/java/android/utilフォルダへ「DtTestPointDriver.java」ファイルをコピーします。
2. $(android)/frameworks/base/core/jniフォルダへ「android_util_DtTestPointDriver.cpp」ファイルをコピーします。
3. $(android)/frameworks/base/core/jni/Android.mk ファイルを以下のように修正します。
LOCAL_SRC_FILES:= \
ActivityManager.cpp \
AndroidRuntime.cpp \
…
android_util_DtTestPointDriver.cpp \
…
LOCAL_SHARED_LIBRARIES := \
…
libharfbuzz_ng \
libdt10drv \
libz
4. $(android)/frameworks/base/core/jni/AndroidRuntime.cpp ファイルを以下のように修正します。
namespace android {
/*
* JNI-based registration functions. Note these are properly contained in
* namespace android.
*/
extern int register_android_content_AssetManager(JNIEnv* env);
extern int register_android_util_EventLog(JNIEnv* env);
extern int register_android_util_Log(JNIEnv* env);
extern int register_android_util_DtTestPointDriver(JNIEnv *env);
extern int register_android_content_StringBlock(JNIEnv* env);
extern int register_android_content_XmlBlock(JNIEnv* env);
extern int register_android_emoji_EmojiFactory(JNIEnv* env);
…
static const RegJNIRec gRegJNI[] = {
REG_JNI(register_android_debug_JNITest),
REG_JNI(register_com_android_internal_os_RuntimeInit),
REG_JNI(register_android_os_SystemClock),
REG_JNI(register_android_util_EventLog),
REG_JNI(register_android_util_Log),
REG_JNI(register_android_util_FloatMath),
REG_JNI(register_android_util_DtTestPointDriver),
REG_JNI(register_android_text_format_Time),
REG_JNI(register_android_content_AssetManager),
…
1.5. ProcFileOutputファイル追加
ProdFileOutputは、カーネルのメモリに格納されているテストポイントのデータをファイルに書き出すアプリケーションです。
通常アプリとして作成し、端末へインストールすることも可能ですが、こちらではOS内部のアプリとして追加する方法を説明します。
1. $(android)/externalフォルダにDT10ProcFileOutputフォルダを生成し、
「ProcFileOutput.c」と「Android.mk」ファイルをコピーします。
external/DT10ProcFileOutput/
├── Android.mk
└── ProcFileOutput.c
※ビルドした後、端末の/system/binフォルダ下に「ProcFileOutput」ファイルが存在します。
2. カーネル及びAndroidのビルド
2.1. カーネルのビルド
カーネルを再ビルドし、dt10のドライバが正しくコンパイルされたかを確認します。
「dt_datawriting_drv.o」ファイルが生成されていれば、ビルドは正しく完了しています。
$make –j4
2.2. Androidのビルド
android.util.DtTestPointDriverという新しいクラスをAndroid OSに追加している為、
AndroidのAPIをアップデートする必要があります。
$source build/envsetup.sh
$lunch PRODUCT_BOARD-eng
$make update-api
$make
※PRODUCT_BOARDには端末にて断りますので、ご使用の端末のものを指定してください。
「Shard Library」が正しく登録された場合は、「libdt10drv.so」が生成されます。
update-apiにてAndroid APIが正しく登録された場合は、「$(android)/frameworks/base/api/current.txt」ファイルに
DtTestPointDriverクラスが登録されています。
3. テストポイント挿入
3.1. Native領域へテストポイント挿入止
Native領域(C/CPP)へテストポイントを挿入する場合は、登録した「Shared Library」を使用するように
「Android.mk」ファイルを修正する必要があります。
以下のようにテストポイントを挿入したソースコードがあるフォルダの「Android.mk」ファイルを修正します。
LOCAL_SHARED_LIBRARIES := \
libdt10drv \
3.2. Javaファイルのテストポイント挿入
C/CPPファイルの場合は「DT_xxx.h」というヘッダファイル生成され、その中にテストポイント用APIが
宣言されている為、設定は不要ですが、Javaの場合はDtTestPointDriverクラスをImportする必要があります。
以下の設定でDtTestPointDriverクラスを自動でImportするように設定します。
1. 「ファイル」→「プロジェクト設定」を選択し、プロジェクト設定ダイアログを表示します。
2. 「ソースファイルのプロパティ」→「Java」タブを選択し、インポートの設定内容を以下画面のように設定します。
3.3. カーネルのcontext_switch情報
以下のページを参考にしてください。
https://hldc.co.jp/support/by-product/dt10-dts/tutorial/advanced/dt10-mastering-skills/skill2/skill2-2/
4. データ取得方法
4.1. データ取得の開始/停止
Android Targetをブート後、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.
データを取得し、保存された「Convert.DAT」ファイルをadb経由でPCへコピーします。
hldc0055@hldc0055-ubuntu:~/OdroidXU$ adb pull /sdcard/Convert.DAT .
3 KB/s (270 bytes in 0.077s)
hldc0055@hldc0055-ubuntu:~/OdroidXU$
4.2. Convert.DATファイルのImport
1. DT10で「ファイル」→「インポート」→「「ファイル書き出し」で取得したレポートデータ…」を選択します。
2. 「追加」ボタンをクリックし、「Convert.DAT」ファイルを選択します。
3. 「データフォーマット…」ボタンを選択します。
4. 1レコードのバイトサイズを18Byteに設定し、「時間データを絶対時間として扱う」にチェックします。
5. マルチコア環境の場合は「ターゲットCPU:マルチコア」をチェックし、インポート後、
レポートデータをすぐ表示したい場合は「インポート完了後に最新のテストレポートを開く」をチェックします。
6. インポートが完了したら、テストレポートが表示されます。