2012/02/13

さくらクラウドでAndroidビルド(ビルド編)

実際にAndroidをビルドしてみます。
ターゲットはAndroid 2.3.4です。

先に結果を書いてしまうと、なんとビルド時間10分以下でした。


基本的には"TI-Android-GingerBread-2.3.4-DevKit-2.1 DeveloperGuide"の手順になります。

"TI_Android_DevKit TI_Android_GingerBread_2_3_4_DevKit_2_1 Product Download Page"からTI_Android_GingerBread_2_3_4Sources.tar.gzをダウンロードします。
これ、約4GBありますのでダウンロードには相当時間かかります。

今回は、前もってさくらのクラウドに別に仮想1コアのサーバ(126円/日)を用意して、ダウンロードしておいたのを仮想12コアの方にコピーしました。
TIのサイトからのダウンロードは100~200kByte/secぐらいで、数時間かかりました。
さくらのクラウド同士でのコピー(scp -c blowfishでコピーしました)は約9MByte/secぐらいで、10分かからないです。

ソースをRAMディスクに展開します。
cd /ramdisk
tar xfz ~/TI_Android_GingerBread_2_3_4Sources.tar.gz
ディレクトリ名が長いのでリネームします(単純に好みの問題です)。
mv TI_Android_GingerBread_2_3_4Sources GingerBread
展開されたgitのローカルリポジトリからチェックアウト(?)します。
cd GingerBread
./.repo/repo/repo sync --local-only
環境変数の調整等をします。実際には~/.bashrcに書いたりしました。
export LANG=C
export PATH=/ramdisk/GingerBread/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
CCACHEの設定をします。通常は~/.ccahe/が使われますが、RAMディスクを使うようにしています。
export USE_CCACHE=1
export CCACHE_DIR=/ramdisk/ccache
mkdir -p /ramdisk/ccache
ビルド用のシェルスクリプトを準備します。ビルド時間を測りたかったのと、リモートログインの都合上、ビルド中のメッセージ表示を抑制するためです。
#!/bin/sh
time > log
make TARGET_PRODUCT=beagleboard OMAPES=5.x -j 24 >> log 2>%1
time >> log
makeに-j 24を指定しています。これは最大24並列でプロセスを実行させるということです。
勉強会参加の他の方から「コア数の倍ぐらいがいいらしい」というので仮想12コア→-j 24としました。

ビルド実行します。/ramdisk/GingerBread/で先ほどのシェルスクリプトを実行します。
これで、AndroidのFileSystem、Linux kernel、SGX用カーネルモジュール、それぞれのビルドが一気に行われます。

結果です。ログの先頭と終端の抜粋です。

Sat Feb 11 12:47:14 JST 2012
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.4
TARGET_PRODUCT=beagleboard
……(中略)……
binary texture_benchmark -> /system/bin/texture_benchmark
Installation complete!
make[1]: Leaving directory `/ramdisk/GingerBread/hardware/ti/sgx'
Sat Feb 11 12:56:47 JST 2012

12:47:14に開始して12:56:47に完了しています。
数十分ぐらいかかるかと思いきや9分33秒でビルド完了です。
速いです。

この後は、ビルド結果を手元にダウンロードして動作確認します。

ダウンロード用にファイルを準備します。
make fs_tarball
ダウンロードすべきファイルは以下2つのファイルです。合計で約43MByteです。
/ramdisk/GingerBread/out/target/product/beagleboard/rootfs.tar.bz2
/ramdisk/GingerBread/kernel/arch/arm/boot/uImage

あとは手元のLinuxでの作業です。

BeagleBoard-xM用のPrebuiltイメージを使います。
tar xvfz beagleboard-xm.tar.gz
cd beagleboard-xm
rm Filesystem/rootfs_beagle_xm.tar.bz2
ダウンロードしたuImageをbeagleboard-xm/Boot_Images/にコピーします。
ダウンロードしたrootfs.tar.bz2をbeagleboard-xm/Filesystem/にコピーします。
sudo ./mkmmc-android.sh /dev/sdb (要注意)
最後の/dev/sdbは環境によって/dev/sdcだったり/dev/sddだったりします。

0 件のコメント:

コメントを投稿