Kernelのバージョンとできてることのまとめ

一応、SL-C860で以下の使い方ができるのが目標、だということを再確認しておく。


  • D01NXが使える
  • MacBookをUSBケーブルでつなげば、ルーターになる(usbnetが有効)
  • 単体でもブラウザが使える(Androidが単体動作する)

で、現在できているところまでの、KernelのバージョンとAndroidとかその他のデバイス周りの星取り表。




































バージョン Android Android Power Wi-Fi usbnet D01NX AndroidでPPP
2.6.23 m5-rc15 OK OK OK OK N/A
2.6.24 1.5 NG OK NG NG NG
2.6.26 1.5 OK OK OK NG NG

現状、Kernel 2.6.23がベター。
ホントはブラウザだけなら、AngstromのGPEとWebKitと日本語化でもいいんでは、とも思うことがあったり。

Android SDK m5-rc15とD01NX

Android SDK m5-rc15では、rilがアクセスするシリアルデバイス名をKernelのコマンドラインに、android.ril=ttyACM0 と追加する必要がある。ttyACM0はD01NXを取り付けた時にできるttyデバイス。
Androidを起動しても、残念ながら、アンテナマークに変化なし。
Fn+←でコンソールに降りて、dumpstate でデバイスの状態をダンプして、RADIO LOGの項目を見てみると、確かに、D01NXとATコマンドでやりとりできているらしい。だけども、ATコマンドのいくつかはエラーが出るし、Exceptionも発生してる。一応、電波強度をとっている形跡もあるんだけどなあ。
とりあえず、AndroidとD01NXがなんらかの通信ができそうだ、という希望がもてたので、次に進もう。

D01NXをSL-C860 + Kernel 2.6.23で認識

半日ほどかけて、Angstrom stableブランチを最初から落とし直して、Kernel 2.6.23にしてビルド。まずはAndroidのパッチは当てずに、console-imageを作成し、kernel-module-usbcoreとkernel-module-cdc-acmのモジュールipkを作成(といっても、勝手に生成される)し、さらにuucp(cuコマンドを使うため)をビルドした。
console-imageをSL-C860に焼いて、モジュール2つとcuをipkgでインストール。さらに、vmb_csとvmb_hcdをコピーして、depmodを行った。このあと、D01NXをCFスロットに差し込むと、あら不思議、/dev/ttyACM0 ができますよ!
cuコマンドを使って、ttyACM0とATコマンドのテストを行って、ちゃんとつながっていることを確認。やったー!
Androidが使うというATコマンドをかたっぱしから入れていったら、ERRORを返したのは、以下のコマンドだけ。

AT+CMUT
AT+CIMI
AT+CNM

ところで、よくよく見たら、ネットインデックスのATコマンドリストには3GPPのほとんど載ってないじゃん。確かに、ほとんどはoptionalだけども。
さて、次は、m5-rc15と接続できるか試してみようかな。
それとも、vmbドライバを自分でbitbakeして問題がないかのテストをしようか。

古いAngstrom用のipkgがすでにない

こちらを参考に、Kernel 2.6.23版のc7x0用Angstromをダウンロードしてきて、さあ、D01NXを動かすぞ、と思ったのだけれど、Feedからすでに2.6.23用のipkgは削除されているようで、kernel-module-cdc-acm がインストールできない。がーん。
stableブランチをチェックアウトして、環境構築からやり直しかな。とほほ。

VMB5000のKernel 2.6.26へのポート、まずは失敗

ビルドができたので、SL-C860にインストール。bitbake環境で作ると、カーネルモジュールがipkgになるのね。
vmb_hcdとvmb_csとusbcoreをインストールして、さらに、cdc-acmを入れてD01NXを挿してみる。
すると、カーネルエラーがどばっと出ましたよ(泣)

Unable to handle kernel NULL pointer dereference at virtual address 00000040

と出ていて、プログラムカウンタはvmb_en_queue_eventを指している。
アドレスはわかるんだけど、コードにどうやって到達したらいいのか。
その前に、Kernel 2.6.23でどう動くのかテストしてみるかね。

D01NXを動かそう

Androidも少し使えるようになってきたので、D01NXをそろそろ動かそうかと。
というより、D01NXの方がメインじゃなかったっけ?
D01NXはAngstrom環境で動作するらしいのだけれど、今、Android 1.5を動かしている手元の環境は、Kernel 2.6.26。Kernel 2.6.23だと、Android SDK m5-rc15までしか動かない。これではちょっとねえ、ということで、2.6.26用でビルドできるように挑戦中。
ところで、AndroidのATコマンドと、D01NXのATコマンドを見比べてみると、基本は同じっぽい。ということは、ドライバさえできれば、Androidからダイアルアップできるのでは?

楽天スーパーポイント失効

気づくと、楽天のポイントが失効していた。2000ポイント強が失効。
えー、期限あったんだ!たいてい年に一度ぐらいは楽天で買い物していたので、気づかなかったんだろうけど、最終購入月から1年で失効するらしい。
期間限定ポイントだといつも有効期限のお知らせメールが月末に来るはずなのに、通常ポイントはこなかったのか?見落としたか?迷惑メール扱いされたか?先月末のポイント明細にも何も書いてなかったと思うけど。
まあ、意識してためたポイントではないのだけれど、それでも、このご時世、2000円分相当は悔しいなあ。こんなことなら使っておくべきだったわ。
ジョージアのキャンペーンで500ポイント当たったので、期間限定でそれだけ残ってた。

やはり電源管理ができない

Angstrom devブランチでもAndroid用のパッチができたのだけれど、やはり、CONFIG_ANDROID_POWERを有効にすると、電源ボタンでのサスペンドができなくなってしまう。うーん。これがないとキーが効かなくなるからなあ。
電源オフ時のdmesgを見てみると、

Freezing user space processes …
Freezing of user space aborted

ということで、user spaceのプロセスを止めようとしているのだけれど、失敗していて、サスペンドに入れないような気がする。
Androidに電源管理をさせないといけないってことかな?

Angstrom devブランチを試してみた

AndroidをSL-C860で使おうと思うと、Kernel 2.6.26の方が良さそうなのだけど、Pokyだとなんか動きがおかしいし、かといって、AngstormのKernel 2.6.24ではAndroid用電源管理が使えないから、キーやタッチスクリーンがまともに動かないし。どっちがいいのやら?
一方で、Angstromのdevブランチでは、c7x0向けもKernel 2.6.26になっている模様。なんとなくだけど、Angstromの方がPokyよりもザウルスに優しい気がするので、これを試してみることにした。
devブランチの入手方法などはどこにも書いてないのだけど、Angstromのビルド案内に書いてあるstableをdevに置き換えれば、とりあえずリポジトリは取得できた。
bitbakeしようとしたら、1.8.10じゃだめで、1.8.12にしろと怒られるので、Ubuntu用のをapt-getでアンインストールして、bitbakeを取得し直し。
気を取り直してbitbake base-imageをすると、rootfsの作成でエラーが出て停止。
どうやら、zaurus-updaterがビルドされていないようで、先に、bitbake zaurus-updaterでビルドしておいた。
その後、もう一度bitbakeするとinstall kitができあがった。
焼いてみると、これまでと変わって、ブートメニューが出てくる。どうやらこれ、kexecbootというものらしく、rootfsとかを切り替えれるようになっているらしい。/dev/mtdblock2 と /dev/mmcblk0p1 が見えていて、前者は内蔵NAND、後者はSDカードということ。これで、SDカードにrootfsを入れれば起動できるってことですな。じゃあ、Androidらしい構造にしておけば、chrootなしでAndroidが起動できちゃう?
まあ、SDカードブートの前に、まずはカーネルにAndroidパッチを当てなくちゃ。

すべての原因は電源管理にあった

Pokyの2.6.26カーネルでCONFIG_ANDROID_POWERを有効にして再ビルドに挑戦!
以前の段階でも限界ぎりぎりだったカーネルサイズはやっぱりオーバーで失敗。
他に切れるところはないか?と探したら、CONFIG_LOGOがあったので、迷わず削除。これでなんとか収まりましたとさ。結構、ロゴってでかいんだ。
できあがったカーネルでAndroidを起動して、時間設定をいじると、ちゃんと時間を設定できるようになってた。おお、すばらしい。これはalarmドライバのおかげのようですな。
そして、KeyInputQueueにパッチを当てて回避していたキーイベント問題も、電源周りじゃないか?と疑っていたのですが、ビンゴでした。
オープンソース版でないAndroid SDK 0.9も1.0も問題なくカーソルキーやタッチスクリーンが動きましたよ!
しかし、問題としては、電源ボタンでサスペンドできなくなってしまったこと。これ、Androidの起動前でもできなくなってるので、もともとPokyがいけなかったのか、パッチが原因なのかは不明。