新規作成
新規ページ作成
新規ページ作成(その他)
このページをコピーして新規ページ作成
このウィキ内の別ページをコピーして新規ページ作成
このページの子ページを作成
新規ウィキ作成
編集
ページ編集
ページ編集(簡易版)
ページ名変更
メニュー非表示でページ編集
ページの閲覧/編集権限変更
ページの編集モード変更
このページにファイルをアップロード
メニューを編集
バージョン管理
最新版変更点(差分)
編集履歴(バックアップ)
アップロードファイル履歴
ページ操作履歴
ページ一覧
ページ一覧
このウィキのタグ一覧
このウィキのタグ(更新順)
このページの全コメント一覧
このウィキの全コメント一覧
おまかせページ移動
RSS
このウィキの更新情報RSS
このウィキ新着ページRSS
ヘルプ
ご利用ガイド
Wiki初心者向けガイド(基本操作)
このウィキの管理者に連絡
運営会社に連絡(不具合、障害など)
Android勉強用まとめページ
操作ガイド
新規作成
編集する
全ページ一覧
登録/ログイン
Android勉強用まとめページ
操作ガイド
新規作成
編集する
全ページ一覧
登録/ログイン
Android勉強用まとめページ
Armadillo-500FX用開発環境構築
メニュー
トップページ
覚え書き
Android開発
環境構築
Armadillo-500FX用
Cupcake
開発環境構築
USBカメラ接続
Eclair
開発環境構築
Froyo
アプリな話
アプリ開発環境構築
メモ書き
アプリ一覧
出勤退勤
VMwareの触り方
リンク
実験環境
コメント入力用ページ
最終更新
0000-00-00 00:00:00
カウンタ
今日:
-
昨日:
-
合計:
-
更新履歴
取得中です。
ここを編集
Armadillo-500 FX用開発環境構築
概略
Armadillo-500 FX上で動作するAndroidのビルド環境構築について記載する。
記載、および、動作確認には、cupcakeバージョンを対象としている。
バージョンによっては、不要な手順もある。
目次
Armadillo-500 FXについて
環境構築目標
ファイル取得
ファイル配置
カーネル修正
ユーザ空間修正
追加ファイル
パス設定
ビルド方法
ビルドスクリプト
ビルド生成物
未解決問題
検証中
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:04247」 「PATCH」 armadillo-500: make O= building
ユーザ空間修正
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固定化)
注意事項
上記修正は、重複もありそうだけど、良しとした。
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”を追加
(正しいか不明)
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”の記載を削除
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"内からコピー
カーネルをビルドする為に、"cupcake/kernel"配下にファイルを追加する
AndroidKernel.mk
”git clone git://codeaurora.org/kernel/msm.git”でサンプルを取得
カーネル一式なので、重たいかも・・
AndroidKernel.mkをcupcake/kernel内にコピー
サンプル
2と3のサンプルを添付ファイルとしてアップ(
armadillo_cust.tar.gz
)
ライセンスとか問題あったら、指摘してください
注意事項
”.mk”の記載ルールがはっきりとわかっていない為、間違ってるかも
現状、不明なファイルについては、generic時に使用されるファイルを使用
当初、書込みファイル自体不明だった為、不要な設定も含まれているかも
パス設定
Armadillo-500FXは、CPUがARMとなっている。
一方で、ビルドマシンとしては、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”フォルダまで、移動する
"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特有コマンド
何かあれば、書き込みます・・。
検証中
未解決問題の中で、今、検証中のものを記載する。
途中経過も書いていければいいな。
現状、検証中はありません。
「Armadillo-500FX用開発環境構築」をウィキ内検索
最終更新:2009年09月28日 23:54
添付ファイル
armadillo_cust.tar.gz
|
新しいページ
|
編集
|
差分
|
編集履歴
|
ページ名変更
|
アップロード
|
検索
|
ページ一覧
|
タグ
|
RSS
|
ご利用ガイド
|
管理者に問合せ
|
|
ログイン
|