今回はArmadillo-500へAndroidをポーティングする手順の詳細を解説します。
- 開発環境を整える
- クロスコンパイル環境を整える
- VMWarePlayerをダウンロードしてインストールします。
- アットマークテクノさんのArmadillo開発者サイトから、クロスコンパイル環境の入ったATDE (vmwareイメージ)をダウンロードします。
- ダウンロードしたzipファイルを解凍し、vmxファイルを開きます。※VMWarePlayerをインストールしていれば関連付けられているはずです。
- ここを参考にカーネルのコンパイルができるようにします。※Armadillo-9の部分はArmadillo-500に置き換えてください。
- クロスコンパイル環境を整える
- カーネルを2.6.23にする
- 上記で構築できるArmadillo-500のカーネルは2.6.18なので、そのままではAndroidは動きません。2.6.23のカーネルにする必要があります。http://www.kernel.org/pub/linux/などから2.6.23のソースを取得します。
- Armadillo-500の差分抽出の為、http://www.kernel.org/pub/linux/から2.6.18のソースも取得しておきます。
- linux-2.6.18、linux-2.6.18-at3(手順1-1-4でダウンロードしたもの)、linux-2.6.23の3種類環境ができるのでlinux-2.6.23へlinux-2.6.18とlinux-2.6.18-at3の差分をマージしていきます。※driver/mmc関連はディレクトリ構造やヘッダ構成がかなり変わっている為、手に負えない場合はマージしないで置いてもAndroidは動くので、Androidの起動を優先させるなら、マージをとばしてもよいでしょう。その他のコンパイルエラーが出た場合は気合で直します。
- 手順1-1-4で作成したlinux-2.6.xのシンボリックリンクを削除し*1、マージしたlinux-2.6.23にシンボリックリンクを張っておきます。*2
- make configで手順1-1-4と同じようにmake configします。この時、未設定のものに対していろいろ聞かれますが、とりあえずEnter押しっぱなしでデフォルト設定で抜けても大丈夫です。*3
- マージした環境をコンパイルし、バイナリを焼いてブートするか確認します。
- make menuconfigを実行してKenrnel FeaturesのEABIのコンパイルオプションを選んで、再度コンパイルします。他の設定を変更するとブートしなくなることがあるので、あまりいじらないほうがよいでしょう。*4
- バイナリを焼いてブートするか確認しておきます。
- Android差分のマージ
- BennoさんのAndroid.diffファイルを使用して上記のマージした環境に以下のようにしてパッチを当てます。※一部でrejファイルが出来るので、手動でマージします
- make menuconfigでlow memory killer*5とopen binder*6にチェックを入れておきます。
- コンパイルし、カーネルを焼いて動作するかどうか確認します。
これでAndroidを起動する為の下地が整いました。
もっと簡単な方法があるのですが、それは後日書きます。
次回はユーザーランドの構築方法について解説します。
*1:atmark-distのディレクトリで rm linux-2.6.x
*2:同じくatmark-distのディレクトリで ln -sv ../linux-2.6.23 linux-2.6.x
*3:こちらでマージした環境ではブート時にpccardまわりでNULLアクセスが発生してkernel panicになりました。make menuconfigの"General setup--->Choose SLAB allocator"でSLOBを選択することでpanicを回避することが出来るようです。
*4:原因は不明。EABIに対応できていないものがある模様。
*5:Device Drivers--->Misc devices--->Low Memory Killer ・・・なくても動きますが、パフォーマンスが恐ろしく低下します。
*6:Device Drivers--->Character devices--->OpenBinder IPC Driver
記載されている会社名、および商品名等は、各社の商標または登録商標です。
0 コメント:
コメントを投稿