Tuesday, December 30, 2008

Android Dream Phone で Debian

Android Dream Phone を入手したのでいろいろいじってみた。以下その記録。基本的にAndroid Dev Phone 1と同じだと思う。

wifiでつかえるので、EM OneにWMWifiRouterとかいれておけばそれ経由でどこでも使えるか?と思ったら、現状ではAndroidがAd-hoc使えないみたいでだめげ。PHS300を買うべきなのか?

SDKをダウンロード&インストール。Eclispseに関しては後回し。VAIO Type Zは x86_64 (amd64)なので、Installation Notesに書いてあるとおりia32-libsなどをいれておく必要がある。android-sdk-linux_x86-1.0_r2/toolsにPATHを通したりするsetup scriptを書いた。

とりあえずshellだろうと思い、adb shellしてみるが動かない。adb devicesでdeviceがみつかってない。Developing on Device hardwareに書いてあるようにudev ruleを置いてみるがだめっぽい。いろいろ試した結果、50-android.rulesではなく、z60_android.rulesのようにz60でやらないといけないようだ。これで次のように見えるようになった。
% adb devices
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached 
HTnnnNnnnnnn    device

% adb shell
$
adb pushadb pullでおくりこんだり、とりだしたりできる。

/system/bin/shはとりあえずつかえるけど、微妙にたりないかんじなのでbusyboxをいれた。armelのbusybox-staticパッケージをつかうのが楽。microsdは/sdcardにmountされているけど、ここはVFATでnodev,noexec,fmask=0711などでmountされているので、ここに置いてもbinaryは実行できない。とりあえず/data/binあたりをつくってそこにおくりこむ。
$ mkdir /data/bin
$ exit
% dpkg -x busybox-static_1.10.2-2_armel.deb .
% adb push bin/busybox /data/bin/busybox
% adb shell
$ cd /data/bin
$ ln -s busybox ls
あとは必要なコマンド名でsymlinkをはっていけばよい。busyboxが提供しているコマンドはbusyboxを実行してみればわかる。で、そこにPATHをとおせばOK。

Android MarketにTerminal Emulatorってのがあるので、それをインストールしておけば実機上でもshellにさわれる。

せっかくなのでDebianをいれてみる。課題としてはmicrosdはFAT(symlink、hardlinkできないのでdebian chrootにできない)、defaultのkernelがsupportしているfsはFATとYAFFS(YAFFSは amd64とかには標準ではなさげ)。
とはいっても基本はLinuxなので、ext2.koあたりを作ってinsmodしてやればよい。microsdもpartitionをきってFAT partitionとext2 partitionをつくってやればOK。VAIO Type ZのSD slotにいれてDebian上でcfdisk /dev/mmcblk0とかしてpartitionをきればよい。udevがdeviceファイルをつくるようにいったんぬいて挿しなおし、mkfs/dev/mmcblk0p2をformat。Android上では最初のprimary partition(Androidで/dev/block/mmcblk0p1、VAIO Type Z Debianでは/dev/mmcblk0p1)が/sdcardに自動的にmountされる。2つめのpartitionを手でmountしてやればよい。
Debianのchroot環境は debootstrapでつくる。まずDebian上でfirst stage。
# mount -t ext2 /dev/mmcblk0p2 /mnt
# cd /mnt
# debootstrap --arch armel --foreign --variant=minbase \
     sid . http://ftp.jp.debian.org/debian/
これをAndroidにさして続きを。
$ su
# insmod ext2.ko
# mount -t ext2 /dev/block/mmcblk0p2 /data/sdcard1
# cd /data/sdcard1
# mv dev dev.orig
# mkdir dev
# mount --bind /dev dev
# chroot . bin/bash
# PATH=/usr/bin:/bin:/usr/sbin:/sbin:$PATH
# mount -t proc proc /proc
# ./debootstrap/debootstrap --second-stage
...
#
こんなかんじでだいたいOK。/etc/apt/sources.listを設定すればapt-getもつかえる。