ICS-x86(android-x86 project版)をビルドしてみた
Android Advent Calendar
http://androidadvent.blogspot.com/2011/11/welcome-to-android-advent-calendar-2011.html
用のネタです。
なんか、次の項目のような記事の妙なネタになっちゃってるので、ビルドしてみる話。
AOSPのx86対応は、JBQ氏によると、
これは、Intelの入れたAtomパッチが生きてて、それ以外ではうまく動かないってのの裏。
サポートしているのは、Atomだけってこと。
android-x86プロジェクトでは、ここにifdef入れて対応している。
現在の動作状態はこんなところというのがリリース文に。
動くもの:
まだ動かないもの:
動いても、大したことはできない。
Honeycombでは、GMA950上のmesaで十分なスピードが出ていたので、ちょっと期待したいのだけどまだ無理かな。
やり方は、ここに書いてあるよね。
http://groups.google.com/group/android-x86/browse_thread/thread/27148b6840e06010?hl=en
基本は、横浜Androidプラットフォーム部第15回勉強会「ICSをビルドしてみた」と同じ。
これの資料はここ。
http://www.android-group.jp/index.php?plugin=attach&refer=%A4%AD%A4%F3%A4%CD%A4%B3&openfile=ICS%A4%F2%A5%D3%A5%EB%A5%C9%A4%B7%A4%C6%A4%DF%A4%BF_PF20111119.pdf
落としてビルドするだけ。
kinneko@BuildSV:~$ mkdir ICSx86 kinneko@BuildSV:~$ cd ICSx86/ kinneko@BuildSV:~/ICSx86$ ../repo init -u git://git.android-x86.org/manifest.git -b ics-x86 kinneko@BuildSV:~/ICSx86$ ../repo sync -j8
取得するリポジトリは217。案外少ない。
error: Exited sync due to fetch errors
とか出てきたら再実行する。
EMobileからのダウンロードでも、3時間くらい。
と、思ったら、落ちてこないじゃん... orz
error: Cannot fetch kernel/common
こういうエラーになることもある。
再実行して、以下のように出てくれば成功。
kinneko@BuildSV:~/ICSx86$ ../repo sync -j4 Fetching projects: 100% (217/217), done. Syncing work tree: 100% (217/217), done.
とりあえず、バックアップをとっておく。
kinneko@BuildSV:~/ICSx86$ tar zcvf ../ICSx86_20111201.tgz .repo/projects/
ビルドにかかる。
kinneko@BuildSV:~/ICSx86$ source build/envsetup.sh including device/amd/common/vendorsetup.sh including device/asus/common/vendorsetup.sh including device/tegatech/tegav2/vendorsetup.sh including sdk/bash_completion/adb.bash
AMD用、ASUS用、Tegav2用の設定が追加されている。
手元には、tegav2と同じ構成のタブレットがあるので、それにしてみる。
kinneko@BuildSV:~/ICSx86$ lunch You're building on Linux Lunch menu... pick a combo: 1. full-eng 2. generic_x86-eng 3. vbox_x86-eng 4. amd_brazos-eng 5. eeepc-eng 6. asus_laptop-eng 7. tegav2-eng Which would you like? [full-eng] 7 ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.1 TARGET_PRODUCT=tegav2 TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=x86 TARGET_ARCH_VARIANT=x86-atom HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ITL41D ============================================
ビルドする。
kinneko@BuildSV:~/ICSx86$ make -j12
止まった。
make: *** No rule to make target `device/common/firmware/ath3k-2.fw', needed by `out/target/product/tegav2/obj/FIRMWARE/ath3k-2.fw_intermediates/ath3k-2.fw'. Stop. make: *** Waiting for unfinished jobs....
をーい。
ath3kって、bluetoothのドライバだったかな。
たしか、こいつは、OSSドライバで完全に動くようになっていたのじゃなかったか。
kinneko@BuildSV:~/ICSx86$ grep LOCAL_FIRMWARES device/tegatech/tegav2/AndroidBoard.mk LOCAL_FIRMWARES := ath3k-2.fw
居るな。
なんと!
MLの発言をチェックしていると、tegav2は、まだサポートしてないだと?
しょうがない、eeecpターゲットに変更する。
kinneko@BuildSV:~/ICSx86$ make clean kinneko@BuildSV:~/ICSx86$ make installclean kinneko@BuildSV:~/ICSx86$ lunch eeepc-eng ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.0.1 TARGET_PRODUCT=eeepc TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=x86 TARGET_ARCH_VARIANT=x86 HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ITL41D ============================================ kinneko@BuildSV:~/ICSx86$ make -j12 (snip) error: pathspec 'core/tasks/drivers/net/wireless/wl' did not match any file(s) known to git. make: *** [kernel/drivers/net/wireless/wl/hybrid-portsrc_x86_32-v5_100_82_112.tar.gz] Error 1 make: *** Deleting file `kernel/drivers/net/wireless/wl/hybrid-portsrc_x86_32-v5_100_82_112.tar.gz' make: *** Waiting for unfinished jobs....
あれ?
バイナリドライバを使うようなやつは、まだ取得ルーチンが入ってなくて、全滅かな?
んで、どんくらいターゲット設定が入っているか確認。
kinneko@BuildSV:~/ICSx86$ cat device/asus/eeepc/eeepc.mk $(call inherit-product,$(LOCAL_PATH)/../common/generic_asus.mk) PRODUCT_NAME := eeepc PRODUCT_DEVICE := eeepc kinneko@BuildSV:~/ICSx86$ cat device/asus/eeepc/BoardConfig.mk TARGET_HAS_THIRD_PARTY_APPS := true BOARD_GPU_DRIVERS := i915 r600g BOARD_USES_KBDSENSOR := true BOARD_USES_KBDSENSOR_ROTKEY1 := true include $(GENERIC_X86_CONFIG_MK) kinneko@BuildSV:~/ICSx86$ cat device/asus/eeepc/AndroidBoard.mk LOCAL_PATH := $(call my-dir) LOCAL_FIRMWARES := rt2860.bin $(subst device/common/firmware/,,$(wildcard device/common/firmware/radeon/*)) TARGET_INITRD_SCRIPTS := $(LOCAL_PATH)/../common/asus_info TARGET_KERNEL_CONFIG := $(LOCAL_PATH)/eeepc_defconfig include $(GENERIC_X86_ANDROID_MK kinneko@BuildSV:~/ICSx86$ cat device/asus/eeepc/init.eeepc.rc on boot chown system system /sys/class/backlight/eeepc/brightness
あらー、これだけか。
asus/commonも見る。
kinneko@BuildSV:~/ICSx86$ cat device/asus/common/AndroidProducts.mk (snip) PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/../eeepc/eeepc.mk \ $(LOCAL_DIR)/../laptop/laptop.mk kinneko@BuildSV:~/ICSx86$ cat device/asus/common/vendorsetup.sh add_lunch_combo eeepc-eng add_lunch_combo asus_laptop-eng kinneko@BuildSV:~/ICSx86$ cat device/asus/common/generic_asus.mk PRODUCT_PACKAGES := $(THIRD_PARTY_APPS) PRODUCT_PACKAGES += sensors.$(TARGET_PRODUCT) PRODUCT_COPY_FILES := \ device/common/generic_x86/GenericTouch.idc:system/usr/idc/GenericTouch.idc \ $(call inherit-product,$(SRC_TARGET_DIR)/product/generic_x86.mk) PRODUCT_MANUFACTURER := asus kinneko@BuildSV:~/ICSx86$ cat device/asus/common/asus_info DMIPATH=/sys/class/dmi/id asus_info() { board=`cat $DMIPATH/product_name` case "$board" in ET1602*) BOARD_USES_TSLIB=true ;; ET2002*) UVESA_MODE=${UVESA_MODE:-1600x900} BOARD_USES_TSLIB=true ;; T91|T101) UVESA_MODE=${UVESA_MODE:-1024x600} BOARD_USES_TSLIB=true ;; T91MT|T101MT) UVESA_MODE=${UVESA_MODE:-1024x600} BOARD_USES_TSLIB=true EXTMOD="$EXTMOD hid-multitouch" ;; EP121*) EXTMOD="$EXTMOD hid-multitouch" ;; *) ;; esac return 1 # auto_detect } eeepc_info() { # enable wifi and bluetooth modprobe eeepc-laptop echo 1 > /sys/class/rfkill/rfkill0/state echo 1 > /sys/class/rfkill/rfkill1/state } detect_hardware() { case "`cat $DMIPATH/uevent`" in *ASUSTeK*) grep -q EeePC $DMIPATH/board_serial || grep -q ^ET $DMIPATH/board_name if [ $? -eq 0 ]; then eeepc_info fi asus_info ;; *) error WARNING: Not an ASUS product ;; esac } post_detect() { board=`cat $DMIPATH/product_name` case "$board" in EP121*) echo 3 0eef a001 0 > /sys/module/hid_multitouch/drivers/hid:hid-multitouch/new_id ;; *) ;; esac }
こちらもまだまだ。
asus_laptop-engもやってみる。
kinneko@BuildSV:~/ICSx86$ make clean kinneko@BuildSV:~/ICSx86$ make installclean kinneko@BuildSV:~/ICSx86$ lunch asus_laptop-eng kinneko@BuildSV:~/ICSx86$ make -j12 (snip) Created filesystem with 1723/16064 inodes and 60685/64256 blocks Install system fs image: out/target/product/laptop/system.img
こいつはできた。
ビルド時間は、こんなもん。
real 35m43.496s user 340m46.090s sys 16m1.210s
をや?
kinneko@BuildSV:~/ICSx86$ ls -l out/target/product/laptop/ total 268448 -rw-r--r-- 1 kinneko kinneko 7 Dec 2 10:50 android-info.txt -rw-r--r-- 1 kinneko kinneko 3164160 Dec 2 11:18 boot.img -rw-r--r-- 1 kinneko kinneko 14955 Dec 2 10:49 clean_steps.mk drwxr-xr-x 4 kinneko kinneko 4096 Dec 2 11:19 data drwxr-xr-x 3 kinneko kinneko 4096 Dec 2 11:18 dex_bootjars drwxr-xr-x 2 kinneko kinneko 4096 Dec 2 11:16 grub -rw-r--r-- 1 kinneko kinneko 93562 Dec 2 11:25 installed-files.txt -rw-r--r-- 1 kinneko kinneko 2883104 Dec 2 11:16 kernel drwxr-xr-x 17 kinneko kinneko 4096 Dec 2 11:25 obj -rw-r--r-- 1 kinneko kinneko 540 Dec 2 10:49 previous_build_config.mk -rw-r--r-- 1 kinneko kinneko 241307 Dec 2 11:18 ramdisk.img drwxr-xr-x 8 kinneko kinneko 4096 Dec 2 11:18 root drwxr-xr-x 7 kinneko kinneko 4096 Dec 2 11:18 symbols drwxr-xr-x 12 kinneko kinneko 4096 Dec 2 11:18 system -rw-r--r-- 1 kinneko kinneko 263192576 Dec 2 11:25 system.img -rw-r--r-- 1 kinneko kinneko 52428800 Dec 2 11:19 userdata.img drwxr-xr-x 2 kinneko kinneko 4096 Dec 2 11:18 utilities
isoとか出来ませんやん。
前はデフォルトで、iso_imgオプション適用じゃなかったっけ?
このへんも変わったのね。
やり直し。
kinneko@BuildSV:~/ICSx86$ make -j12 usb_img kinneko@BuildSV:~/ICSx86$ ls -lh out/target/product/laptop/asus_laptop_usb.img -rw-r--r-- 1 kinneko kinneko 278M Dec 2 11:32 out/target/product/laptop/asus_laptop_usb.img
isoも作っておく。
kinneko@BuildSV:~/ICSx86$ make -j12 iso_img kinneko@BuildSV:~/ICSx86$ ls -lh out/target/product/laptop/asus_laptop.iso -rw-r--r-- 1 kinneko kinneko 257M Dec 2 11:35 out/target/product/laptop/asus_laptop.iso
USBメモリに焼いて起動してみる。
マシンはideapad S9e。
kinneko@BuildSV:~/ICSx86$ sudo su - [sudo] password for kinneko: root@BuildSV:~# dd if=/home/kinneko/ICSx86/out/target/product/laptop/asus_laptop_usb.img of=/dev/sdb 567352+0 記録始め 567352+0 記録終わり 290484224 バイト (290 MB) コピー終了, 90.218 s, 3.2 MB/s
F12でUSBメモリを選んで起動。
GURBメニューも、背景画像なし、モードも2つで簡素になっている。
2つ目を選ぶ。
Booting 'Android Startup from /dev/sda' cmdline (hd0,2)/cmdline Error 22: No such partition Press any key to continu...
あれ?
インストーラーのドライブ指定がハードコードされている問題は残っているのか。
GRUBのメニューに戻るので、Startupを選んでeキーを押して、起動オプションを編集する。
cmdline (hd0,2)/cmdline
kernel --use-cmd-line )hd0,2)/kernel
initrd (hd0,2)/ramdisk
になっている。
2はないわ。
イメージのパーティションがどうなっているか調べる。
root@BuildSV:~# LANG=C fdisk -l /home/kinneko/ICSx86/out/target/product/laptop/asus_laptop_usb.img You must set cylinders. You can do this from the extra functions menu. Disk /home/kinneko/ICSx86/out/target/product/laptop/asus_laptop_usb.img: 0 MB, 0 bytes 256 heads, 63 sectors/track, 0 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /home/kinneko/ICSx86/out/target/product/laptop/asus_laptop_usb.img1 * 1 36 282652 83 Linux Partition 1 has different physical/logical beginnings (non-Linux?): phys=(1023, 255, 63) logical=(0, 32, 33) Partition 1 has different physical/logical endings: phys=(1023, 255, 63) logical=(35, 45, 37)
うーん。
0で良さげ。
(hd0,2)を(hd0,0)に書き換えて、bキーで起動。
見慣れたAndroid-x86のGRUBが起動してきた。
- Live USB - Run Android-x86 without Instration (MDPI)
- Live USB - VESA Mode
- Live USB - Debug Mode
- Installation - Install Android-x86 2011-12-02 to harddisk
MDPIを選ぶ。ダメですねぇ... ブラックアウト。USBドライブへのアクセスもないみたい。
再起動して、VESAを選んでみる。同じ。androidのアニメーションまで行かない。
generic_x86も試してみる。
kinneko@BuildSV:~/ICSx86$ make clean kinneko@BuildSV:~/ICSx86$ make installclean kinneko@BuildSV:~/ICSx86$ lunch generic_x86-eng kinneko@BuildSV:~/ICSx86$ make -j12 usb_img
あちゃ〜。
ここでもwlドライバの問題で詰まってしまう。
kinneko@BuildSV:~/ICSx86$ grep CONFIG_WL= kernel/arch/x86/configs/android-x86_defconfig CONFIG_WL=m
確かに指定はされている。
しかし、このあたりは、BoardConfigでドライバ指定して、そのドライバ名にフックして処理するスクリプトを動かしていたような。
そのあたりの動きが妙かな?
そいつを潰してみる。
kinneko@BuildSV:~/ICSx86$ vi device/common/generic_x86/BoardConfig.mk #BOARD_WPA_SUPPLICANT_DRIVER ?= NL80211 #BOARD_WPA_SUPPLICANT_PRIVATE_LIB ?= private_lib_driver_cmd #WPA_SUPPLICANT_VERSION ?= VER_0_8_X #WIFI_DRIVER_MODULE_PATH ?= auto
makeしたら出来た。
kinneko@BuildSV:~/ICSx86$ ls -lh out/target/product/generic_x86/generic_x86_usb.img -rw-r--r-- 1 kinneko kinneko 301M Dec 2 13:32 out/target/product/generic_x86/generic_x86_usb.img
ちどデカい。
ついでに、device.mkを見てたら、こんなのがあった。
PRODUCT_CHARACTERISTICS := tablet
ICSから廃止されたのじゃなかったっけ?
残骸かな?
USBメモリに焼いて、起動してみる。
安全牌のVESAモード。androidアニメまでは行く。でも、コンソールのカーソルが残っているな。
おっと、ホーム出た!
と思ったら...
"Unfortunately, System UI has sttoped."
だって。
OK押しても、再度出てくる。何回でも同じ。
StatusBarがちゃんと表示できていない。
この部分だけ、マウスカーソルにゴーストが残る。
サスペンドに落ちるといつもながら復帰できない。
まだまだだねぇ...
結論としては、たぶんAMD環境じゃないと、マトモに動くものはないって感じ。
Didn't I say this is an iso for *AMD* platform, not work for Intel's?
と、Chih-Wei Huangも言っているし。
@tao_gakuさんに、表の「ゴンタをいじめるな!」と言われてしまったので、このくらいの面白くないところで終わります。
続きはまた今度に(^^;。
そうそう、こんな発言があった。
Yes. AMD provides great support to us, including devices donation and engineer's support.
On the other hand, Intel still refuses to provide any help to this project. They closed all contact windows I've ever tried.
Therefore, if you plan to ship android-x86 product, I recommend the AMD platform, which is the best platform to run ics-x86 so far.
ということで、itmediaの情報に問題がある裏はとれた。