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へバイナリの入れ替えをしよう。

Androidが起動しなくなった

Kernel 2.6.23ベースのAngstromにw100のダブルバッファパッチを当ててビルドして、焼けて起動するところまでは確認していたのだが、そこで、Androidを起動しようとしたら、赤玉がずっと動き続けるだけで、起動しなくなった。赤玉の動きがスムーズになっている感じで、ダブルバッファは効いているのかな?と思ったりするけど。
カーネル起動メッセージを見ると、どうも、JFFS2でエラーが出ている様子。イメージに問題があるのか、それとも、pdaXromを一度焼いたのが失敗だったか?

Android on SL-C860

久しぶりに、SL-C860をいじくってみた。
2.4.20カーネルをSL-C860で動かないかと思っているんだけど、boxer-j.confだけでは駄目なのかしら?arch/arm/boot を比較しても、同じようになっていると思うんだけどなあ。違うのは、”SHARP Shepherd”と”SHARP Boxer”のマシン名ぐらい?
しかし、NetFrontではもはや最近のWebはみれないので、やっぱり、Androidにしたいなあ、と思う今日この頃。
ということで、今更、SL-C860でAndroidを体験してみた。
SDカードで起動するイメージがあるそうなので、下記からいただきまして。
http://androidzaurus.seesaa.net/article/80104396.html
カーネルの方は、2.6.23でないといけないそうなので、SL-C860用には、Angstromの古いヤツをもらってくる。(最新版は2.6.24だった)
http://www.angstrom-distribution.org/releases/2007.12/images/c7x0/old/Angstrom-console-image-glibc-ipk-2007.12-c7x0-installkit.tgz
カーネルを書き換えて、SDカード(FAT16でフォーマットしてある256MB 2MB/s。MI-E25DCと同時期に買ったヤツだったかな?)にAndroidのイメージを展開して、起動する。
途中、コンソールが出てきて、コマンド入力ができてしまったので、あら、起動に失敗か?と思ったら、しばらくしてから起動画面(いわゆる赤玉)が出てきて、Andoridのホーム画面になった。と、同時に「Contactが応答してません」とゆうような趣旨のエラーが出た。swapを作ると回避できるかな?
このイメージが公開されたのが今年の1月だったので、これで1年遅れとゆうところかな。
OpenSource版Androidのビルドには成功したので、イメージの中を置き換えれば使えるのかな。
まず、その前に、このカーネルで、手元のD-Link DCF-650W(SL-5000用にアメリカで買ったヤツ)を使えるようにしないと。WEPの設定が出来無い、とかゆって落ちてる感じがする。