2011年11月22日
Android4.0(Ice Cream Sandwich)のソースのダウンロードとビルド
Android4.0(Ice Cream Sandwich)のソースコードが公開されたので、まずはemulatorをビルドしてみましょう。
ダウンロード、ビルドの方法
Android Open Source Projectのサイトに書いてありますので見てください。
ここでは、はまりやすい点だけ書きます。
ビルド環境
Android 2.3(Gingerbread)のときと同じ環境でビルドできます。私のビルド環境は Ubuntu 10.04 (x86_64), CPU: Intel Core i7 950 @3.07GHz, メモリ 24GB です。
JavaはSUNのJDKを入れてください。OpenJDKではバージョンチェックで引っかかります。
repoコマンドの取得
すでにrepoコマンドを持っていても、最新版でやりましょう。
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo
ソースリポジトリの初期化
$ mkdir android-ics $ cd andorid-ics $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
ソースコードの取得
$ repo sync
デフォルトで -j4 オプションがついているそうです。
ARMのemulatorのビルド
$ source ./build/envsetup.sh $ lunch full-eng
$ time make -j8 2>&1 |tee make.log
real 36m0.339s user 263m44.560s sys 14m9.700s
ビルドがエラーになったときには make.logを調べましょう。ヘッダファイルが足りないというエラーならば、それを含むパッケージをインストールしていないということなので、このページを見て sudo apt-get install ... を再度実行すればよいと思います。
起動
lunchのスクリプトがPATHやその他の環境変数をセットしていますが、念のため以下のコマンドで確認してください。
$ which emulator
これでSDKのemulatorがでてきてしまったときにはPATHの設定をやりなおすか、明示的に今ビルドしたemulatorを起動します。
$ ./out/host/linux-x86/bin/emulator
カーネルのログが見たい場合は
$ ./out/host/linux-x86/bin/emulator -show-kernel
間違えてSDKのemulatorで起動すると、"Kernel panic - not syncing; Attempted to kill init!" となり起動に失敗します。ICSではデフォルトでarmv7でビルドされていて、initはThumb2でコンパイルされています。今までのSDKのemulatorではデフォルトでARM926(armv5te)のカーネルを起動するのでThumb2が不正命令とみなされて落っこちます。
DalvikVMがどのようなコンフィグでビルドされているかは以下のコマンドで確認できます。
$ adb shell dalvikvm -help |grep ^Config Configured with: debugger profiler hprof jit(armv7-a) show_exception=1
JITは有効になっていてarmv7-aのコードを生成するようになっています。
x86のemulatorのビルド
その前に現在のoutディレクトリを移動。
$ mv out out.full-eng
lunchの指定を変更してビルド。
$ lunch full_x86-eng $ time make -j8 2>&1 |tee make.log
real 46m26.134s user 349m48.670s sys 15m8.320s
ARMよりも長くかかるようです。
起動
$ ./out/host/linux-x86/bin/emulator -show-kernel
KVMが使えるかどうかは自動判定しています。明示的にKVMを有効にするには
$ ./out/host/linux-x86/bin/emulator -show-kernel -qemu -enable-kvm
もしこれで、Permission deniedのエラーになる場合は、以下のように /dev/kvmのアクセス権を変更します。
$ sudo chmod o+rw /dev/kvm $ ls -l /dev/kvm crw-rw-rw-+ 1 root kvm 10, 232 2011-11-21 11:44 /dev/kvm
x86ではJITはまだ使えません。
関連するページ
KZM-A9-DualボードでAndroid 4.0(Ice Cream Sandwich)を動かす
Android2.3(Gingerbread)のソースのダウンロードとビルド
KZM-A9-DualでAndoridのGingerbreadを動かす最短の手順