2012年5月6日日曜日

VMware PlayerでAndroid ICS(インストール編)

前回に続きまして、今回は、x86用Android ICSをVMware Playerの仮想ハードディスクにインストールして起動する方法です。
ハードディスクにインストールすることで、設定やデータが保存できたりと何かと便利です。

では、"新規仮想マシンの作成"からはじめましょう。事前に用意しておくISOは前回と同じくandroid-x86-4.0-RC1-eeepc.isoです。
選択を間違えたりするとうまく起動しない場合があるので、注意して行おう。

まずはじめに、今回はマニュアルで設定を指定していきますので、「後でOSをインストールする」を選択します。

続いて、ゲストOSの選択では「Linux」、バージョンは「他のLinux 2.6.xカーネル」を選択します。

仮想マシンの名前についてはご自由に。

ディスク容量の指定では、とくに何も変更せず「次へ」。(後で正式なものをセットアップします。)

ハードウェアのカスタマイズについては任意に。「完了」で一旦ウィザードを終了します。


続いてVMwarePlayerの画面に戻りますが、すぐに仮想マシンの再生はせずに、"仮想マシン設定の編集"を開き、再度設定の編集を行います。
まずはじめに、先ほどのウィザードにより作成された「ハードディスク(SCSI) 8GB」を「削除」します。(必要ないので)

続いて、ハードウェアの「追加」で「ハードディスク」を選択します。

「仮想ディスクの新規作成」を選択して「次へ」。

ディスクタイプの選択では必ず「IDE」を選択して「次へ」。(デフォルトではSCSIが選択されていますので注意。)

ディスク容量の選択にて、Androidをインストールしたいディスクのサイズを指定します。8GBあれば十分ですので、ここではそのまま8GBとしています。下の選択肢はどちらでも良いです。

ファイル名も任意で「完了」します。

続いて、仮想マシン設定に戻りまして、CD/DVDドライブを選択し、「起動時に接続」にチェックが入っていることを確認し、ISOイメージに選択を変更し、Androidのインストーラディスクである"android-x86-4.0-RC1-eeepc.iso"を選択します。変更を行ったのち、「OK」で設定を閉じます。

以上で設定は完了しましたので、いよいよ仮想マシンの再生です。
ブート選択画面では"Instration ~"を選択しますが、ここでポイントとして「Tab」キーを押してブートオプションの編集を行います。

"android.hardware"のオプションを『generic_x86』(もともとはeeepcとなっている箇所をBSキーで消して入力)。※キーボードの認識が英語配列となっているので、 日本語キーボードで"_"を入力するにはShiftを押しながら"-"キーを押すと入力できます。
ブートオプションを修正したら「Enter」キーでブートを開始します。

まずは、Androidをインストールするためのパーティションを作成する必要がありますので、"Create/Modify partitions"を選択した状態でEnterキーを押し、パーティション編集画面に入ります。

「→」キーで"[New]"を選択しEnter。

"[Primary]"を選択した状態でEnter。

デフォルトで仮想ディスクサイズ全部が指定されますのでEnter。

"[Bootable]"が選択されている状態で一回だけEnter。(Flagに"Boot"と付くことを確認する。)

 パーティションテーブルに書き込んで、編集を確定するため「→」キーで"[Write]"を選択してEnter。

書き込みの確認が表示されるので「yes」とキーボードから入力したのちEnter。

書き込みが完了したら「→」キーで"[Quit]"を選択しEnter。

インストール先として先ほど作成したパーティションであるsda1が選択されているのでEnter。

フォーマットは、Androidの標準である"ext3"を選択してEnter。(fat32では不可でした。)

フォーマットの確認はEnter。

GRUBのインストール確認もEnter。

systemディレクトリを読み書き可能にするかどうかですが、選択はどちらでもよく、Enter。(Yesとしておくほうが何かと便利かも。)

Androidのインストールは以上で完了。"Reboot"を選択すると仮想ハードディスクにインストールしたAndroidが起動します。"Create a fake SD card"でSDカードイメージを作成しておいても良いです。(Enterを押すだけです。その後、Rebootします。)

ブート選択画面ではEnterキーを押すか5秒待つとAndroidのブートに入ります。

サクッとAndroidが起動します。内容としては、Live CDのものとほぼ同じです。

起動を確認したら、"仮想マシンの設定の編集"でISOのマウントを外しておいて良いです。

Android仮想マシンのインターネット接続方法ですが、プリインストールされている「スーパーユーザ」アプリにて、「端末エミュレータ」のスーパーユーザ権限を許可したのち、「端末エミュレータ」アプリを起動し、
$ su
(スーパーユーザアプリで許可を与えておかないと、suは拒否されてしまいます。)
# netcfg eth0 dhcp
# setprop net.dns1 [DNSアドレス]
とすると、DHCPでIPアドレスを自動取得し、VMwareの仮想ネットワークアダプタ経由でホストマシンのインターネット接続を共有してインターネットにアクセスすることができるようになります。
(なぜか、DNSは自動で設定してくれない。)

とりあえず以上です。

2012年5月5日土曜日

VMware PlayerでAndroid ICS(Live CD編)

Android ICSを実機で動かすのもいいのですが、ちょっと画面を見たいだけ、どんなもんかちょっと触ってみたいだけという場合、仮想マシンで動かすのがリーズナブルです。
こちらのプロジェクトでx86用のAndroid(ICS)が公開されていますので、VMware Playerでの動かし方を見てみようと思います。

今回利用するVMware Playerは4.0.3です。これはVMwareから入手してください。(ダウンロード&インストール方法は略です。)

x86用AndroidのLive CDはこちらのページのAndroid-x86-4.0-RC1の"ASUS Eee"(android-x86-4.0-RC1-eeepc.iso)をダウンロードしておきましょう。

では、仮想マシンの作成手順です。
いつもどおり「新規仮想マシンの作成」にて、ウィザードの指示に従って作成していきます。

"インストーラディスクイメージファイル(iso)"にて、先ほどダウンロードしておいたAndroidのLive CDイメージを指定して、「次へ」進みます。

名前は任意に入力し、「次へ」。

仮想ディスク容量の指定ですが、Live CDでは必要ないので適当に入力し(そのままでもOK)、「次へ」。


"ハードウェアをカスタマイズ"はご随意に。「完了」で仮想マシン作成を完了し、仮想マシンを起動します。


仮想マシーンが起動し、ブート選択画面が表示されます。Live CDとして利用する場合にはそのままEnterで起動します。


初期設定ウィザードが表示されますので、適当に済ませるとAndroidのホーム画面が表示されます。




ゲームなどもいくつかプリインストールされています。
以上。サクサク動くのでなかなか面白いですよ。
次回は仮想ディスクへのインストール編に続きます。

Pandaboard AndroidでVNC Server

Pandaboardを動かしていて何が面倒かといえばディスプレイをつながなければならないということではないでしょうか?
はい、というわけで、VNC Serverの出番です。これを導入すると、画面を見るだけでなく、マウス操作などもリモートからコントロールすることができるのです!!

Android上で動作するVNC Serverにも各種あるのですが、色々試した結果、ICS(Android 4.0)という条件で現状利用できるのは、droid-VNC-serverだけのようです。
今回はソースコードからビルドを通しますが、そのためにはAndroidのソースツリーが必要になります。以前ビルドを確認しているAndroid-4.0.4のツリーを使ってみたいと思います。Android自体のビルドはこちらを参照のこと。

まずはソースコードのゲット。
$ mkidr work
$ cd work
$ git clone https://github.com/oNaiPs/droid-VNC-server.git

そのままではビルドが通らないのでfastdroid-vncのソースコードも用意しておきます。
$ cd work
$ wget http://fastdroid-vnc.googlecode.com/files/fastdroid-vnc-1.0.tgz
$ tar xvzf fastdroid-vnc-1.0.tgz
(※なお、こちらでは、VNC Viewerに画面が映りませんのであしからず。ICSではね)

続いて、ビルド手順。
以降、android_404_tracking-pandaがAndroidのソースツリーとして記載します。
まずはREADMEに書かれている通り、サービスのソースコードをAndroidソースツリーのexternal下にコピーします。
$ cp work/droid-VNC-server/droidvncdaemon android_404_tracking-panda/external/

フルビルドを通してもいいのですが、下記のように部分ビルドをする方がお手軽です。
$ cd android_404_tracking-panda
$ . build/envsetup.sh
$ launch pandaboard-eng
(下記が部分ビルドのコマンドです。)
$ TARGET_TOOLS_PREFIX=/opt/android-toolchain-eabi/bin/arm-linux-androideabi- mmm external/droidvncdaemon/

と、すると早速エラーが。。。一個ずつ対処方法を説明していきます。まずは、
external/droidvncdaemon/vnc/libvncserver-kanaka/rfb/rfbproto.h:59:23: error: rfbconfig.h: No such file or directory
ファイルが足りないと言っているわけですが。
このファイルは、
fastdroid-vnc-1.0/LibVNCServer-0.9.7/rfb/rfbconfig.h
にありますので、これをコピーしてやります。
$ cp ~/work/fastdroid-vnc-1.0/LibVNCServer-0.9.7/rfb/rfbconfig.h ~/android_404_tracking-panda/external/droidvncdaemon/vnc/libvncserver-kanaka/rfb/

さらに、includeパスを通しておく必要がありますので、droidvncdaemon/vnc/Android.mkの51行目あたりの下記箇所に一行を追加。
local_c_includes := \
~略~
    $(LOCAL_PATH)/libvncserver-kanaka/rfb \
~略~

で、ビルドを行うと、続いては、
$ TARGET_TOOLS_PREFIX=/opt/android-toolchain-eabi/bin/arm-linux-androideabi- mmm external/droidvncdaemon/
~略~
external/droidvncdaemon/vnc/gralloc_method.c:158: error: 'struct framebuffer_device_t' has no member named 'read'
~略~
そんなメンバーありませんよ!というよくあるエラーですね。これの対処方法は、、、

えーと、現状
android_404_tracking-panda/hardware/libhardware/include/hardware/fb.h
にstruct framebuffer_device_tの定義があります。
あるんですが、read(フレームバッファから画像を取得する)というものはなくなっている。(以前はあったようですが。)
まあ、つまりICSではこの方法ではフレームバッファの描画内容を取得できないということです。

というわけで、該当ソースコードはビルドから外しましょう。
droidvncdaemon/vnc/Android.mkの17行目あたりのgralloc_method.cの行を削除します。
それから、こちらに依存するupdate_screen.cとdroidvncserver.cも関連箇所をコメントアウトします。
(※修正箇所はあとでまとめることにします。)

これでビルドをかけると今度は、
$ TARGET_TOOLS_PREFIX=/opt/android-toolchain-eabi/bin/arm-linux-androideabi- mmm external/droidvncdaemon/
~略~
external/droidvncdaemon/vnc/displaybinder.cpp:40: error: undefined reference to 'android::ScreenshotClient::ScreenshotClient()'
~略~
などのリンカーエラーが発生。
これは、ScreenshotClientのクラス定義が、以前はlibui.soに含まれていたものが現在はlibgui.soに含まれるようになったため、libuiだけをリンクする現在のmakeファイルでは対応できていないせいです。

というわけで、Android.mkにlibguiのライブラリを追加します。

これでビルドを通すと無事にビルドが通ります。out/target/product/pandaboard/system/bin/下にandroidvncserver_froyoとandroidvncserver_gingerupの実行ファイルが出来上がります。
以下、ひとまず、修正差分をまとめます。

droidvncdaemon/vnc/Android.mkの修正 update_screen.cの修正 droidvncserver.cの修正 実行するには。

例えばこちらで作ったpandaboard用のAndroidインストール済みSDカードをPC(Ubuntu)に挿し、出来上がった実行ファイルをコピーしてインストールします。必要なのは、androidvncserver_gingerupの方だけです。
(Ubuntuの場合にはandroidのsystemパーティションが、/media/system/に自動でマウントされます。)
$ sudo cp out/target/product/pandaboard/system/bin/androidvncserver_gingerup /media/system/bin/

これでpandaboardを起動させましょう。

Androidが立ち上がったところで、シリアルコンソールから下記コマンドを実行。※なお、VNCはネットワーク経由でのリモートアクセスですので、事前に有線LANあるいはWiFiを設定し、VNC Viewerをインストールしたマシンと通信できるようにセットしておきます。

(例えば、有線LANを使う場合には、下記コマンドを実行すると、DHCPでIPアドレスを取得します)
# netcfg eth0 dhcp
(取得したIPアドレスの確認)
# netcfg
(androidvncserverの起動)
# androidvncserver_gingerup &

実行時に表示されるメッセージからわかる通り、TCPポート5901でVNC Serverは起動しています。
たとえばUltraVNC Viewerでみる場合には"IPアドレス::5901"で接続します。

以下のような感じで、ばっちりリモートアクセスできてます。レスポンスやフレームレートは少々低いですが、ちょっとした操作をするだけであれば妥協できるレベルかと。

一つ注意点としては、Androidがサスペンド状態に入ると、VNCが切断されてしまいます。
設定メニューからサスペンド(スリープ)までの時間をデフォルトの1分という設定から30分に延長できるのですが、それもどうかという場合には下記コマンドでスリープまでの時間を無限(スリープしない)にできます。(さりげなく、TIPS)

# sqlite3 /data/data/com.android.providers.settings/databases/settings.db 'insert into "system" values(null, "screen_off_timeout",-1);'
※実際にちゃんと機能しているのかどうかあやしいところですが。。。

以上。活用してくれたまえ

2012年5月4日金曜日

pandaboardでLinaro Release 12.04 Androidを試す

前回と同じくコピペ記事です。はい。
詳細はこちらを参照。

はじめに、ビルド済みのイメージをダウンロードです。
wget http://releases.linaro.org/12.04/android/images/panda-ics-gcc47-tilt-tracking-blob/boot.tar.bz2 http://releases.linaro.org/12.04/android/images/panda-ics-gcc47-tilt-tracking-blob/system.tar.bz2 http://releases.linaro.org/12.04/android/images/panda-ics-gcc47-tilt-tracking-blob/userdata.tar.bz2

続いて、書き換えも前回と同様。SDカードを挿してから、
$ sudo linaro-android-media-create --mmc /dev/sdb --dev panda --system system.tar.bz2 --boot boot.tar.bz2 --userdata userdata.tar.bz2
※/dev/sdbの部分は認識されているSDカードのデバイスファイル名にあわせて変更すること

そして、プロプライエタリなライブラリを、下記コマンドで後入れします。
(ちなみに、これを入れない場合、正常にブートしません。Androidロゴのブートアニメーション画面で永久に彷徨うことになります。)
$ wget http://releases.linaro.org/12.04/android/images/panda-ics-gcc47-tilt-tracking-blob/install-binaries.sh
chmod a+x install-binaries.sh
$ ./install-binaries.sh /dev/sdb2
※/dev/sdbの部分はSDカードへの書き込みで使用したデバイスファイル名と合わせる
ダウンロードが始まり、続いてライセンスの表示(Enter)、スペースで条項をスクロールして、同意するか聞かれますので、すかさず "I ACCEPT"と打ってEnterです。

起動させてみますと、



Androidが4.0.4になっていますね。
それ以外は特に変化はなさそう。

というわけで以上。