2010年12月21日
Android2.3(Gingerbread)のソースのダウンロードとビルド
12/18にAndroid2.3(Gingerbread)のソースが公開されました。さっそくビルドして動かしてみたので、その方法を簡単に紹介します。
こちらを参照してください。
準備
2.2までと異なり2.3では64bitのLinuxがビルド推奨環境になっています。私はUbuntu 10.04(x86_64)を使用しています。
また、けっこう高性能なPCが必要になるようです。私は最近ビルドマシンを新調してもらいました。(CPU: Intel Core i7 950 @3.07GHz, メモリ12GB) ノートPC上の仮想マシンでは厳しいと思います。
JDK6をインストールしておきます。
$ sudo apt-get install openjdk-6-jdk
本家のページも参照してください。
ソースコードのダウンロード
(2010.12.24修正)
android-2.3.1_r1が出たので修正しました。
(2011.4.14修正)
android-2.3.3_r1に修正しました。
android-2.3_r1のタグを明示してrepo init します。
android-2.3.1_r1のタグを明示してrepo init します。
android-2.3.3_r1のタグを明示してrepo init します。
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.3_r1 $ mkdir android-2.3 $ cd android-2.3 $ repo sync
これにはけっこう時間がかかります。混雑の具合によると思いますが、私の場合はリリース直後だということもあって一時間以上かかりました。
エミュレータのビルド
FroyoまではビルドにJDK5を使用していました。GingerbreadではJDK6です。両者を時々ビルドすることがあるので、ビルドの時に環境変数でJDKを選択するようにしました。
$ cat env.sh export ANDROID_JAVA_HOME=/usr/lib/jvm/java-6-openjdk export JAVA_HOME=/usr/lib/jvm/java-6-openjdk export PATH=$JAVA_HOME/bin:$PATH source build/envsetup.sh lunch generic-eng
$ . ./env.sh $ time make -j8 2>&1 |tee make.log
私の環境では16分くらいでビルドできました。
real 16m19.997s user 107m14.690s sys 6m17.710s
(ノートPC上の仮想マシンではmakeの-jオプション無しで81分かかりました。)
ここでビルドしたエミュレータは以下のようにして起動します。
$ emulator -show-kernel & $ adb logcat
実機用のビルド(実験レベル)
Froyoの時の方法でとりあえずやってみました。
まだいろいろ調べることはありますが、以下の手順でビルドしてKZM-A9-Dualボードで起動することができました。他のボードでも参考になると思います。
kernelはFroyoと同じものを使いました。(2.6.29+Androidパッチ。SMP)
ビルド用のスクリプト
$ cat build.sh export ARCH_ARM_HAVE_TLS_REGISTER=true export TARGET_ARCH_VARIANT=armv7-a-neon export TARGET_CPU_SMP=true export WITH_JIT=true export JS_ENGINE=v8 time make -j8 showcommands 2>&1 |tee make.log
GingerbreadからSMP用の対応が入りました。TARGET_CPU_SMP=true にしておくと適切にメモリバリアの命令を挿入してくれます。
NFSのルートファイルシステムを作成するスクリプト
変数ROOTをNFSサーバのディレクトリに合わせて適宜変更してください。
$ cat make_nfsroot.sh ROOT=/export/android/root-2.3_r1 [ -e $ROOT ] && sudo rm -rf $ROOT mkdir -p $ROOT cd out/target/product/generic/ zcat ramdisk.img | (cd $ROOT; cpio -i) cp -a system $ROOT cp $ROOT/init.rc $ROOT/init.rc.org sed -e 's/mount rootfs/#mount rootfs/' $ROOT/init.rc.org > $ROOT/init.rc sudo chown -R root:root $ROOT
ビルド
$ . ./env.sh $ ./build.sh $ ./make_nfsroot.sh
Froyoの時と同じように、mountserver.patch, dns.patch, sdcard.patchを適用したら、ブラウザで外のページが閲覧できて、SDカードもマウントできました。
24bitカラーできれいに表示するために hardware/libhardware/modules/gralloc を修正しました。
3Dグラフィックスのアクセラレータはまだです。オーディオ、ビデオ再生もまだです。
(2010.12.21追記)
3Dグラフィックスのアクセラレータはバイナリのライブラリしか持っていないのですが、それを組み込んだら動きました。OpenGL関連のライブラリのインタフェースは変わってないようです。
なので、BeagleボードでもFroyoで動いていた3Dのバイナリのライブラリを組み込めばいけそうです。