steletoの日記 このページをアンテナに追加 RSSフィード

2008-04-12

[][][] 状況整理 14:31  状況整理を含むブックマーク  状況整理のブックマークコメント

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


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つ隣りに表示される。ダブルバッファ有効と勘違いされている?

androidzaurusandroidzaurus 2008/04/13 08:44 w100のframe bufferのコード読んだけど、これちょっと手がかかる鴨と思ってたけど。あれれ?あれれ?すごーい。すごーい。

キー入力が2段飛びでしか画面に反映されないのは、間違いなくダブルバッファが効いていない症状ですねー。

androidzaurusandroidzaurus 2008/04/13 11:47 w100fb.cを覗いてみましたけど、mmapないですねー。ひょっとするとimageblitで動いているのかもしれませんねー。straceしてみないとわかりませんけど。

ちらつきは、w100_fb_par()をw100_fb_par_init()にしてw100fb_probe()からはそっちを呼び出すようにして、w100_fb_par()はreturn 0するだけにする、Brilliant Service Methodで直るかと思われ。

Armadillo-500のちらつき対策パッチ - Android情報-ブリリアントサービス
http://d.hatena.ne.jp/bs-android/20080305/1204731781

BINDER_IPC=mできないんですよねー。そのうち直そうかと思いつつ放置。ぐはっ。

androidzaurusandroidzaurus 2008/04/13 12:17 勝手に翻訳して本館に記事書かせていただきました。うほほーい。

steletosteleto 2008/04/14 01:27 わーわざわざ翻訳までして頂いてありがとうございます。英語はサッパリなので助かりました。まさかベタ移植だけで動作するとは思っていなかったのでホントびっくりです。
ネットワークは試してみたらm3と同じ方法でGoogleに接続できたので大丈夫そうです。
ちらつき対策は後ほど試してみます。…といっても実はC700じゃまったくちらついていないのですが、とりあえずパッチがあるなら入れてみよー的なノリで突撃します(笑)

トラックバック - http://d.hatena.ne.jp/steleto/20080412/1207978273