Android 1.5(cupcake)からx86対応を進めているということで、ThinkPadのVMWare上でも動作するだろうということで、VMWare上で動作するAndroidをビルドしてみた。
VMWare上で動作するAndroidのビルド方法はAndroidレポート - 話題の携帯向けOS「Android」をx86パソコンで動かしてみよう:ITproや日本Androidの会で公開されているPDFで分かりやすく説明されてる。
手順通りに進めるも、Androidのビルド時にコンパイルエラーが発生。まず最初が、
build/target/board/Android.mk:35: *** Please rename "vendor/asus/eee_701/Android.mk" to "vendor/asus/eee_701/AndroidBoard.mk".
まぁ、ここは言われるとおり「Android.mk」を「AndroidBoard.mk」にリネームして解決。続いてこちら
Copy: out/target/product/eee_701/obj/lib/libdiskconfig.so -> out/ target/product/eee_701/installer/root/system/lib/libdiskconfig.so Copy: -> dirname: missing operand Try `dirname --help' for more information. …
これについては、external/e2fsprogs/Android.mkというファイルがあるので、2行目のコメントアウトされているコードのコメントを除外してこのように
ifneq ($(TARGET_SIMULATOR),true) include $(call all-subdir-makefiles) endif
とすると解決。続いてこちら
No rule to make target ‘vendor/google/frameworks/maps/com.google.android.maps.xml’
makeのターゲットが無いとか言われても…。ここは、/vendor/asus/eee_701/eee_701.mkに記載されている
generic_with_google.mk
を
generic.mk
に変更。
すると解決。一応これでAndroidのビルド自体は成功。後は引き続き、PDFに記載されているKernelのビルドへ。今度は、make bzImageする際に
drivers/misc/pmem.c:441: error: conflicting types for ‘phys_mem_access_prot’ include/asm/pgtable.h:300: error: previous declaration of ‘phys_mem_access_prot’ was here drivers/misc/pmem.c: In function ‘flush_pmem_file’: drivers/misc/pmem.c:804: error: implicit declaration of function ‘dmac_flush_range’ drivers/misc/pmem.c: In function ‘pmem_setup’: drivers/misc/pmem.c:1264: error: implicit declaration of function ‘ioremap_cached’ drivers/misc/pmem.c:1265: 警告: assignment makes pointer from integer without a cast make[2]: *** [drivers/misc/pmem.o] エラー 1 make[1]: *** [drivers/misc] エラー 2 make: *** [drivers] エラー 2
これについては、menuconfigの内容がNGだったので修正。
一応、カーネルのビルドも終わり、いざBootしてみるも、起動OSでAndroidを選択してもフリーズしたまま先に進まない…。
何故?
Androidは独自のlibcを使用しておりすべてのバイナリがこれにリンクされている。そのため,システム上にすでにlibcがある場合に問題が生じる。
ニュース - Canonicalの開発者,Ubuntu上でAndroidアプリを動かすことに成功:ITpro
この辺、関係あるんだろうか?