MINI2440へのandroidポーティングへの道 ― 2009年08月20日 15時53分58秒
今いじっているMINI2440はandroidポーティングを目指していますが、そんなに簡単なことじゃないということを整理して、作業項目を洗い出しましょう。
そもそもAndroidと標準のLinuxの違い
ソースとってきて差分とってパッチ当ててビルドしたら終わり、なんて簡単なことじゃないです。 きちんと意味を理解しておかないとそれぞれの修正もできない。
そもそも標準のLinuxとの違いが整理された資料を見つけられない。googleのどっかにおいてあるとは思うのですが、まだそこまで見つけられていません。
CE Linux ForumのTOMOYO Linuxのセミナー資料がちょっと分かりやすい。
上記資料の抜粋を含めて整理すると以下のようなことか。
- 標準のLinuxのユーティリティの削減(toolbox)
- glibcは使えない(Bionicを使う)
- IPCが標準と違う(Binder)
- ネイティブなwindowシステムがない
- パワーマネージメントシステムを最適化
- Low memory killer, Alarm, Kernel Debugger, etc.
- zygoteとDalvikVM
- SDK用の標準エミュレータ用にgoldfishという仮想のARMマシンとして構築されている
- H/Wに依存するデバイスドライバの類とかDalvikVMの接続のあたりが不明
ポーティングプラン
- MINI2440のNAND FLASHにカーネルイメージを置くにはサイズが足りないので、とにかく外部デバイスでブートできるようにならなければならない
- MINI2440はARMなので基本的にはgoldfishのバイナリが使えるはず
- なので、toolboxはgoldfishのものがそのまま使えるはず
- Bionicはgoldfishのものがそのまま使えるはず
- カーネルはandroidのものをベースに考えるか標準のMINI2440のものをベースに考えるかで作業が異なる
- いろいろと標準のコンソールを使いたいので標準環境MINI2440に拡張していく形を検討
- 仮想バッテリドライバの開発?構築?でMINI2440対応
- 各種デバイスドライバの対応
なお、JTAG ICEは必要になってくると思うのでそちらの環境整備も検討。
外部デバイスからのブート
実はこいつではまってます。 全く標準のカーネルイメージをmkimageでu-boot用のイメージに変換して、SDメモリカードのFATにコピーしてブートを試みるも、起動しない。 このカーネルはもちろんNAND Flashからは起動するもの。
外部デバイスからのブートについては以下の方法があります。
- SDメモリカードのFAT領域からのブート(u-boot1.3.x以降?必要)
- USBメモリからのブート(u-boot1.3.x以降?必要)
- TFTPまたはNFSルートからのブート(viviで対応可能)
カーネルそのものには問題ないと考えてu-bootの方を試行錯誤している最中。
今後の予定
ということで、android云々前にブートについて整理と試行錯誤が必要で、これにけりがついたらandroidのソースをいじり始めることになると思います。その前にブート手順の中身の理解やファイル構成などの把握も必要。
SDメモリーカードからのブートが無理そうならUSBブートを試して最終的にはNFS対応で当面逃げる。でも、最終的には戻ってこないといけませんね。
・・・と思ったらMINI2440用の最新カーネル2.6.31をビルドしてSDメモリーカードに書いたらあっさり起動しましたね。これについては別途書きますが、何でカーネルに依存して起動しなかったのかの理屈がわかりませんね。
ルートファイルシステムの中身は2.6.29の時のオリジナルのまま展開したものでOKでした。
コメント
トラックバック
このエントリのトラックバックURL: http://kumikomi.asablo.jp/blog/2009/08/20/4526498/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。