2010年07月08日

実機用のAndroid2.2(Froyo)のビルド

KZM-CA9-01ボード(Cortex-A9 Quad core)でAndroid2.2(Froyo)を動かしました。

このビルド方法を簡単に紹介します。

他のボードで動かすときにも参考になると思います。



カーネル

カーネルは更新しなくても大丈夫です。Andorid1.5(Cupcake)で使用していたカーネルと同じものを使用できます。

Androidソースのダウンロード

android-2.2_r1.1のタグでソースをダウンロードする。

 $ mkdir android-2.2_r1.1
 $ cd android-2.2_r1.1/
 $ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2_r1.1
 $ repo sync

ソースにパッチを当てる

本来ならばvendorというディレクトリを作ってボード固有のファイルをそこに置くのですが、今回は最小限の変更だけで動かします。

 $ patch -p0 < mountserver.patch
 $ patch -p0 < dns.patch
 $ patch -p0 < sdcard.patch

これらのパッチファイルはこのページの最後に貼っておきます。

(patchが失敗したら手で修正してください。それくらい少ない変更量です。)

ビルド

 $ cat build.sh
 export ARCH_ARM_HAVE_TLS_REGISTER=true
 export TARGET_ARCH_VARIANT=armv7-a-neon
 export WITH_JIT=true
 export JS_ENGINE=v8
 time make -j4 showcommands 2>&1 |tee make.log

SMPカーネルではTLSレジスタの使用は必須なので、ARCH_ARM_HAVE_TLS_REGISTER=trueを指定します。

 $ ./build.sh

NFS用ルートファイルシステムの作成

開発用にはルートファイルシステムをフラッシュメモリに書くよりもNFSにしたほうが便利です。

make_nfsroot.shのROOT=/export/android/root-2.2_r1.1 を必要に応じて変更してください。

 $ cat make_nfsroot.sh
 ROOT=/export/android/root-2.2_r1.1
 
 [ -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 -a data $ROOT
 #[ -e $ROOT/data/app ] && chmod 771 $ROOT/data/app
 cp $ROOT/init.rc $ROOT/init.rc.org
 sed -e 's/mount rootfs/#mount rootfs/' -e 's/mount yaffs2/#mount yaffs2/'  $ROOT/init.rc.org > $ROOT/init.rc
 sudo chown -R root:root $ROOT

/dataはコピーせずに空のままにすることにしました。

 $ ./make_nfsroot.sh

NFSrootで起動するときにカーネルのブートパラメータ

NFSサーバを192.168.xx.xx とすると

root=/dev/nfs nfsroot=192.168.xx.xx:/export/android/root-2.2_r1.1 ip=dhcp \
noinitrd init=/init console=ttyAMA0,115200 rootwait rw

ベンチマークテスト

こちらを参照してください。

=========================================================

パッチファイル

mountserver.patch

起動時に"Waiting too long for mReady! "のログが出続ける問題の対策。

ここから情報を得ました。

--- frameworks/base/services/java/com/android/server/NativeDaemonConnector.java.org	2010-07-05 16:37:27.000000000 +0900
+++ frameworks/base/services/java/com/android/server/NativeDaemonConnector.java2010-07-04 11:10:19.000000000 +0900
@@ -97,11 +97,12 @@
                     LocalSocketAddress.Namespace.RESERVED);
 
             socket.connect(address);
-            mCallbacks.onDaemonConnected();
 
             InputStream inputStream = socket.getInputStream();
             mOutputStream = socket.getOutputStream();
 
+            mCallbacks.onDaemonConnected();
+
             byte[] buffer = new byte[BUFFER_SIZE];
             int start = 0;
 

dns.patch

DNSサーバを8.8.8.8(Googleが提供するパブリックのDNSサーバ)に設定します。これで有線LANでインターネットのページをブラウザで閲覧できるようになります。

ここから情報を得ました。

--- system/core/rootdir/init.rc.org	2010-07-05 16:56:10.000000000 +0900
+++ system/core/rootdir/init.rc	2010-07-05 16:57:16.000000000 +0900
@@ -255,6 +255,8 @@
     setprop net.tcp.buffersize.umts    4094,87380,110208,4096,16384,110208
     setprop net.tcp.buffersize.edge    4093,26280,35040,4096,16384,35040
     setprop net.tcp.buffersize.gprs    4092,8760,11680,4096,8760,11680
+# Set global DNS
+    setprop net.dns1 8.8.8.8
 
     class_start default
 

sdcard.patch

SDメモリカードをマウントできるようにします。

ここも参照してください。

--- system/core/rootdir/etc/vold.fstab.org	2010-07-07 13:29:48.000000000 +0900
+++ system/core/rootdir/etc/vold.fstab	2010-07-07 13:30:14.000000000 +0900
@@ -14,7 +14,8 @@
 
 ## Example of a standard sdcard mount for the emulator / Dream
 # Mounts the first usable partition of the specified device
-dev_mount sdcard /mnt/sdcard auto /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1
+#dev_mount sdcard /mnt/sdcard auto /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1
+dev_mount sdcard /mnt/sdcard auto /devices/platform/goldfish_mmc.0 /devices/platform/a9tc_mmc.0
 
 ## Example of a dual card setup
 # dev_mount left_sdcard  /sdcard1  auto /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1

関連するページ

Android2.2(Froyo)のダウンロードとビルド

ARM QEMUでDebianをNFSrootで起動する

Android2.3(Gingerbread)のソースのダウンロードとビルド



トラックバックURL

トラックバック一覧

1. KZM-CA9-01ボードのリンク集  [ KMC Staff Blog ]   2010年09月16日 10:44
4コアのCortex-A9のKZM-CA9-01ボードを使って実験したことを書いたページをまとめてみました。

コメントする

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

QRコード
QRコード