やんごとなき事情 により夢電話をゲットしたのでぼんやり遊んでいます。方針としては
- Java を使わない
- testsprite を動かす方がネットワークがつながるより価値が高い
以下 Android 上で native binary とたわむれるメモ。ちなみに既に WiFi とかそのへんの機能全部使えなくなってるのでマネしないでください。
Terminal Emulator
適当に Market からゲット。
クロスコンパイラ
とりあえず深く考えず下記からダウンロードしてつっこんだ。 arm-none-linux-gnueabi のヤツね。
http://www.codesourcery.com/gnu_toolchains/arm/download.html
後述するけど本家のクロスコンパイラ使った方が間違いなく良い。
busybox
http://android-dev.g.hatena.ne.jp/takuma104/20081219/1229707664
を参考に。
% make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm CFLAGS=--static LDFLAGS=--static CONFIG_PREFIX=/sdcard/system install
readline
% CC=arm-none-linux-gnueabi-gcc CFLAGS=-static LDFLAGS=-static ./configure --prefix=/sdcard/system --host=arm-none-linux-gnueabi --build=amd64-gnu-linux % make % make install
bash
% CC=arm-none-linux-gnueabi-gcc CFLAGS=-static LDFLAGS=-static configure --prefix=/sdcard/system --host=arm-none-linux-gnueabi --build=amd64-gnu-linux --without-bash-malloc % make % make install
lib/sh/shmatch.c に適当に
#undef free
とか足した。
zlib
% CC=arm-none-linux-gnueabi-gcc CFLAGS='-O -static' LDFLAGS=-static configure --prefix=/sdcard/system % make % make install
openssl
% make CC=arm-none-linux-gnueabi-gcc LDFLAGS=-static % make install_sw INSTALLTOP=/sdcard/system OPENSSLDIR=/sdcard/system RANLIB=arm-none-linux-gnueabi-ranlib AR=arm-none-linux-gnueabi-ar
openssh (うまく動かず)
% CC=arm-none-linux-gnueabi-gcc CFLAGS='-O -static -I/sdcard/system/include' LDFLAGS='-static -L/sdcard/system/lib' configure --prefix=/sdcard/system --host=arm-none-linux-gnueabi --build=amd64-gnu-linux % make install STRIP_OPT=
sshd は getpwnam がまともに動かんので動かすのは大変そうだった。まぁ bash と busybox で満足することに。いずれにせよこのへんは Android.mk 書いて
SDL with fbcon
http://www.anddev.org/port_opengl-sdl-tinysdgl_to_android_with_native_c-t3265.html
の通りやったところ、 frame buffer は surfaceflinger がガンガン書き込んでるので、全然きちんと表示されず。あと音もたぶんこれでは動かないと思う。
たぶん surfaceflinger を通して描画してもらうべきだろうな…ということで Android のソースコード落としてくることに。
フルビルド
http://source.android.com/download
を見てダウンロード、コンパイル。
色々頑張ってみたものの、インストールされてるシステムとこのソースコードで AIDL がなんか違う気がする。
そこで元のシステムをふっとばすことに。再起動時にカメラボタン押しっぱで起動して、後ろに戻るボタンを押して fastboot と表示させて、 PC から、
./out/host/linux-x86/bin/fastboot -p generic flash system ./out/host/linux-x86/bin/fastboot -p generic flash userdata ./out/host/linux-x86/bin/fastboot reboot
で全データぶっとばしつつ再起動。
WiFi, bluetooth, カメラ, GPS, Compass, GMail, Maps などのアプリあたりが使えなくなった。気にしない方向で。
udev
http://code.google.com/intl/und/android/intro/develop-and-debug.html#developingondevicehardware
に説明があるけど、 Debian lenny (たぶん) では、
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"
を z99-android.rules とかで書くとうまくいった。たぶん 50-udev.rules より前に来ちゃうとダメなんじゃないかな。
SDL with surfaceflinger
適当にごにょったら testsprite 動いた。もう少し適当にごにょったら key event がほどほどに。
イベント奪えてないから普通に後ろで動いててアホっぽい。
続きをごにょごにょしたら公開できるといいね…
LD_LIBRARY_PATH は linker のコメントによると未実装ぽいので、
/system/bin/mount -o remount /dev/block/mtdblock3 /system
とかして書き込み可能にしてからインストール。
NesterDC
なんかこの解像度だと無改造で動くのがエミュレータくらいだなぁ…と、適当にごにょったら動いた。ちょっと遅い感じ…
音は適当に
http://www.netmite.com/android/mydroid/system/extras/sound/playwav.c
を参考に /dev/msm_pcm_out を叩いたらえらい遅かった。ちゃんと IPC でやった方がいいのかな。
つか /dev/msm_mp3 ってデバイスはすごいね…
sdlquake
http://git.openmoko.org/git/openmoko.git/packages/quake/sdlquake/sdlquake-no-x86-asm.diff
の patch はこう、これだけでなんでいいの…って感じではあるがコンパイルは通った。しかし起動中に止まるのであった…
その他もろもろ
ro で mount されてる / やら /system, ヘンなオプションが色々ついてる /sdcard は
/system/bin/mount -o remount foo bar
とかで remount すると書き込めるようになって吉。
まぁ個人的には SDL 動いた時点で飽きた…