sola

主にAndroidに関するメモ書き

Android Dev Phone 1 と 2 の eclair 環境作成

共通テーマ:
Android テーマに参加中!
自分で eclair をビルドして Android Dev Phone 1 や 2 で動かす方法。
カスタムROM と違って、Market アプリとか使えない。

http://code.google.com/p/android-development-environment/wiki/EclaironADP1andADP2

LiveWallpaper の動作に必要なライブラリである librs_jni.so と libRS.so がインストールされないので、
インストールされるようにした。
ネクサス(LiveWallpaper の一つ)は結構快適に動いてる(ように見える)

devphone-eclair-002devphone-eclair-003adp2-008


情報元は、こちら。
http://d.hatena.ne.jp/androidzaurus/20100121/1264065376

TARGET_ARCH_VARIANT:=armv6 を作成してみた (続き)

共通テーマ:
Android テーマに参加中!
コメント頂いたので、Eclair on Armadillo-500FX の環境構築手順を更新した。
http://code.google.com/p/android-development-environment/wiki/EclaironArmadillo500FX

変更内容は、
・TARGET_ARCH_VARIANT:=armv6 を指定してビルド出来る環境
・2010/01/09 時点での master に対応

armv6 向けに変更・追加したファイルの一覧。
[build]
build/core/combo/arch/arm/armv6.mk
[dalvik]
dalvik/vm/mterp/config-armv6
dalvik/vm/mterp/rebuild.sh
dalvik/vm/mterp/out/InterpAsm-armv6.S
dalvik/vm/mterp/out/InterpC-armv6.c
dalvik/vm/compiler/codegen/arm/Codegen-armv6.c
dalvik/vm/compiler/codegen/arm/armv6/ArchVariant.c
dalvik/vm/compiler/codegen/arm/armv6/ArchVariant.h
dalvik/vm/compiler/template/config-armv6
dalvik/vm/compiler/template/rebuild.sh
dalvik/vm/compiler/template/out/CompilerTemplateAsm-armv6.S
dalvik/vm/compiler/template/armv6/TEMPLATE_ADD_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_ADD_FLOAT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_CMPG_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_CMPG_FLOAT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_CMPL_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_CMPL_FLOAT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_DIV_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_DIV_FLOAT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_DOUBLE_TO_FLOAT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_DOUBLE_TO_INT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_FLOAT_TO_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_FLOAT_TO_INT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_INT_TO_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_INT_TO_FLOAT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_MUL_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_MUL_FLOAT_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_SQRT_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_SUB_DOUBLE_VFP.S
dalvik/vm/compiler/template/armv6/TEMPLATE_SUB_FLOAT_VFP.S
dalvik/vm/compiler/template/armv6/TemplateOpList.h
dalvik/vm/compiler/template/armv6/fbinop.S
dalvik/vm/compiler/template/armv6/fbinopWide.S
dalvik/vm/compiler/template/armv6/funop.S
dalvik/vm/compiler/template/armv6/funopNarrower.S
dalvik/vm/compiler/template/armv6/funopWider.S
[webkit]
external/webkit/V8Binding/v8/src/arm/macro-assembler-arm.cc

変更後、ビルド時に環境変数
TARGET_ARCH_VARIANT:=armv6
WITH_JIT:=true
JS_ENGINE:=v8
を指定する。

armv6 向けにやったことの概要。
まずは、build/core/combo/arch/arm/armv6.mk を変更する。
今回の場合、Armadillo-500FX の CPU は arm1136jf-s なので、以下のように設定を書いた。
VFP を使うようにするのと、armv6/arm1136jf-s を指定する。
# Configuration for Linux on ARM.
# Generating binaries for the ARMv6 architecture and higher
#
ARCH_ARM_HAVE_THUMB_SUPPORT := true
ARCH_ARM_HAVE_FAST_INTERWORKING := true
ARCH_ARM_HAVE_64BIT_DATA := true
ARCH_ARM_HAVE_HALFWORD_MULTIPLY := true
ARCH_ARM_HAVE_CLZ := true
ARCH_ARM_HAVE_FFS := true
ARCH_ARM_HAVE_VFP := true

# Note: Hard coding the 'tune' value here is probably not ideal,
# and a better solution should be found in the future.
#
arch_variant_cflags := \
-march=armv6 \
-mtune=arm1136jf-s \
-mfpu=vfp \
-mfloat-abi=softfp

あとは dalvik や webkit 配下に armv〜 とあるフォルダ、ファイルがある場合、armv6 向けの対応を追加する。
※無いとビルドエラーとなるため、そこで気が付くけど。
webkit に関しては、JS_ENGINE := v8 を指定しなければ不要。
external/webkit/V8Binding/v8/src/arm/macro-assembler-arm.cc 内に、
#if defined(USE_THUMB_INTERWORK)
#if !defined(__ARM_ARCH_5T__) && \
!defined(__ARM_ARCH_5TE__) && \
!defined(__ARM_ARCH_7A__) && \
!defined(__ARM_ARCH_7__)
// add tests for other versions above v5t as required
#error "for thumb inter-working we require architecture v5t or above"
#endif
#endif

というチェックがあるので、__ARM_ARCH_6__ を追加してやる。
#if defined(USE_THUMB_INTERWORK)
#if !defined(__ARM_ARCH_5T__) && \
!defined(__ARM_ARCH_5TE__) && \
!defined(__ARM_ARCH_6__) && \
!defined(__ARM_ARCH_7A__) && \
!defined(__ARM_ARCH_7__)
// add tests for other versions above v5t as required
#error "for thumb inter-working we require architecture v5t or above"
#endif
#endif

ARMv4 対応も欲しいなと思う。
これが良い感じかな?
http://wiki.linuxmce.org/index.php/Mini2440

TARGET_ARCH_VARIANT:=armv6 を作成してみた

共通テーマ:
Android テーマに参加中!
TARGET_ARCH_VARIANT:=armv7-a で書いた通り、armv6 用の設定が無い。
なので、作成してみた。

ターゲットである Armadillo-500 FX のスペック
http://www.atmark-techno.com/products/armadillo/a500fx/specs
ARM1136JF-S なので、これ向けに armv6.mk 等を用意。

次の4パターンで計測して効果があるかを確認。
TARGET_ARCH_VARIANT を定義しない場合(armv5te)
TARGET_ARCH_VARIANT:=armv6 を定義した場合
JIT Compiler 有効 / TARGET_ARCH_VARIANT 定義無し(armv5te)
JIT Compiler 有効 / TARGET_ARCH_VARIANT:=armv6

ソフトは 2009/11/28 時点での master を使用。
環境構築のベースはこれ。
http://code.google.com/p/android-development-environment/wiki/EclaironArmadillo500FX


結果は以下の通り。

TARGET_ARCH_VARIANT を定義しない場合(armv5te)
CPU: Dhrystones:                25120.8 stones/sec
CPU: Whetstones(10): 10665.6 KWIPS
CPU: Himeno: 5.509800005
CPU: Spectral Normalization: 6066.8 msec

TARGET_ARCH_VARIANT:=armv6 を定義した場合
CPU: Dhrystones:                23809.6 stones/sec
CPU: Whetstones(10): 19218.4 KWIPS
CPU: Himeno: 4.682000017
CPU: Spectral Normalization: 3302.6 msec

JIT Compiler 有効 / TARGET_ARCH_VARIANT 定義無し(armv5te)
CPU: Dhrystones:                34183.2 stones/sec
CPU: Whetstones(10): 15561.6 KWIPS
CPU: Himeno: 3.014599991
CPU: Spectral Normalization: 4115.4 msec

JIT Compiler 有効 / TARGET_ARCH_VARIANT:=armv6
CPU: Dhrystones:                34232.0 stones/sec
CPU: Whetstones(10): 37371.2 KWIPS
CPU: Himeno: 2.695800018
CPU: Spectral Normalization: 1506.0 msec


JIT Compiler と armv6 定義で、かなり数値が良くなったので驚いた。
が、表示がもたつく感じはあまり変わらず。
表示まわりのドライバを見直した方が良いかな?

ADP1 と ADP2 も armv6 でビルドすれば良くなるかも。

TARGET_ARCH_VARIANT:=armv7-a の効果を確認

共通テーマ:
Android テーマに参加中!
ET2009 で ARM の人が Android のバージョンが上がる方が ARM 向け最適化が進むと言っていた。
実際に eclair の build/core/combo/arch/arm を見ると、
armv4t.mk
armv5te.mk
armv5te-vfp.mk
armv7-a.mk
が用意されている。(何故か armv6 向けが無い)

これらは、
TARGET_ARCH_VARIANT:=armv7-a
のようにして定義して使用する。


実際に違いが出るか、性能を BeagleBoard を使用して確認した。
測定は「Dalvik JIT Compiler の確認」と同様の方法で、
TARGET_ARCH_VARIANT を定義しない場合(armv5te)と、
TARGET_ARCH_VARIANT:=armv7-a を定義した場合の二つ。

Eclair on BeagleBoard はこちら。
http://code.google.com/p/android-development-environment/wiki/EclaironBeagleBoard

以下測定結果。

TARGET_ARCH_VARIANT を定義しない場合(armv5te)
CPU: Dhrystones:                38836.6 stones/sec
CPU: Whetstones(10): 18186.6 KWIPS
CPU: Himeno: 3.625400019
CPU: Spectral Normalization: 3330.0 msec

TARGET_ARCH_VARIANT:=armv7-a を定義した場合
CPU: Dhrystones:                39016.4 stones/sec
CPU: Whetstones(10): 26383.8 KWIPS
CPU: Himeno: 3.3102
CPU: Spectral Normalization: 1926.0 msec


ARMの人は嘘言ってなかったと。
BeagleBoard 使う時は TARGET_ARCH_VARIANT を定義した方が良い。

JIT Compiler を加えると、さらに良くなりそう。
あとはグラフィックスドライバさえあれば...と思う。

Dalvik JIT Compiler の確認

共通テーマ:
Android テーマに参加中!
効果あるのか?という確認のため、簡単だけど確認してみた。
ターゲットは Android Dev Phone 1 と Android Dev Phone 2 の二つ。

ベンチマークソフトは、
http://code.google.com/p/rowboat/
で公開されているものを使用。

eclair でのビルド方法は Wiki に書いた通り。
http://code.google.com/p/android-development-environment/wiki/EclaironADP1andADP2

多少ばらつきがあったので、5回測定。
以下は測定結果(5回測定の平均値)

Android Dev Phone 1
JIT Compiler 無効( Wiki に書いた通りの方法)
CPU: Dhrystones:                17561.4 stones/sec
CPU: Whetstones(10): 9671.0 KWIPS
CPU: Himeno: 6.217800045
CPU: Spectral Normalization: 6466.6 msec

JIT Compiler 有効 ( WITH_JIT:=true を定義してビルド )
CPU: Dhrystones:                18618.8 stones/sec
CPU: Whetstones(10): 14111.8 KWIPS
CPU: Himeno: 3.706400013
CPU: Spectral Normalization: 4385.6 msec

Android Dev Phone 2
JIT Compiler 無効( Wiki に書いた通りの方法)
CPU: Dhrystones:                16720.0 stones/sec
CPU: Whetstones(10): 9352.8 KWIPS
CPU: Himeno: 6.228999949
CPU: Spectral Normalization: 6242.6 msec

JIT Compiler 有効 ( WITH_JIT:=true を定義してビルド )
CPU: Dhrystones:                19667.2 stones/sec
CPU: Whetstones(10): 14195.8 KWIPS
CPU: Himeno: 3.910999918
CPU: Spectral Normalization: 4339.6 msec

個々の項目の詳細は理解してないが、
Dhrystones と Whetstones は大きい方、
Himeno と Spectral Normalization は小さい方が性能が良い(はず)
そのため、結果としては効果はある。
体感速度としてはあまり感じないが...
連絡先
sola.1980.a [at] gmail.com

<<  January,2010  
S M T W T F S
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
訪問者数
  • 今日:
  • 昨日:
  • 累計: