- 追加された行はこの色です。
- 削除された行はこの色です。
**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 <==このパッチは古いと出るのでEnterをいれすべてスキップする
$ patch -p1 < ~/atl1e.patch
patching file drivers/net/atl1e/atl1e.h
Reversed (or previously applied) patch detected! Assume -R? [n]
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 -p1 < ~/atl2-2.2.3.patch <==このパッチは古いと出るのでEnterをいれすべてスキップする
patching file drivers/net/Kconfig <==1つだけpatchがあたるようだ
Reversed (or previously applied) patch detected! Assume -R? [n]
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) --->
[ ] Configure standard kernel features (for small systems) --->
[ ] Disable heap randomization
[*] Enable the Anonymous Shared Memory Subsystem <==「*」を挿入
[ ] Disable heap randomization
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 <==「*」を削除
< > Device driver for IBM RSA service processor
[ ] 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) ---> <==「*」を挿入
[*] Ethernet (1000 Mbit) --->
[*] 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
$ mkinitramfs -o ~/initrd.img 2.6.27 <=initrd イメージ作成Kernelが2.6.29なので
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