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のバイナリのライブラリを組み込めばいけそうです。



トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード