Armadillo-500 FX用Eclair開発環境構築
概略
Armadillo-500 FX上で動作するAndroidのビルド環境構築について記載する。
記載、および、動作確認には、eclairバージョンを対象としている。
バージョンによっては、不要な手順もある。
memo
memo
忘れないうちに記録。
ビルドエラーが起こる
STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a)
make: execvp: /bin/bash: Argument list too long な問題
"cd external/webkit ; git cherry-pick 18342a41ab72e2c21931afaaab6f1b9bdbedb9fa"
memo2
以下、元ページのコピー
目次
Armadillo-500 FXについて
Armadillo-500fxは、組込み向けの開発キットになる。
言い方を変えると、「高いおもちゃ」ということ。
仕様等の詳細は、公式となる
Atmark Technoの紹介ページを見てください。
環境構築目標
Armadillo-500fx用の環境を作る上での目標をまとめておく。
テーマは、「手軽に、かっこよく」ってことで。
以下に、具体的な目的をまとめておく。
- コマンドひとつで、カーネル+ユーザ層がビルドできるようにする
- eeepc701用のビルドで採用されているように、vendor配下を作ってみる
- 生成物を焼きやすい形にまとめるようにする
- いろいろ手順が簡単になるようにする
ファイル取得
環境を作成する上で元となるソースの取得方法について記載する。
取得するソースは、2種類に分かれる。
- AndroidのLinuxカーネル部分以外のソース
- Linuxカーネル部分のソース
Androidのカーネル部分以外のソース
いわゆる、Androidのソースと言われる部分。
いつからか、カーネルが同時に取得できなくなったので、カーネル以外と記載している。
(Armadillo-500fxでは、カーネルも構築する必要があるためである。)
- Android開発環境構築の手順の中で、ソース取得準備まで実施する
- ソース取得方法(repo)にあるように、repoコマンドでソースを取得する
- ビルドできるバージョンを使うため、”repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake"等バージョン指定を実施する
- その後、"repo sync "を実施する
Linuxカーネル部分のソース
Linuxカーネルの部分を取得する。
この部分が主にハードウェア用のカスタマイズが必要な部分となる。
また、GPLライセンスに縛られているため、どこかで取得できる。
今回は、Armadillo-500fxが対象となるので、公式から取得する。
- ブラウザ等で、Armadillo-500 FXダウンロードを開く
- Linuxカーネルを取得(確認当時、v2.6.26-at6 でした)
ファイル配置
ダウンロードしたソースの配置について記載する。
以降の説明用には、この節で記載したフォルダ構成で記載する。
- ”repo init”、"repo sync"を実行したフォルダを「cupcake」とする
- 「cupcake」配下に、「bionic」、「framework」等のフォルダがあることになる
- ダウンロードしたカーネルファイルを展開する
- 展開すると、「linux-2.6.26-at6」というフォルダができる
- 展開したフォルダの名称を「kernel」と変更する
- 「kernel」配下に、「drivers」等のフォルダがあることになる
- 「cupcake」フォルダの中に、「kernel」フォルダを移動する
- 「cupcake/framework/base」、「cupcake/kernel/drivers/usb」等の階層となる
- 注意事項
- 階層の説明はわかりづらいかも・・。できたら、絵を追加したい。
- 取得バージョンによっては、例で示すフォルダが存在しない場合がある。
カーネル修正
ダウンロードしたカーネルファイルには、Android用の修正が適用されていない状態である。
その為、Android用の修正を実施するために、修正パッチの適用を実施する。
- Android用パッチを取得する
- ブラウザ等で、公式ファイルブラウザ内のandroid directoryを開く
- 「linux-2.6.26-at-android-tmp-081210.patch」をダウンロードする
- カーネルにパッチを適用する
- カーネルフォルダ(cupcake/kernel)内に、ダウンロードしたpatchを移動する
- 端末で、カーネルフォルダ(cupcake/kernel)内に移動する
- 端末で、「patch -p1 < linux-2.6.26-at-android-tmp-081210.patch」を実施し、パッチを適用する
- ATDEを使用しない為、Makefileを一部修正する
- 「cupcake/kernel/arch/arm/plat-mxc/sdma/Makefile」をテキストエディタで開く
- 「KBUILD_CFLAGS := -I$(KBUILD_SRC)/arch/arm/plat-mxc/sdma/iapi/include \」の行を修正する
- 注意事項
- patchの使い方は、うる覚え。試した人は結果ください(汗)
- Makefileの修正については、以下を参照ください。
ユーザ空間修正
Armadillo-500fxでのcupcake版ビルドで、ユーザ空間で必要な修正について記載する。
カーネル、Androidバージョンの組合せに依存して発生する。
他の組合せだと不要かもしれない。
- Armadillo-500fxで動かす場合のcupcake版での問題点
- 起動時、バッテリ状態が取得できない為、ローバッテリだと判断して、電源OFFしてしまう
- 対策方法(例:実際できないかも・・)
- 電源管理アプリでダミー値で処理する
- framework層(java層)でダミー値を返す
- JNI層(Linuxアプリ層)でダミー値を返す
- カーネル層でダミー値を返す
framework層とJNI層は、ほぼ同等で、java好きか、C++好きかになる。
ここでは、JNI層での修正方法を示す。
- 対象となるファイルをテキストエディタで開く
- ”cupcake/frameworks/base/services/jni/com_android_server_BatteryService.cpp”
- バッテリ状態を返す関数の復帰値を変更する
- getBatteryStatus()
- ”gConstants.statusUnknown”を常に返すように変更
- getBatteryHealth()
- ”gConstants.healthUnknown”を常に返すように変更
- readFromFile()
- bufに文字列”Unknown”(NULL終端付)を入れて、sizeを復帰値とした
- (bufの領域は、自分できちんと確認してね・・壊れてるかも)
- setBooleanField()
- 関数readFromFile()をコールし、結果で判断するif処理を削除
- 変数valueを常にtrueに変更
- (要するに、readFromFile()のコールを削除して、value固定化)
- setIntField()
- 関数readFromFile()をコールし、結果で判断するif処理を削除
- 変数valueを常に1に変更
- (要するに、readFromFile()のコールを削除して、value固定化)
最終更新:2010年02月11日 01:44