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"

上記の修正内容は、git参照


memo2



以下、元ページのコピー

目次



Armadillo-500 FXについて

Armadillo-500fxは、組込み向けの開発キットになる。
言い方を変えると、「高いおもちゃ」ということ。
仕様等の詳細は、公式となるAtmark Technoの紹介ページを見てください。


環境構築目標

Armadillo-500fx用の環境を作る上での目標をまとめておく。
テーマは、「手軽に、かっこよく」ってことで。
以下に、具体的な目的をまとめておく。
  • コマンドひとつで、カーネル+ユーザ層がビルドできるようにする
  • eeepc701用のビルドで採用されているように、vendor配下を作ってみる
  • 生成物を焼きやすい形にまとめるようにする
  • いろいろ手順が簡単になるようにする


ファイル取得

環境を作成する上で元となるソースの取得方法について記載する。
取得するソースは、2種類に分かれる。
  • AndroidのLinuxカーネル部分以外のソース
  • Linuxカーネル部分のソース

Androidのカーネル部分以外のソース

いわゆる、Androidのソースと言われる部分。
いつからか、カーネルが同時に取得できなくなったので、カーネル以外と記載している。
(Armadillo-500fxでは、カーネルも構築する必要があるためである。)
  1. Android開発環境構築の手順の中で、ソース取得準備まで実施する
  2. ソース取得方法(repo)にあるように、repoコマンドでソースを取得する
    • ビルドできるバージョンを使うため、”repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake"等バージョン指定を実施する
    • その後、"repo sync "を実施する

Linuxカーネル部分のソース

Linuxカーネルの部分を取得する。
この部分が主にハードウェア用のカスタマイズが必要な部分となる。
また、GPLライセンスに縛られているため、どこかで取得できる。
今回は、Armadillo-500fxが対象となるので、公式から取得する。
  1. ブラウザ等で、Armadillo-500 FXダウンロードを開く
  2. Linuxカーネルを取得(確認当時、v2.6.26-at6 でした)


ファイル配置

ダウンロードしたソースの配置について記載する。
以降の説明用には、この節で記載したフォルダ構成で記載する。

  1. ”repo init”、"repo sync"を実行したフォルダを「cupcake」とする
    • 「cupcake」配下に、「bionic」、「framework」等のフォルダがあることになる
  2. ダウンロードしたカーネルファイルを展開する
    • 展開すると、「linux-2.6.26-at6」というフォルダができる
  3. 展開したフォルダの名称を「kernel」と変更する
    • 「kernel」配下に、「drivers」等のフォルダがあることになる
  4. 「cupcake」フォルダの中に、「kernel」フォルダを移動する
    • 「cupcake/framework/base」、「cupcake/kernel/drivers/usb」等の階層となる

  • 注意事項
    • 階層の説明はわかりづらいかも・・。できたら、絵を追加したい。
    • 取得バージョンによっては、例で示すフォルダが存在しない場合がある。


カーネル修正

ダウンロードしたカーネルファイルには、Android用の修正が適用されていない状態である。
その為、Android用の修正を実施するために、修正パッチの適用を実施する。
  1. Android用パッチを取得する
    1. ブラウザ等で、公式ファイルブラウザ内のandroid directoryを開く
    2. 「linux-2.6.26-at-android-tmp-081210.patch」をダウンロードする
  2. カーネルにパッチを適用する
    1. カーネルフォルダ(cupcake/kernel)内に、ダウンロードしたpatchを移動する
    2. 端末で、カーネルフォルダ(cupcake/kernel)内に移動する
    3. 端末で、「patch -p1 < linux-2.6.26-at-android-tmp-081210.patch」を実施し、パッチを適用する
  3. ATDEを使用しない為、Makefileを一部修正する
    1. 「cupcake/kernel/arch/arm/plat-mxc/sdma/Makefile」をテキストエディタで開く
    2. 「KBUILD_CFLAGS := -I$(KBUILD_SRC)/arch/arm/plat-mxc/sdma/iapi/include \」の行を修正する
      • 「:=」の部分を「+=」に変更する



ユーザ空間修正

Armadillo-500fxでのcupcake版ビルドで、ユーザ空間で必要な修正について記載する。
カーネル、Androidバージョンの組合せに依存して発生する。
他の組合せだと不要かもしれない。
  • Armadillo-500fxで動かす場合のcupcake版での問題点
    • 起動時、バッテリ状態が取得できない為、ローバッテリだと判断して、電源OFFしてしまう
  • 対策方法(例:実際できないかも・・)
    1. 電源管理アプリでダミー値で処理する
    2. framework層(java層)でダミー値を返す
    3. JNI層(Linuxアプリ層)でダミー値を返す
    4. カーネル層でダミー値を返す

framework層とJNI層は、ほぼ同等で、java好きか、C++好きかになる。
ここでは、JNI層での修正方法を示す。

  1. 対象となるファイルをテキストエディタで開く
    • ”cupcake/frameworks/base/services/jni/com_android_server_BatteryService.cpp”
  2. バッテリ状態を返す関数の復帰値を変更する
    1. getBatteryStatus()
      • ”gConstants.statusUnknown”を常に返すように変更
    2. getBatteryHealth()
      • ”gConstants.healthUnknown”を常に返すように変更
    3. readFromFile()
      • bufに文字列”Unknown”(NULL終端付)を入れて、sizeを復帰値とした
      • (bufの領域は、自分できちんと確認してね・・壊れてるかも)
    4. setBooleanField()
      • 関数readFromFile()をコールし、結果で判断するif処理を削除
      • 変数valueを常にtrueに変更
      • (要するに、readFromFile()のコールを削除して、value固定化)
    5. setIntField()
      • 関数readFromFile()をコールし、結果で判断するif処理を削除
      • 変数valueを常に1に変更
      • (要するに、readFromFile()のコールを削除して、value固定化)

最終更新:2010年02月11日 01:44