カーソルキーが有効になった

androidzaurusさんのアドバイスに従い、init.rc の中でrootfsをRead-Onlyで再マウントしているところを、Read-Writeに変えたところ、ブラウザは問題なく起動するようになりました。
また、Android 1.5になっても、起動にはm3版と同じスクリプトを使っていて、android.imgに入っていた/a.shをchrootして呼び出すようにしていたのだけれど、これを、/init を起動するように変更したら、カーソルキーが有効になりました。
a.shでは、initがバックグラウンドタスクで動作するため、カーソルキーが渡されないのかな?
あとはタッチパネルだなあ。/dev/input/event1 をcatすると、何か出ているので、ドライバ自身は有効なんだと思うんだけど。

Android on SL-C860 まとめ

AndroidをSL-C860で制限付きながらも動かせるようになったので、一度、まとめておきます。
まずは、Angstrom環境で動作するAndroid m3版のイメージから。すべては、ここから始まりました。
http://androidzaurus.seesaa.net/article/80104396.html
このイメージファイルがすべての始まりでした。
さらに、SL-C700でAndroid SDK 0.9が動いたという話。
http://d.hatena.ne.jp/steleto/20080925
こうなると、SL-C860でも動くはずなんだけれど、カーネルのパッチとか、イメージとかは見あたらない。仕方がないので、自分でカーネルをなんとかすることにしましたとさ。
m5-rc14版では、Kernel 2.6.23を使っていて、そのカーネルの必須修正はリストがありました。
http://elinux.org/Android_on_OMAP#Kernel_patch
これをもとに、SDK 1.0r1用のカーネルパッチから、2.6.24用のパッチ (400.4K)も作りました。
SL-C700やSL-C860に搭載されているグラフィックチップであるところの、ATI W100をダブルバッファ化も必要と言うことで、
http://d.hatena.ne.jp/steleto/20080417/1208451195
これもパッチ (2.2K)を作り、bitbake環境で適用しました。
さらに、タッチパネルを有効にするためのパッチ。corgi_ts.cにパッチを当てます。
http://blog.seesaa.jp/tb/96581331
たった2行のパッチ(0.4K)だけど、効果は絶大で、m5版ではタッチパネルが動作するようになりました。0.9以降で動作していないのはなぜなのか不明。
あとは、android.imgの作り方。
http://androidzaurus.seesaa.net/article/80730942.html
Android SDK m5-rc14, m5-rc15, 0.9, 1.0r1、オープンソース版Androidでもこの方法で作成しました。
とりあえず、このぐらいだったかな?
安藤恐竜さんから修正のヒントをいただいたので、もう少しトライしてみよう。

Android 1.5 on SL-C860 起動できた!

ようやく、SL-C860でオープンソース版Android 1.5が動きましたとさ。
これもひとえに先人の方々が有用な情報を提供してくださっていたからです。ありがとうございます。まとめ直してから、参考にした方々のリンクとかトラックバックとかさせていただきましょう。
Android860
状況としては、以下のような感じ。


  • KernelはAngstrom stableブランチ 2.6.24 2007.12-r19相当
  • Kernelパッチは、Android SDK 1.0-r1から作成。androidドライバ、ashmemドライバとか必要そうなものだけ抽出。
  • w100fb.cのダブルバッファパッチは適用済み。
  • corgi_ts.cへのパッチも適用済み、のはずなのだけれど、タッチスクリーンは動かず。画面にさわるとフォーカスがどっかに行ってしまうので、入力だけはしている気がするけれど?
  • オープンソース版Androidはmasterブランチ(本線)。タグは意識していないけど、1.5になっている模様。
  • ランドスケープ固定パッチ適用済み。Global Timeのフレームレートは5.5fpsぐらい。
  • 一部のキーが認識しない。具体的には、カーソルキーと中央のCancel。Keycode Checkerを入れてもキーがあがってきていない。とりあえず、動作確認のため、HJKLにvi風カーソルを割り当ててみた。
  • ユーザーランドは、128MBのext2ファイルシステムのイメージを作って、それをループバックでマウント。中身は、エミュレータから/data と /system をとってきたもの。
  • chrootしたためか、Read-Onlyになってしまう。そのため、ブラウザが起動できない。コンソールからmount -o remount,rw rootfs / とすると、ブラウザが起動できる。

タッチスクリーンが正しく動作しないので、今のところはあまり関係ないけれど、ソフトキーボードがエラーを起こしまくります。
Keyboarderror
これはエミュレーターでもよく起こるので、実機の問題というわけでもないのかな?

ashmemドライバをKernel 2.6.23に導入

Android SDK 0.9以降を動作させるには、binderドライバだけでは不十分のようで、 Android / Anonymous Shared Memory Subsystem (ashmem)が必要なようだ。
Android SDK 0.9はKernel 2.6.25ではあるが、このうち、ashmemに関連するところだけをKernel 2.6.23にバックポートしてみた。(バックポートと言えばかっこよく聞こえるが、たいした作業ではなかった。)
ashmemを有効にしたカーネルを使って、Android SDK 0.9のユーザーランドを起動したところ、これまでのようにSEGVでは落ちなくなったのだが、すぐにbinderが「unknown command」というエラーを返した。ソースコードを見てみると、binderのコマンドがenumで定義されているのだが、定義が大きく変わっていた。
ということで、ashmemをバックポーとしただけでは駄目でしたとさ。がっくし。

Kernel 2.6.23用パッチ

elinux.orgのAndroid on OMAPを参考にして、Andorid SDK m5-rc14が動作するのに必要な最低限のKernel 2.6.23用のパッチを作成。
作成したパッチは、こちら
これをAngstromのbitbake環境に適用して、console-imageを作成して、動作を確認した。
DHCPも問題なく動作するようになった。
原因は、カーネルへのパッチが問題ではなくて、bitbakeしたイメージに2.6.23と2.6.24のファイルが混在してしまったため。一度、作成されたファイルを全部消して作り直した。そしたら、JFFS2のエラーも出なくなった。めでたしめでたし。

Android SDK m5-rc15もSL-C860で動いた

m5-rc14 に続いて、 m5-rc15も動作を確認。
まあ、カーネルは変わっていないようだから、動いて当たり前なんだろうけど。
Android SDK 1.0はSegmentation Faultが出て動かなかった。
まずは、Kernel 2.6.23のパッチを修正して、m5-rc15が安定してから次に進むことにしよう。

ようやく Angstrom m5-rc14 の起動に成功

SL-C860でようやく Android SDK m5-rc14 が動いた!
配布されているAngstrom console-imageではやはり駄目のようで、カーネルを作り直してandroid用ドライバを組み込んでやる必要があった。
m5-rc14 の公開されているカーネルソースと、すっぴんのKernel 2.6.23との差分をとってパッチを作成。それをAngstrom開発環境のKernel 2.6.23をビルドする環境に適用。さらに、w100のダブルバッファとcorgi_ts.cのパッチを加えて、make linux-rp でzImageをビルド。
このzImageを配布されているconsole-imageのinstall kitに含まれるzImage.binと置き換えて、SL-C860のROMを焼き変えた。
Androidが起動して、タッチパネルも動くので、問題はなさそう。
ただ、電源周りがややおかしいのと、DHCPが正しく動作しなくなった。
電源はサスペンドできない(常時電源オン)というだけなので、実運用にしなければとりあえずは問題なし。
DHCPの方は、/etc/network/interfaces に eth0のIPアドレスを固定にしてしまえば、とりあえず問題はなかった。
Android 1.0はこのカーネルでそのまま行けるかな?

自ビルドカーネル2.6.23でandroid起動

Angstrom環境で自ビルドしたカーネルでは、どうもルートファイルシステムのできが悪い気がする。
そこで、ルートファイルシステムはAngstrom配布ページのものを使って、カーネルだけ、workの下にできたzImageを焼くことにした。
これで焼いてみたところ、uname でカーネル情報を取得すると、ビルド日付が更新されていた。
この状態で、Androidのイメージを起動してみると、ちゃんと起動した。果たして、ダブルバッファのパッチの効果が出ているのかはわからないが。API Demoの中の3D Cubeを試してみたけれど、スムーズに回っているなあ、という印象。オリジナルを忘れたからわからないけど、ダブルバッファになったって描画スピードが速くなるわけではないわね。
さて、次はAndroid 1.0へバイナリの入れ替えをしよう。

openembedded.org に接続できない

Angstromの旧式の開発環境をmonotoneを使って構築しようとしているのだけれど、openembedded.orgに接続できず。昨日はつながったのに、なぜ?
pingやtracerouteでは到達できるのに、80番ポートも開いているようなのに、HTTPリクエストへの応答がない。明日以降、またトライかな。
なお、Internet ArchiveでAngstromのビルドページの過去のページを見てみたら、確かに、monotoneを使うように書いてあった。今のページでは、gitになってるけど。
http://web.archive.org/web/20071230102827/http://www.angstrom-distribution.org/building-angstrom

2007.12-r19では駄目なのか

Angstromの開発環境について、公式ページに書いてあるとおりに構築して、ビルドを行うと、できあがったイメージのバージョンは、2007.12-r19というものになる様子。
ところが、このバージョンは、c7x0向けには公式リリースされていない。2007.12-r13が公式リリースされている最新バージョン。ということで、r19は動くかどうかわからん。
2007.12のディストリビューションを作りたいんだけどなあ。
公式ページに書いてあるのとは違って、OpenZaurusで採用されていた、monotoneを使って管理されている開発環境の方を使うのかな?