Armadillo-500 FX用開発環境構築
概略
Armadillo-500 FX上で動作するAndroidのビルド環境構築について記載する。
記載、および、動作確認には、cupcakeバージョンを対象としている。
バージョンによっては、不要な手順もある。
記載、および、動作確認には、cupcakeバージョンを対象としている。
バージョンによっては、不要な手順もある。
目次
- Armadillo-500 FXについて
- 環境構築目標
- ファイル取得
- ファイル配置
- カーネル修正
- ユーザ空間修正
- 追加ファイル
- パス設定
- ビルド方法
- ビルドスクリプト
- ビルド生成物
- 未解決問題
- 検証中
Armadillo-500 FXについて
環境構築目標
Armadillo-500fx用の環境を作る上での目標をまとめておく。
テーマは、「手軽に、かっこよく」ってことで。
以下に、具体的な目的をまとめておく。
テーマは、「手軽に、かっこよく」ってことで。
以下に、具体的な目的をまとめておく。
- コマンドひとつで、カーネル+ユーザ層がビルドできるようにする
- eeepc701用のビルドで採用されているように、vendor配下を作ってみる
- 生成物を焼きやすい形にまとめるようにする
- いろいろ手順が簡単になるようにする
ファイル取得
環境を作成する上で元となるソースの取得方法について記載する。
取得するソースは、2種類に分かれる。
取得するソースは、2種類に分かれる。
- AndroidのLinuxカーネル部分以外のソース
- Linuxカーネル部分のソース
Androidのカーネル部分以外のソース
いわゆる、Androidのソースと言われる部分。
いつからか、カーネルが同時に取得できなくなったので、カーネル以外と記載している。
(Armadillo-500fxでは、カーネルも構築する必要があるためである。)
いつからか、カーネルが同時に取得できなくなったので、カーネル以外と記載している。
(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が対象となるので、公式から取得する。
この部分が主にハードウェア用のカスタマイズが必要な部分となる。
また、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用パッチを取得する
- ブラウザ等で、公式ファイルブラウザ内の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バージョンの組合せに依存して発生する。
他の組合せだと不要かもしれない。
カーネル、Androidバージョンの組合せに依存して発生する。
他の組合せだと不要かもしれない。
- Armadillo-500fxで動かす場合のcupcake版での問題点
- 起動時、バッテリ状態が取得できない為、ローバッテリだと判断して、電源OFFしてしまう
- 対策方法(例:実際できないかも・・)
- 電源管理アプリでダミー値で処理する
- framework層(java層)でダミー値を返す
- JNI層(Linuxアプリ層)でダミー値を返す
- カーネル層でダミー値を返す
framework層とJNI層は、ほぼ同等で、java好きか、C++好きかになる。
ここでは、JNI層での修正方法を示す。
ここでは、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固定化)
- getBatteryStatus()
- 注意事項
- 上記修正は、重複もありそうだけど、良しとした。
- JNI層での修正に関しては、EeePc porting - Instructions for last codebaseを参考にして実施。
- framework層での修正は、Android 1.5 on Zaurusに修正差分がある。(試してないけど・・)
追加ファイル
ビルド時に、”TARGET_PRODUCT=armadillo500fx_dev”等と指定する為、vendor配下に追加するファイルについて記載する。
他の機種(eee_701等)と合わせる為、以下の階層にファイルを作成する
- ”cupcake/vendor/atmarktechno/armadillo500fx_dev”
- (これじゃなくても良さそうだけど・・なんとなく・・)
- 格納するフォルダを作成する
- 上記の”cupcake/vendor/atmarktechno/armadillo500fx_dev”
- 格納フォルダ内にファイルを作成する
- Android.mk
- Android版Makefileみたいなもの(呼ばれる順番不明)
- ”git clone git://codeaurora.org/platform/vendor/qcom/qsd8250_surf.git”でサンプルを取得
- 上記取得ファイルの中のAndroid.mkをコピー
- コメントのみなので、不要である可能性有り
- AndroidBoard.mk
- Android版Makefileみたいなもの(呼ばれる順番不明)
- ”git clone git://codeaurora.org/platform/vendor/qcom/qsd8250_surf.git”でサンプルを取得
- 上記取得ファイルの中のAndroidBoad.mkをコピー
- Armadillo-500 FX用に修正
- KERNEL_DEFCONFIGに指定するファイルを変更
- (qsd8650_defconfig→armadillo500fx_dev_android_defconfig)
- キーボードマップファイルの指定ファイルを変更
- (surf_keypad.kl→tuttle2.kl)
- (surf_keypad.kcm→tuttle2.kcm)
- ブート用のビルド設定を削除
- ”include vendor/qcom/$(TARGET_PRODUCT)/boot/Android.mk”を削除
- init.rcのコピー設定を追加
- ”PRODUCT_COPY_FILES +=$(LOCAL_PATH)/init.rc:root/init.rc”を追加
- (正しいか不明)
- KERNEL_DEFCONFIGに指定するファイルを変更
- AndroidProducts.mk
- Android版Makefileみたいなもの(呼ばれる順番不明)
- ”git clone git://codeaurora.org/platform/vendor/qcom/qsd8250_surf.git”でサンプルを取得
- 上記取得ファイルの中のAndroidProducts.mkをコピー
- Armadillo-500 FX用に修正
- (qsd8250_surf.mk→armadillo500fx_dev.mk)
- armadillo500fx_dev.mk
- Android版Makefileみたいなもの(呼ばれる順番不明)
- ”git clone git://android.git.kernel.org/platform/vendor/htc/dream-open.git”でサンプルを取得
- 上記取得ファイルの中のhtc_dream.mkをコピー
- ファイル名を”armadillo500fx_dev.mk”へ変更
- Armadillo-500 FX用に修正
- 変数”PRODUCT_NAME”を変更
- (htc_dream→armadillo500fx_dev)
- 変数”PRODUCT_DEVICE”を変更
- (dream-open→armadillo500fx_dev)
- 変数”PRODUCT_MANUFACTURER”の記載を削除
- 変数”PRODUCT_NAME”を変更
- BoardConfig.mk
- Android版Makefileみたいなもの(呼ばれる順番不明)
- デバイスに合わせてフラグ設定をまとめている?
- ”git clone git://codeaurora.org/platform/vendor/qcom/qsd8250_surf.git”でサンプルを取得
- 上記取得ファイルの中のBoardConfig.mkを参考に作成する
- デバイス依存部の削除とブート関連記載の削除
- (基本、genericで、カーネルビルドだけ付加した形かな)
- 以下がArmadillo-500 FX用の設定
- TARGET_NO_BOOTLOADER := true
- TARGET_NO_KERNEL := false(カーネルビルド用)
- TARGET_NO_RADIOIMAGE := true
- BOARD_USES_GENERIC_AUDIO := true
- USE_CAMERA_STUB := true
- TARGET_BOOTIMAGE_USE_EXT2 := true(たぶん、不要)
- TARGET_USERIMAGES_USE_EXT2 := true(たぶん、不要)
- init.rc
- 起動時に、initから参照される設定ファイル
- initでのコマンド解釈ルールにより、動作する
- 必須ではない為、”.mk”内にコピー用の記載が必要。
- デフォルトだと、"cupcake/system/core/rootdir"内のファイルになる?
- (要確認)同名ファイルが他に存在?
- (要確認)環境変数”TARGET_PROVIDES_INIT_RC”が影響?
- デフォルトファイルから、”yaffs2”の記載がある行を”#”でコメントアウト
- マウント設定、権限設定があるので、見直しの必要有り
- system.prop
- 設定ファイル(よくわかっていない)
- 予想:特定用途のライブラリ、インタフェイスの設定
- "cupcake/build/target/board/generic"内からコピー
- tuttle2.kcm
- キーボードマップ関連(よくわかっていない)
- "cupcake/build/target/board/generic"内からコピー
- tuttle2.kl
- キーボードマップ関連(よくわかっていない)
- "cupcake/build/target/board/generic"内からコピー
- Android.mk
- カーネルをビルドする為に、"cupcake/kernel"配下にファイルを追加する
- AndroidKernel.mk
- ”git clone git://codeaurora.org/kernel/msm.git”でサンプルを取得
- カーネル一式なので、重たいかも・・
- AndroidKernel.mkをcupcake/kernel内にコピー
- ”git clone git://codeaurora.org/kernel/msm.git”でサンプルを取得
- AndroidKernel.mk
- サンプル
- 2と3のサンプルを添付ファイルとしてアップ(armadillo_cust.tar.gz)
- ライセンスとか問題あったら、指摘してください
- 注意事項
- ”.mk”の記載ルールがはっきりとわかっていない為、間違ってるかも
- 現状、不明なファイルについては、generic時に使用されるファイルを使用
- 当初、書込みファイル自体不明だった為、不要な設定も含まれているかも
パス設定
Armadillo-500FXは、CPUがARMとなっている。
一方で、ビルドマシンとしては、x86を想定している。
上記のため、クロスコンパイラ用のパスを追加する必要がある。
その為のパス設定について記載する。
一方で、ビルドマシンとしては、x86を想定している。
上記のため、クロスコンパイラ用のパスを追加する必要がある。
その為のパス設定について記載する。
- クロスコンパイラの場所
- cupcake/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/
- cupcake/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/
- cupcake/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/bin/
- パス設定の追加
- "cupcake/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/”へのシンボリックリンクを作成する(以下、arm-eabi-4.2.1を作成したリンクとする)
- 端末で、"ln -s"コマンドを使う
- 上記手順は不要な場合がある
- 端末上で、"PATH=$PATH:arm-eabi-4.2.1"として、PATHへ追加する
- 毎回書くのはめんどくさいので、.bashrc とか、ビルドスクリプトに入れると良い
- "cupcake/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/”へのシンボリックリンクを作成する(以下、arm-eabi-4.2.1を作成したリンクとする)
ビルド方法
ビルド方法を記載する。
- 端末で、”cupcake”フォルダまで、移動する
- "export TARGET_PRODUCT=armadillo500fx_dev"とコマンドを入力する
- "make"とコマンドを入力する
ビルドスクリプト
ビルドの為のスクリプトを紹介しておく
ビルドの為の設定が面倒くさい為に作成した。
ビルドの為の設定が面倒くさい為に作成した。
- ”build_dev.sh”を作成
- 名前はなんでも良い
- (あくまで、参考程度・・)
- パス設定を記載
- 環境設定を記載(例:"export TARGET_PRODUCT=armadillo500fx_dev")
- ビルドコマンドを記載(”make”等)
上記ファイルを作成すると、ビルドは以下の手順で良い
- 端末で、"cupcake"フォルダに移動する
- ". build_dev.sh"とコマンドを入力する
ビルド生成物
上記ビルド構築環境でのビルド生成物について記載する
- ビルド生成物作成フォルダ
- cupcake/out/target/product/armadillo500fx_dev
- Armadillo書込み対応ファイル/フォルダ
- カーネル
- cupcake/out/target/product/armadillo500fx_dev/kernel(以降、$KERNEL)
- ユーザランド
- cupcake/out/target/product/armadillo500fx_dev/root(以降、$ROOT)
- cupcake/out/target/product/armadillo500fx_dev/system(以降、$SYSTEM)
- カーネル
- Armadillo-500 FXへの書込み
- $KERNELをhermit等でカーネル領域に書き込む
- ROMのユーザ領域には、Armadillo開発者サイトにあるAtmark Distユーザランドを書き込む
- Androidユーザ層を構築する
- ローカルに"android"フォルダを作成する
- $ROOTのフォルダ/ファイルを”android”内にコピー
- $SYSTEMのフォルダ/ファイルを”android/system”内にコピー
- 構築したユーザ層をArmadillo-500 FXの/dev/sda1に書き込む
- /dev/sda1への書込みは、Armadillo開発者サイトを参照してください
- 注意事項
- 構築するアプリ等に依存して、別途dataフォルダの考慮が必要になる
未解決問題
未解決な問題について記載する
- ビルド生成物の操作方法
- ”chroot”を使わないArmadillo-500FXのAndroid起動方法
- 各種、環境変数の影響
- キーマップファイルの効果
- .mkファイル内のAndroid特有コマンド
何かあれば、書き込みます・・。
検証中
未解決問題の中で、今、検証中のものを記載する。
途中経過も書いていければいいな。
途中経過も書いていければいいな。
現状、検証中はありません。
このwikiの更新情報RSS