Kernel 2.6.26用Androidパッチ

なんとか、PokyのSnapshotをビルドするところまでこぎ着けれた。
Ubuntu 8.04のVMでは導入するものが多いなあ。flexが入ってなかったためにやり直しのハメになったさ。
できあがったPokyをSL-C860に焼いてみたところ、とりあえず、Kernelは2.6.26になっている。よしよし。ただ、poky-image-baseではスプラッシュ画面が出たままで起動せず。poly-image-satoを作ったら起動した。
しかし、キーマップがおかしいようで、「:」とか入力できないんで、/etc/inittabを書き換えることもできず。えー。sshでログインすればいいのか?
まあとりあえず、Kernel 2.6.26がSL-C860で動くようになったので、android用のパッチでも当てるか、と、Kernel 2.6.24用に作ったものを適用したら、binderのところでコンパイルエラーが出た。何か違うところがあるのかな?ポーとするのも面倒そうだなあ〜
と、思って、ググってみると、意外に簡単にKernel 2.6.26用のAndroidパッチを見つけた。ラッキー。
Armadillo 500FX用のパッチ
これで労せずしてパッチが当てれるわ!わっはっは!
と期待したのだけれど、そのままではパッチエラーが出るし、ビルドエラーも出るし、で駄目みたい。それでも、まだ楽になったと思う。

Seagate ショック!

SeagateのHDDを購入したのが18日で、19日にSeagateのHDDに不具合が!というニュースが!
やっちまったなぁ!
http://pc.watch.impress.co.jp/docs/2009/0119/seagate.htm
よく見たら、3.5インチ製品で、2.5インチは大丈夫みたい。助かった!
換装したMacBookは調子よく動いております。ほほほ。
VM用のスペースも贅沢にあるので、AngstromやAndroidのビルドもなんのその。

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

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すると、何か出ているので、ドライバ自身は有効なんだと思うんだけど。

Windows 7 ベータをBootCampで試す

HDDを500GBに増やしたときに、Leopardの環境は移行できたものの、Windowsパーティションはコピーできないので、新しくインストールしなくてはならない。
HDDを買ったのにあわせて、Windows XP Home SP3も購入したのだけれど、せっかくなので、Windows 7 ベータ版を導入してみた。
インストールそのものはBootCampアシスタントに従うだけで簡単に終了。
ドライバ類はインストールディスクのsetup.exeが2229エラーを起こして設定できないため、個別にインストールする必要があった。とりあえず、キーボードとタッチパッドのドライバを入れておいた。
8月までは使えるみたいなので、とりあえず、Windows XP Homeの代わりにWindows 7で行こうかと。

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でもこの方法で作成しました。
とりあえず、このぐらいだったかな?
安藤恐竜さんから修正のヒントをいただいたので、もう少しトライしてみよう。

MacBook用に500GB HDDを購入

嫁さんと千葉駅周辺まででかけたので、ドスパラをのぞいたら、2.5インチ 500GBのHDDがずいぶんと安くなりましたねえ。Samsungのが最安値だと思ってたら、Seageteも同じ8980円になっていたので、買ってしまいましたよ。
帰ってきてからAKIBA PC Hotline!の価格調査(2009/1/15)を見たら、9950円が最安値とゆうことになっていたけれど。
製品5年保証ということで、製造年月日から5年間の保証があるのだけれど、Seagateのホームページに「保証チェッカー」とゆうのがあって、そこで調べてみると、2013年12月26日までだった。まだ生産されてから1ヶ月も経ってないや。
さて、簡単にリプレイスできるかな?

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のエラーも出なくなった。めでたしめでたし。