新規作成
新規ページ作成
新規ページ作成(その他)
このページをコピーして新規ページ作成
このウィキ内の別ページをコピーして新規ページ作成
このページの子ページを作成
新規ウィキ作成
編集
ページ編集
ページ編集(簡易版)
ページ名変更
メニュー非表示でページ編集
ページの閲覧/編集権限変更
ページの編集モード変更
このページにファイルをアップロード
メニューを編集
バージョン管理
最新版変更点(差分)
編集履歴(バックアップ)
アップロードファイル履歴
このページの操作履歴
このウィキのページ操作履歴
ページ一覧
ページ一覧
このウィキのタグ一覧
このウィキのタグ(更新順)
このページの全コメント一覧
このウィキの全コメント一覧
おまかせページ移動
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
|
ご利用ガイド
|
管理者に問合せ
|
|
ログイン
|