**AndroidをVMWareにインストール [#p9c4f708] RIGHT:更新日 &lastmod(); AndroidをVMwareにインストールしてみる。 **作業環境 [#w3036f8c] 方法はVMware上にUbuntuをインストールしてそのうえでAndroidをkernelからビルドして、それをVMWareの別ドライブにコピーし、最後にそのドライブを別のVMWareからAndroidして起動する 初めにUbuntuの仮想マシンは下記URLからダウンロード http://www.ubuntulinux.jp/products/JA-Localized/vmware Androidビルドにはメモリが必要なので、Ubuntu仮想マシンには1.5GBを割り当てた。 **Ubuntu上で作業 [#v4327f2c] 以降は仮想マシンUbuntuを起動して作業 ***Android kernel source の取得 [#j26f0469] $ cd $ git clone git://android.git.kernel.org/kernel/common.git kernel $ cd kernel $ git checkout --track -b android-2.6.29 origin/android-2.6.29 kernelディレクトリにDownlodされる ***ビルド環境設定 [#u9ee6e48] $ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \ libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl \ libncurses5-dev zlib1g-dev emacs $ cd ~ $ mkdir bin $ export PATH=$PATH:~/bin $ echo “export PATH=$PATH:~/bin” >> ~/.bashrc $ export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16 $ echo “export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16″ >> ~/.bashrc ***Androidソースリポジトリのダウンロード [#ua72e76e] $ curl http://android.git.kernel.org/repo > ~/bin/repo $ chmod a+x ~/bin/repo ''・リポジトリの初期化'' $ mkdir cupcake $ cd cupcake $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake Getting repo ... from git://android.git.kernel.org/tools/repo.git warning: no common commits remote: Counting objects: 898, done. remote: Compressing objects: 100% (327/327), done. remote: Total 898 (delta 589), reused 852 (delta 551) Receiving objects: 100% (898/898), 270.20 KiB | 263 KiB/s, done. Resolving deltas: 100% (589/589), done. From git://android.git.kernel.org/tools/repo * [new branch] master -> origin/master (略) Your Name [okada]: <==Enter Your Email [okada@ubuntu-vm.(none)]: <==Enter Your identity is: okada <okada@ubuntu-vm.(none)> is this correct [yes/no]? <== yes repo initialized in /home/okada/cupcake ※ ユーザ名、メールアドレスはそのままEnter 最後は「yes」 「.repo」というディレクトリを確認できればOK ''・リポジトリのダウンロード'' $ repo sync Initializing project platform/bionic ... warning: no common commits remote: Counting objects: 2695, done. remote: Compressing objects: 100% (1181/1181), done. remote: Total 2695 (delta 1638), reused 2483 (delta 1472) (略) From git://android.git.kernel.org/platform/vendor/htc/dream-open * [new branch] cupcake -> korg/cupcake * [new branch] donut -> korg/donut * [new branch] master -> korg/master Fetching projects: 100% (117/117), done. <==ここが100% Checking out files: 100% (7703/7703), done.ut files: 45% (3510/7703) Checking out files: 100% (2553/2553), done.ut files: 25% (654/2553) Checking out files: 100% (3804/3804), done.out files: 35% (1355/3804) Checking out files: 100% (2860/2860), done.out files: 32% (926/2860) Checking out files: 100% (7311/7311), done.out files: 24% (1795/7311) Checking out files: 100% (5912/5912), done.out files: 9% (575/5912) Checking out files: 100% (1098/1098), done. out files: 10% (120/1098) Syncing work tree: 100% (116/116), done. Fetching projects: 100%"が表示されるとDownload完了。出ないときは「repo sync」を再実行 以下のファイルをx86用のソースをDownloadする為作成 ''.repo/local_manifest.xml'' <?xml version="1.0" encoding="UTF-8"?> <manifest> <project name="platform/vendor/asus/eee_701" path="vendor/asus/eee_701"> </project> </manifest> x86用のソースの取得 $ repo sync Fetching projects: 99% (117/118) Initializing project platform/vendor/asus/eee_701 ... warning: no common commits remote: Counting objects: 33, done. remote: Compressing obremote: jects: 100% (31/31), done. remote: Total 33 (delta 2), reused 30 (delta 2) Unpacking objects: 100% (33/33), done. From git://android.git.kernel.org/platform/vendor/asus/eee_701 * [new branch] cupcake -> korg/cupcake * [new branch] master -> korg/master Fetching projects: 100% (118/118), done. "Fetching projects: 100%"が表示されればOK cupcake/vendor/asusというフォルダが追加される kernelソースを移動 $mv ~/kernel ~/cupcake/ ***パッチの適用 [#he451bec] 以下からパッチをホームディレクトリにDownload http://code.google.com/p/patch-hosting-for-android-x86-support/downloads/list $ cd ~ $ patch -d ~/cupcake/vendor/asus/eee_701 < 0001-1.-added-scripts-to-build-install-image.patch $ patch -p1 < ~/0001-fixed-different-build-breaks-added-mouse-cursor-sup.patch patching file Android.mk patching file AndroidBoard.mk patching file disk_img.conf patching file eee_701.mk patching file init.rc patching file make_boot_img.sh $ cd ~/cupcake/frameworks/base $ patch -p1 < ~/touchscreen.patch patching file Android.mk patching file core/java/android/view/RawInputEvent.java patching file include/ui/EventHub.h patching file preloaded-classes.arm patching file preloaded-classes.x86 patching file services/java/com/android/server/KeyInputQueue.java patching file services/java/com/android/server/WindowManagerService.java patching file services/jni/com_android_server_BatteryService.cpp $ cd ~/cupcake/kernel $ patch -p1 < ~/alarm.patch patching file drivers/rtc/alarm.c $ patch -p1 < ~/atl1e.patch patching file drivers/net/atl1e/atl1e.h patching file drivers/net/atl1e/atl1e_hw.c patching file drivers/net/atl1e/atl1e_main.c $ patch -p1 < ~/atl2-2.2.3.patch patching file drivers/net/Kconfig patching file drivers/net/Makefile patching file drivers/net/atlx/Makefile patching file drivers/net/atlx/atl1.c The next patch would create the file drivers/net/atlx/atl2.c, which already exists! Assume -R? [n] <==以降このパッチは古いと出るのでEnterを いれすべてスキップする Apply anyway? [n] Skipping patch. $ patch -d ~/cupcake/external/e2fsprogs < ~/e2fsprogs.patch patching file Android.mk $ patch -d ~/cupcake/external/qemu < ~/qemu_gnu.patch patching file Makefile.android ※ -dオプションを付ける時は最後に"/"を付けない $cd ~/cupcake ''frameworks/base/services/java/com/android/server/PowerManagerService.java''を修正 // assume nothing is on yet mUserState = mPowerState = 0; ↓ mUserState = mPowerState = SCREEN_BRIGHT; 変更しなとキーボードが動作しないようだ **Androidおよびカーネルのビルド [#nd2bd59d] ''・Androidのビルド'' $ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make -j4 installer_img build/core/product_config.mk:261: WARNING: adding test OTA key ============================================ TARGET_PRODUCT=eee_701 TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=x86 HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID= ============================================ (略) I/diskutils( 3394): Writing RAW \ image 'out/target/product/eee_701/installer/installer_data.img' \ to 'out/target/product/eee_701/installer.img' (offset=5623808) I/diskutils( 3394): Wrote 450465792 bytes to \ out/target/product/eee_701/installer.img @ 5623808 File edit complete. Wrote 2 images. Done with bootable installer image -[ out/target/product/eee_701/installer.img ] ※ "Done with bootable installer image -[ out/target/product/eee_701/installer.img ]-" が表示されていれば完了 ''・カーネルのビルド'' $ cd kernel $ make i386_defconfig (略) HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf # # configuration written to .config # $ make menuconfig 以下を変更 General setup ---> (0) Default panic timeout [ ] Configure standard kernel features (for small systems) ---> [ ] Disable heap randomization [*] Enable the Anonymous Shared Memory Subsystem <==「*」を挿入 Choose SLAB allocator (SLUB (Unqueued Allocator)) ---> Power management and ACPI options ---> [ ] Test suspend/resume and wakealarm during bootup [*] Wake lock <==「*」を挿入 [*] Hibernation (aka 'suspend to disk') Device Drivers ---> [*] Misc devices ---> [ ] Android pmem allocator <==「*」を削除 [*] Timed output class driver <*> Binder IPC Driver <==「*」を挿入 [ ] Kernel Debugger Core < > Channel interface driver for HP iLO/iLO2 processor <*> Low Memory Killer <==「*」を挿入 [*] High-speed in-kernel logging driver <==「*」を挿入 [ ] UID based statistics tracking exported to /proc/uid_stat =========================================================================== Kernelへのパッチがうまくいかないと以下の3つのメニューがみつからない場合ある <*> Binder IPC Driver <*> Low memory killer [*] High-speed in kernel logging driver ============================================================================ [*] Fusion MPT device support ---> <==「*」を挿入 --- Fusion MPT device support <*> Fusion MPT ScsiHost drivers for SPI <==「*」を挿入 [*] Network device support ---> -*- PHY Device support and infrastructure ---> [*] Ethernet (10 or 100Mbit) ---> <==「*」を挿入 [*] EISA, VLB, PCI and on board controllers <==「*」を挿入 <*> AMD PCnet32 PCI support <==「*」を挿入 [*] Ethernet (1000 Mbit) ---> Graphics support ---> Console display driver support ---> <*> Framebuffer Console support <==「*」を挿入 -*- Support for frame buffer devices ---> [*] VESA VGA graphics support <*> Real Time Clock ---> [*] Android alarm driver その後 $ make bzImage && make modules (略) CC arch/x86/kernel/test_nx.mod.o LD [M] arch/x86/kernel/test_nx.ko CC drivers/scsi/scsi_wait_scan.mod.o LD [M] drivers/scsi/scsi_wait_scan.ko $ sudo make modules_install INSTALL arch/x86/kernel/test_nx.ko INSTALL drivers/scsi/scsi_wait_scan.ko DEPMOD 2.6.27 $ mkinitramfs -o ~/initrd.img 2.6.27 <=initrd イメージ作成Kernelが2.6.29だがDEPMODが2.6.27なのであわせてたらうまくいった いいのかな? 2.6.29ではエラー ubuntuにAndroid仮想マシンのHDDを/dev/sdbとしてマウントするためShutdown。 **Android仮想マシン作成 [#e896cfb8] OSタイプ:other 2.6x Linux (32bit) メモリ:512MB CPU:1 HDD:作成 ※サイズは4GBくらい NIC:あり(ブリッジ) 作成したHDDを第2HDDに指定してubuntuを起動。以下の作業はubuntu上から行う ***Android用仮想ディスクのフォーマット [#i1e11fe1] $ sudo fdisk /dev/sdb コマンド:n p 領域番号 (1-4):1 最初 シリンダ (1-522, default 1): (Enterを押す) 終点シリンダまたは・・・: (Enterを押す) コマンド:a 領域番号 (1-4):1 コマンド:w $ sudo mkfs.ext3 /dev/sdb1 $ sudo mount /dev/sdb1 /mnt ***GRUBのインストール [#sddd06e4] $ sudo grub-install --root-directory=/mnt /dev/sdb メニューファイル作成 ''/mnt/boot/grub/menu.lst'' default 0 timeout 3 title Android root (hd0,0) kernel /boot/bzImage root=/dev/sda1 rw vga=788 init=/init initrd /boot/initrd.img ***Androidシステムのコピー [#t55a166e] $ sudo cp ~/cupcake/kernel/arch/x86/boot/bzImage ~/initrd.img /mnt/boot $ cd ~/cupcake/out/target/product/eee_701/ $ sudo su # cp -a root/* /mnt # cp -a system/* /mnt/system # cp -a data/* /mnt/data <=dataディレクトリは存在するがその中にファイルが存在しなようだ # cd /mnt/system/usr # chmod -R 777 keychars # chmod -R 777 keylayout # exit ***初期化スクリプトの変更 [#nd6e8a8c] ''/mnt/init.rc'' 以下の部分をコメントアウト # mount rootfs rootfs / ro remount # mount ext3 /dev/block/sda6 /system # mount ext3 /dev/block/sda6 /system ro remount # mount ext3 /dev/block/sda8 /data # mount ext3 /dev/block/sda5 /cache 最終行に以下を追加 service network /system/bin/sh /system/etc/init.network.sh ***ネットワーク起動スクリプトの作成 [#if2edf1c] ''/mnt/system/etc/init.network.sh'' #!/system/bin/sh netcfg eth0 dhcp setprop net.dns1 **.**.**.** <- DNSサーバのIPアドレス $ sudo chmod a+x /mnt/system/etc/init.network.sh ***Android起動 [#uda272bc] ubuntuを終了してAndroid仮想マシンを起動する -コンソールの起動 Alt + F1 -Androidに戻る Alt +F7 -停止方法 1. コンソールを開く 2. # reboot -p Androidのキーボードは101キーボードで認識 #ref("./android1.png") #ref("./android2.png") **参考ページ [#sff9393e] -http://ameblo.jp/icz-tech/entry-10289703633.html