状況整理

昨日の続き。一晩寝かせて頭冷やしてきた。長いので「続きを読む」にて。

bitbakeで2.6.23固定

まずは環境。以前に触れた、カーネルとモジュールのバージョンが違ってキメラな状態になる件。

build/conf/local.confにこんなのを指定して、一旦bitbake linux-rpしてからイメージを作成。適当にそれっぽいのつけまくったら動作したけど、おそらくどれか1つで十分だと思われる。面倒なので未検証。

PREFERRED_VERSION_linux = "2.6.23"
PREFERRED_VERSION_linux-rp = "2.6.23"
PREFERRED_VERSION_c7x0 = "2.6.23"

カーネル

Android on OMAP - eLinux.orgを参照。素の2.6.23カーネルAndroid_m5rc14のカーネルソースを取得して、diff -urNで差分抽出。出力結果をエディタで開いて、QEMU・Goldfish・yaffs2・/drivers/openbinder等不要箇所をガンガン削るとAndroid on OMAP - eLinux.orgのような構成になる。すぐ後ろで書かれているようにOpenBinderは/drivers/android/binder.cに引っ越しているので/drivers/openbinder/は不要。
あとは作ったパッチをbitbakeに喰わせるように.bbファイルを加工。

defconfig-c7x0も合わせて適当に修正。たぶん必須分はこんな感じ。

CONFIG_LOW_MEMORY_KILLER=y
# CONFIG_ANDROID_GADGET is not set
# CONFIG_ANDROID_RAM_CONSOLE is not set
CONFIG_ANDROID_POWER=y
CONFIG_ANDROID_POWER_STAT=y
CONFIG_ANDROID_LOGGER=y
# CONFIG_ANDROID_TIMED_GPIO is not set
CONFIG_ANDROID_BINDER_IPC=y

make oldconfigしたら上だけでなくここも修正がはいっていた。たぶんAndroidと関係なさげだけど一応記録ということで残しておく。

# CONFIG_LOGO is not set
# CONFIG_EXT3_FS_XATTR is not set
CONFIG_JBD=m

ユーザランド

基本的にGoogle Android runs on Sharp Zaurus SL-C3000: Android Zaurusの通り。容量の都合やjffs2だと動かないという噂もあるので、またext2化したSDカード上に展開してchrootする作戦を使用。

ramdisk.imgはAndroid SDKから奪い、data.tar.gzとsystem.tar.gzは2008-02-25 - Android(アンドロイド)情報-ブリリアントサービスさんところを参考にしてbusyboxで起動中のエミュレータから/dataと/systemを吸い出せばOK。

後はデバイスが素のザウルスとAndroidが要求してくるのが若干異なるので、chrootしたときの/devを微調整。こんな感じが正解らしいので、とりあえずハードリンクでも張っておく。

/dev/fb0        → /dev/graphics/fb0
/dev/log_main   → /dev/log/main
/dev/log_radio  → /dev/log/radio
/dev/log_events → /dev/log/events

/dev/eacZaurusにはなかったけど気にしないことに。あと正解一覧のように全てchmod 666しておく。(忘れてたら赤玉ぐるぐるから先に進まなかった)

起動

m3のときと同じスクリプトでOK。gpe-imageベースなので、SSHで忍び込んでgpe-dmをkillしてからスクリプトを走らせている。

状況

  • ダブルバッファのパッチは当てていない。もちろんちらつき修正もせず。
  • ネットワークについては未確認。
  • CONFIG_ANDROID_BINDER_IPC=mにしたらコンパイルにコケた。
  • 電源キーでサスペンドしない(m3と同じ現象)。流石に普段GPEで生活するのに影響するからm3のときはANDROID_POWERを捨てた覚えあり。
  • カーソル表示が1つ飛びに表示される(こちらもm3と同じ)。キーを一度押しただけでは反応せず、もう一度押すと2つ隣りに表示される。ダブルバッファ有効と勘違いされている?