2011年9月26日月曜日

ダミー電池の動作と安定化電源による起動が確認できたので、
早速、簡単な動作を計測してみました。

条件:
・壁紙設定:壁紙
・Wifi設定:OFF
・bluetooth設定:OFF
・GPS設定:OFF
・バックグラウンドシンク設定:OFF

「画面の明るさ」の変更方法:
・電源管理ウィジェットによる変更


1.「画面の明るさ」設定:レベル1

電源管理ウィジェットにて一番暗い設定にしました。





2.「画面の明るさ」設定:レベル2

電源管理ウィジェットにて1段階目の明るさ。




3.「画面の明るさ」設定:レベル3

電源管理ウィジェットにて2段階目の明るさ。







まとめ

各レベルと電流値を表にしました。

画面の明るさ電流値
レベル10.11A
レベル20.15A
レベル30.26A



画面を明るくする程、電流の値が大きくなるのがわかります。
次回はオシロスコープを接続して波形から計測します。

画面設定「画面の明るさ」の違いを確認する

ダミー電池の動作と安定化電源による起動が確認できたので、
早速、簡単な動作を計測してみました。

条件:
・壁紙設定:壁紙
・Wifi設定:OFF
・bluetooth設定:OFF
・GPS設定:OFF
・バックグラウンドシンク設定:OFF

「画面の明るさ」の変更方法:
・電源管理ウィジェットによる変更


1.「画面の明るさ」設定:レベル1

電源管理ウィジェットにて一番暗い設定にしました。





2.「画面の明るさ」設定:レベル2

電源管理ウィジェットにて1段階目の明るさ。




3.「画面の明るさ」設定:レベル3

電源管理ウィジェットにて2段階目の明るさ。







まとめ

各レベルと電流値を表にしました。

画面の明るさ電流値
レベル10.11A
レベル20.15A
レベル30.26A



画面を明るくする程、電流の値が大きくなるのがわかります。
次回はオシロスコープを接続して波形から計測します。

3.配線

電池と端末本体と接する箇所に金具があたるように配線を行いました。







本体に嵌め込むと以下のような感じ。




安定化電源と接続して、電気を流してみました。
みごと、起動に成功!!





ようやく、計測の準備が整いました。

消費電力計測用のダミー電池作成 part3

3.配線

電池と端末本体と接する箇所に金具があたるように配線を行いました。







本体に嵌め込むと以下のような感じ。




安定化電源と接続して、電気を流してみました。
みごと、起動に成功!!





ようやく、計測の準備が整いました。

2011年9月20日火曜日



f:id:bs-android:20110919202258j:image


先月の記事に続きについてADK-demoボードの使いかたとAndroidAccessoryデモアプリのビルド方法についてレポートいたします。


☆ Android Accessoryとは


今年5月にgoogleから発表されたAndroidハードウェア拡張規格のことです。


詳しい情報はこちらを参照してください。


 http://developer.android.com/guide/topics/usb/adk.html


今回はgoogleで公開されているソースコードを使用しました。


 https://dl-ssl.google.com/android/adk/adk_release_0512.zip





☆ Android Accessoryの面白いところ


一般的にハードウェアの拡張といえばUSBに周辺機器を接続するというイメージがありますが


Android Accessoryは、なんと外部装置がUSBホストでAndroid端末が周辺機器として振舞います。


この方式を取るメリットとしてはスマートフォンのように電力的に非力なデバイスから


外部へ電力供給させることなく、外部から電力供給を受けながら半永久的に動作させることが


できることです。またフレームワーク層でハードウェア/ドライバを隠蔽してくれていることから


難しいドライバなどを書かなくても外部機器を接続できるメリットもあります。





1.Android Accessoryを実現するためのハードウェア


当初Android AccessoryはArduinoをベースとした実装として発表されましたが


最近になってArduinoを用いないADK対応ボードもいくつか出てきているようです。


今回はADKの基本を知るためにもArduinoをベースにしたものを用いることにしました。


Arduinoを用いたADKを実現するアプローチとして次のようなものがあります。


 a) RT-ADKボード


 b) Arduino ADKボード


 c) Arduino MEGA 256 + USB HOST Shield 2.0


d) Arduino uno + SparkFun USB HOST Shield





RT-ADKボードとサブボード


f:id:bs-android:20110919202257j:image:w360


RT-ADKボードはGoogleのロゴも付いていて、持っていて嬉しい基板ではありますが


ちょっと入手が大変なこともあり、今回は本家Arduinoが出しているArduino ADKボードでの


使用方法も併せて記載いたします。





☆Arduino USBシールドとADKボードの違いについて


オリジナルのUSB HOSTはシールドという形で拡張されるようになっていますが


RT-ADKボードとArduino ADKではシールド接続用の信号を温存するために


USB回路の接続にArduino非互換の信号を使っています。


そのため本家 USB HOSTシールドのライブラリをそのまま使うことができません


ちょっと古いですが最初のうちはADK Package配布に含まれているライブラリを使うようにしてください。


どうしても新しいものを使いたい方は次のピン割り当てを書き換えれば使えるようになるはずです。


 INT GPIO_9 -> ATMEGA2560(PE6)


 RST GPIO_8 -> ATMEGA2560(PJ2)


 GPX GPIO_7 -> ATMEGA2560(PJ3)





1-1.ツールとライブラリの準備


ADKで必要となるArduinoの開発環境は次のようにインストールを行う必要があります。


・Arduinoソフトウェア


Arduinoを動かすための基本ツールは次の場所から入手することができます。


 http://arduino.cc/en/Main/Software


ここでは9/20時点で最新版であるArduino 0022 を使用しています。


arduino-0022.zipをダウンロードし、任意のフォルダに展開します。


このツールは任意のフォルダから起動できるので外部ドライブに展開しても使用することができます。


今回はG:\に展開したものとして記載しています。





・Arduino ADK追加ファイル


Arduino ADKを使うために必要な追加ファイルは次の場所に公開されています。


なおこの追加ファイルはRT-ADKやunoには必要ありません。


http://www.arduino.cc/en/Main/ArduinoBoardADK


一番下にWindowsドライバのinfファイルが入ったzipファイルがありますのでダウンロードして


Arduino MEGA ADK.infをG:\arduino-0022\driversにコピーしておきます。





・Android Accessoryライブラリ


Android Accessoryで使用するライブラリをインストールします。


adk_release_0512.zipを展開しADK_release_0512\firmware\arduino_libs以下にある


次の2つのフォルダをG:\arduino-0022\librariesにコピーします。





・Capacitive Sensingライブラリ


RT-ADKボードに載っているタッチセンサーのライブラリもインストールします。


 http://www.arduino.cc/playground/Main/CapSense


ここに公開されている CapacitiveSense003.zip をダウンロードし


展開されたCapacitiveSense003フォルダをG:\arduino-0022\librariesにコピーします。





1-2. スケッチのビルド


Arduinoの世界ではソースコードをスケッチと呼びます。


ADKで配布されているコードにはスケッチも含まれていますので、これをビルドして使用します。


まずADK_release_0512\firmwareにあるdemokitフォルダをG:\arduino-0022にコピーしておきます。


arduino.exeを起動後にFile -> Openを実行し 上記コピーしたフォルダにあるdemokit.pdeを開きます。


次にTools -> Board にて "Arduino Mega 2560"を選択します。


Sketch -> Verify Compileを実行することによりビルドが開始されます。


正常にビルドされればステータス部分に"Done compiling"と表示されます。





☆Arduino ADKのみを使う場合は


Arduino ADKには RT-ADKの付属サブボードのようなものがありませんのでブレッドボードで代用します。


今回はフルカラーLED3個とスイッチ2個を載せてみました。


f:id:bs-android:20110919202256j:image:w360


RT-ADKのサブボードに比べブレッドボードに載せた回路はなかり簡素なものとなっていることから


ADKオリジナルソースから次のコードをコメントアウトする必要があります。


 JoyStick


 Temp/Light Sensor


 Relay


 ServoMoter


 CapacitiveSenser


修正済みのスケッチを次の場所に置きましたので、こちらを参考にして下さい。


https://sites.google.com/a/brilliantservice.co.jp/beagleboard/adk/demokit_ADK.pde?attredirects=0&d=1





1-3. スケッチのアップロード


ビルドが終わったスケッチをアップロードする前に、予めPCとAdruinoを接続しておきます。


Arduinoボードを最初に接続した時にはドライバを要求されますので次のドライバをインストールして下さい。


RT-ADK -> G:\arduino-0022\drivers\FTDI USB Drivers\


 Arduino ADK -> G:\arduino-0022\drivers\Arduino MEGA ADK.inf


次に Tools -> Serial Portでボードに接続しているポートを指定します。


File -> Upload to I/O board を実行すればビルドされたスケッチがボードへ転送され


ADKボードとして使用することができます。





2.AndroidAccessoryデモアプリ(DemoKit)


AndroidAccessoryを動作させるためのデモアプリはAndroid Open Accessory Development Kit


(adk_release_0512.zip)に含まれています。


今回はこのデモアプリを使って動作確認するところまで記載いたします。


なお、とりあえず動作だけという方のためにビルド済みのapkファイルも準備しました。


https://sites.google.com/a/brilliantservice.co.jp/beagleboard/adk/DemoKit_singed.apk?attredirects=0&d=1


署名付きにしましたので、そのまま adb install等でインストールできます。





☆ ネットワーク越しのデバッグ


ADKはadbで使われるUSBポートを塞いでしまうため、USB接続によるデバッグができなくなります。


そこで有線LAN経由でadbを使えるようにします。


ここではBeagleBoardのIPアドレスを192.168.1.23として記載ています。


IPアドレスは使用する環境に合わせて読み替えてください。


・BeagleBoard側の設定


adbデーモンを停止したのちにadbの設定切り替えます。


シリアルコンソールから次のように入力します。



# stop adbd
# ifconfig usb0 192.168.1.23 up
# setprop service.adb.tcp.port 5555
# start adbd


adbdはAndroid起動時にUSB接続となってしまいますので


起動ごとに上記の操作を行うようにしてください。





・ホスト側の設定


いったんadbサーバを停止してからネットワーク経由で接続を行います。



adb kill-server
adb start-server
adb connect 192.168.1.23:5555


正常に接続できれば、USB接続と同じように"adb"や"ddms"を使ってデバッグを行うことができます。





2-1. ソースコードの準備


今回は Android Open Accessory Development Kitで公開しているソースコードを用いました。


ここで配布されているADK Package(adk_release_0512.zip)をD:\workspaceに展開します。





2-2. Eclipseプロジェクトの作成


配布されているソースコードはそのままビルドすることができないことから


新規プロジェクトを作成しつつインポートさせます。


Eclipseを起動後 File -> New -> Android Projectで新規プロジェクトを作成します。


f:id:bs-android:20110919202254p:image:w360


新規プロジェクトのダイアログが出ますので次の項目を入力してFinishボタンを押します。


f:id:bs-android:20110919202253p:image:w360


Project nameは任意の名前でかまいません


 "Create project from existing source"を選択し


 "D:\workspace\adk_release_0512\ADK_rlease_0512\app"を指定


Build Targetは"Google APIs(2.3.3)"を選択


※Android 2.3.4の項目が無いのは2.3.4発表時に3.0のためにAPI Level 11が定義されていたため


適切なAPI Levelが割り当てられなかったためのようです。


そのため2.3.4は2.3.3+αとして扱われています。





2-3. ビルド、デバッグ


ADBの接続ができていればそのまま動作させることができます。


Targetバージョンが一致していないため警告マークが出ますが問題ありません。


f:id:bs-android:20110919202252p:image:w360


デモアプリをインストール後にADK ボードを接続すると次のような画面が出ます。


f:id:bs-android:20110919202251p:image:w360


ここでOKのボタンを押すとデモアプリが動き出します。


ボタンやジョイスティック操作に合わせて画面が変化したり、R,G,Bのスライダを


動かすとLEDが点灯すれば正常に動作しています。





今回は早足ではありましたがAndroidに独自ハードウェアを付ける方法について解説いたしました。


AndroidといえばJavaアプリというイメージがありますが、Adruinoが繋がるようになれば


簡単にハードウェアを触れるようになります。


これを機にハードウェアに興味を持ってくださる方が増えれば幸いです。





次回はADKの応用編としてFarmboxのプラットフォームとそれに必要になる機能


(無線LANとWebカメラなど)の追加方法についてレポートする予定です。





ADKとArduinoの使いかた



f:id:bs-android:20110919202258j:image


先月の記事に続きについてADK-demoボードの使いかたとAndroidAccessoryデモアプリのビルド方法についてレポートいたします。


☆ Android Accessoryとは


今年5月にgoogleから発表されたAndroidハードウェア拡張規格のことです。


詳しい情報はこちらを参照してください。


 http://developer.android.com/guide/topics/usb/adk.html


今回はgoogleで公開されているソースコードを使用しました。


 https://dl-ssl.google.com/android/adk/adk_release_0512.zip





☆ Android Accessoryの面白いところ


一般的にハードウェアの拡張といえばUSBに周辺機器を接続するというイメージがありますが


Android Accessoryは、なんと外部装置がUSBホストでAndroid端末が周辺機器として振舞います。


この方式を取るメリットとしてはスマートフォンのように電力的に非力なデバイスから


外部へ電力供給させることなく、外部から電力供給を受けながら半永久的に動作させることが


できることです。またフレームワーク層でハードウェア/ドライバを隠蔽してくれていることから


難しいドライバなどを書かなくても外部機器を接続できるメリットもあります。





1.Android Accessoryを実現するためのハードウェア


当初Android AccessoryはArduinoをベースとした実装として発表されましたが


最近になってArduinoを用いないADK対応ボードもいくつか出てきているようです。


今回はADKの基本を知るためにもArduinoをベースにしたものを用いることにしました。


Arduinoを用いたADKを実現するアプローチとして次のようなものがあります。


 a) RT-ADKボード


 b) Arduino ADKボード


 c) Arduino MEGA 256 + USB HOST Shield 2.0


d) Arduino uno + SparkFun USB HOST Shield





RT-ADKボードとサブボード


f:id:bs-android:20110919202257j:image:w360


RT-ADKボードはGoogleのロゴも付いていて、持っていて嬉しい基板ではありますが


ちょっと入手が大変なこともあり、今回は本家Arduinoが出しているArduino ADKボードでの


使用方法も併せて記載いたします。





☆Arduino USBシールドとADKボードの違いについて


オリジナルのUSB HOSTはシールドという形で拡張されるようになっていますが


RT-ADKボードとArduino ADKではシールド接続用の信号を温存するために


USB回路の接続にArduino非互換の信号を使っています。


そのため本家 USB HOSTシールドのライブラリをそのまま使うことができません


ちょっと古いですが最初のうちはADK Package配布に含まれているライブラリを使うようにしてください。


どうしても新しいものを使いたい方は次のピン割り当てを書き換えれば使えるようになるはずです。


 INT GPIO_9 -> ATMEGA2560(PE6)


 RST GPIO_8 -> ATMEGA2560(PJ2)


 GPX GPIO_7 -> ATMEGA2560(PJ3)





1-1.ツールとライブラリの準備


ADKで必要となるArduinoの開発環境は次のようにインストールを行う必要があります。


・Arduinoソフトウェア


Arduinoを動かすための基本ツールは次の場所から入手することができます。


 http://arduino.cc/en/Main/Software


ここでは9/20時点で最新版であるArduino 0022 を使用しています。


arduino-0022.zipをダウンロードし、任意のフォルダに展開します。


このツールは任意のフォルダから起動できるので外部ドライブに展開しても使用することができます。


今回はG:\に展開したものとして記載しています。





・Arduino ADK追加ファイル


Arduino ADKを使うために必要な追加ファイルは次の場所に公開されています。


なおこの追加ファイルはRT-ADKやunoには必要ありません。


http://www.arduino.cc/en/Main/ArduinoBoardADK


一番下にWindowsドライバのinfファイルが入ったzipファイルがありますのでダウンロードして


Arduino MEGA ADK.infをG:\arduino-0022\driversにコピーしておきます。





・Android Accessoryライブラリ


Android Accessoryで使用するライブラリをインストールします。


adk_release_0512.zipを展開しADK_release_0512\firmware\arduino_libs以下にある


次の2つのフォルダをG:\arduino-0022\librariesにコピーします。





・Capacitive Sensingライブラリ


RT-ADKボードに載っているタッチセンサーのライブラリもインストールします。


 http://www.arduino.cc/playground/Main/CapSense


ここに公開されている CapacitiveSense003.zip をダウンロードし


展開されたCapacitiveSense003フォルダをG:\arduino-0022\librariesにコピーします。





1-2. スケッチのビルド


Arduinoの世界ではソースコードをスケッチと呼びます。


ADKで配布されているコードにはスケッチも含まれていますので、これをビルドして使用します。


まずADK_release_0512\firmwareにあるdemokitフォルダをG:\arduino-0022にコピーしておきます。


arduino.exeを起動後にFile -> Openを実行し 上記コピーしたフォルダにあるdemokit.pdeを開きます。


次にTools -> Board にて "Arduino Mega 2560"を選択します。


Sketch -> Verify Compileを実行することによりビルドが開始されます。


正常にビルドされればステータス部分に"Done compiling"と表示されます。





☆Arduino ADKのみを使う場合は


Arduino ADKには RT-ADKの付属サブボードのようなものがありませんのでブレッドボードで代用します。


今回はフルカラーLED3個とスイッチ2個を載せてみました。


f:id:bs-android:20110919202256j:image:w360


RT-ADKのサブボードに比べブレッドボードに載せた回路はなかり簡素なものとなっていることから


ADKオリジナルソースから次のコードをコメントアウトする必要があります。


 JoyStick


 Temp/Light Sensor


 Relay


 ServoMoter


 CapacitiveSenser


修正済みのスケッチを次の場所に置きましたので、こちらを参考にして下さい。


https://sites.google.com/a/brilliantservice.co.jp/beagleboard/adk/demokit_ADK.pde?attredirects=0&d=1





1-3. スケッチのアップロード


ビルドが終わったスケッチをアップロードする前に、予めPCとAdruinoを接続しておきます。


Arduinoボードを最初に接続した時にはドライバを要求されますので次のドライバをインストールして下さい。


RT-ADK -> G:\arduino-0022\drivers\FTDI USB Drivers\


 Arduino ADK -> G:\arduino-0022\drivers\Arduino MEGA ADK.inf


次に Tools -> Serial Portでボードに接続しているポートを指定します。


File -> Upload to I/O board を実行すればビルドされたスケッチがボードへ転送され


ADKボードとして使用することができます。





2.AndroidAccessoryデモアプリ(DemoKit)


AndroidAccessoryを動作させるためのデモアプリはAndroid Open Accessory Development Kit


(adk_release_0512.zip)に含まれています。


今回はこのデモアプリを使って動作確認するところまで記載いたします。


なお、とりあえず動作だけという方のためにビルド済みのapkファイルも準備しました。


https://sites.google.com/a/brilliantservice.co.jp/beagleboard/adk/DemoKit_singed.apk?attredirects=0&d=1


署名付きにしましたので、そのまま adb install等でインストールできます。





☆ ネットワーク越しのデバッグ


ADKはadbで使われるUSBポートを塞いでしまうため、USB接続によるデバッグができなくなります。


そこで有線LAN経由でadbを使えるようにします。


ここではBeagleBoardのIPアドレスを192.168.1.23として記載ています。


IPアドレスは使用する環境に合わせて読み替えてください。


・BeagleBoard側の設定


adbデーモンを停止したのちにadbの設定切り替えます。


シリアルコンソールから次のように入力します。



# stop adbd
# ifconfig usb0 192.168.1.23 up
# setprop service.adb.tcp.port 5555
# start adbd


adbdはAndroid起動時にUSB接続となってしまいますので


起動ごとに上記の操作を行うようにしてください。





・ホスト側の設定


いったんadbサーバを停止してからネットワーク経由で接続を行います。



adb kill-server
adb start-server
adb connect 192.168.1.23:5555


正常に接続できれば、USB接続と同じように"adb"や"ddms"を使ってデバッグを行うことができます。





2-1. ソースコードの準備


今回は Android Open Accessory Development Kitで公開しているソースコードを用いました。


ここで配布されているADK Package(adk_release_0512.zip)をD:\workspaceに展開します。





2-2. Eclipseプロジェクトの作成


配布されているソースコードはそのままビルドすることができないことから


新規プロジェクトを作成しつつインポートさせます。


Eclipseを起動後 File -> New -> Android Projectで新規プロジェクトを作成します。


f:id:bs-android:20110919202254p:image:w360


新規プロジェクトのダイアログが出ますので次の項目を入力してFinishボタンを押します。


f:id:bs-android:20110919202253p:image:w360


Project nameは任意の名前でかまいません


 "Create project from existing source"を選択し


 "D:\workspace\adk_release_0512\ADK_rlease_0512\app"を指定


Build Targetは"Google APIs(2.3.3)"を選択


※Android 2.3.4の項目が無いのは2.3.4発表時に3.0のためにAPI Level 11が定義されていたため


適切なAPI Levelが割り当てられなかったためのようです。


そのため2.3.4は2.3.3+αとして扱われています。





2-3. ビルド、デバッグ


ADBの接続ができていればそのまま動作させることができます。


Targetバージョンが一致していないため警告マークが出ますが問題ありません。


f:id:bs-android:20110919202252p:image:w360


デモアプリをインストール後にADK ボードを接続すると次のような画面が出ます。


f:id:bs-android:20110919202251p:image:w360


ここでOKのボタンを押すとデモアプリが動き出します。


ボタンやジョイスティック操作に合わせて画面が変化したり、R,G,Bのスライダを


動かすとLEDが点灯すれば正常に動作しています。





今回は早足ではありましたがAndroidに独自ハードウェアを付ける方法について解説いたしました。


AndroidといえばJavaアプリというイメージがありますが、Adruinoが繋がるようになれば


簡単にハードウェアを触れるようになります。


これを機にハードウェアに興味を持ってくださる方が増えれば幸いです。





次回はADKの応用編としてFarmboxのプラットフォームとそれに必要になる機能


(無線LANとWebカメラなど)の追加方法についてレポートする予定です。





2011年9月15日木曜日

2.パテの流し込みと整形


流し込みもできる超低粘度のポリパテ、パテ革命「ドロドロ」を使用しました。


型取りした台に流し込み。




乾燥させること二日間、無事に固まりました。






荒々しい電池のようなモノが出来上がりました。







でこぼこしている箇所を削り取った後。







Nexus Sにぴったり嵌るようになりました。



消費電力計測用のダミー電池作成 part2

2.パテの流し込みと整形


流し込みもできる超低粘度のポリパテ、パテ革命「ドロドロ」を使用しました。


型取りした台に流し込み。




乾燥させること二日間、無事に固まりました。






荒々しい電池のようなモノが出来上がりました。







でこぼこしている箇所を削り取った後。







Nexus Sにぴったり嵌るようになりました。



2011年9月13日火曜日

消費電力の測定用にダミー電池の作成を行いました。
工作が苦手なため、かなり四苦八苦しました。
でも、楽しかったので記事として残します。


0.はじめに

今回、使用する端末はNexus S。





新品のNexus Sです。
まだオリジナルの保護シートが張られた状態です。






1.型取りを行う

まずは電池の型取りを行います。





型取り用の粘土をコネコネ開始。
手際が悪く、なかなか上手に混ざらなかったのですが、
慣れてきたころにいきなり固まり始め、慌てて電池を押し込みました。







数10分放置して電池を取り出すと、型ができました。
(※はじめての型取りで汚くてすみません)


消費電力計測用のダミー電池作成 part1

消費電力の測定用にダミー電池の作成を行いました。
工作が苦手なため、かなり四苦八苦しました。
でも、楽しかったので記事として残します。


0.はじめに

今回、使用する端末はNexus S。





新品のNexus Sです。
まだオリジナルの保護シートが張られた状態です。






1.型取りを行う

まずは電池の型取りを行います。





型取り用の粘土をコネコネ開始。
手際が悪く、なかなか上手に混ざらなかったのですが、
慣れてきたころにいきなり固まり始め、慌てて電池を押し込みました。







数10分放置して電池を取り出すと、型ができました。
(※はじめての型取りで汚くてすみません)


2011年9月9日金曜日



 今回は、CTS failについての調査方法に関して、記載いたします。


技術部 藤井洋祐 (twitterID:@i_m_yosuke)


なお、本内容を実施し、何らかの問題、損害などが発生した場合、当社は一切の責任を負いません。
あくまで自己責任で実施してください。
これらのことを認識頂いた上で、ご利用、参考にしてください。



1. CTSでFailがでたら


CTS実施中にfailが発生する場合があります。


  主な原因としては、


  ・ターゲットデバイスの設定ミス


  ・Framework層の変更による影響


  ・ハードウェア不良


  ・CTS自身の不具合


  があげられます。






 1.1 fail内容を確認


  failが出た場合、最初に行うことは、testResult.xmlを確認することから始めます。


  result fail項目にFailure Details(英語のみ)が表示されます。


  (下図のように表示されます。)


f:id:bs-android:20110907093249p:image


    (図1.1)




  1.1.1 fail要因調査(瞬殺編)


   図1.1のFailure Detailesを確認したところ、内容から、このfailは、WiFiセッティングでアクセスポイント設定がされていないことが原因(ターゲットデバイスの設定ミス)と考えられます。






  1.1.2 fail除去(瞬殺編)


  このケースでのfailはすぐに除去できます。


  WiFiアクセスポイント設定後、メソッド単位で再実施します。


f:id:bs-android:20110907093836p:image:w640




   passしました。testResult.xmlのfail情報は、この時点でpassとして、上書きされます。


   確認のため、ブラウザでtestResult.xmlを読み込んでみました。


f:id:bs-android:20110907094745p:image




  Note.


  メソッド単位実行した場合、testResult.xmlの結果を上書きします。設定ミスなどで、少数のfail項目再確認


  するには、メソッド単位でCTSを実行することをお勧めします。


  クラス単位、パッケージ単位の実施は、未実行(No Executed)項目に関しては、実行しますが、fail項目は、


  実行しません。




  Note.


  このように設定ミスでCTS failは、すぐに発生します。特にWiFi設定などは気をつけたほうがいいでしょう。


  また、必要なAPKがデバイスにインストールされていない場合も、当然ながらfailになります。






2. fail要因調査(中級編)


  前項のように、設定ミス等であった場合、即原因判明 → 即対応可能です。


  しかし、そうでない場合もあります。最悪の場合、kernelまで調査することがあるとかないとか。




f:id:bs-android:20110907095341p:image


 少し見にくいですが、上図を見ください。これは、たまたま出たのですが。。


 「-1を期待しているところに。-16777216が返却されてきた」ということでしょうが、この段階で、筆者には何のことかわかりません。






2.1 fail発生箇所特定


 まず、testResult.xmlをTextEditerで開き、stacktraceを見ます。


f:id:bs-android:20110907095342p:image


  (図2.1)




  TypefaceTest.java:208 というのが見えます。これは、「TypefaceTest.javaファイル208行目でfail検知しました。」ということです。   TypefaceTest.javaを見る必要があります。


  使用しているCTSがAndroid 2.3 R5 ですので、Android Open Source Projectで、android-cts-2.3_r5


  のタグから、repo syncでソースを取得します。


  Note.


   git cloneでcts.gitを取得しても特に問題はありません。Framework側のソースも必要になる事態を考慮し


   ここではあえてrepo syncで取得することを前提とします。 






2.2 fail発生箇所調査


  下はTypefaceTest.java 208行目付近のソースです。





202 Bitmap expected = BitmapFactory.decodeResource(
203 getContext().getResources(), R.drawable.typeface_test, opt);
204 assertEquals(expected.getWidth(), bitmap.getWidth());
205 assertEquals(expected.getHeight(), bitmap.getHeight());
206 for (int y = 0; y < bitmap.getHeight(); y++) {
207 for (int x = 0; x < bitmap.getWidth(); x++) {
208 assertEquals(expected.getPixel(x, y), bitmap.getPixel(x, y));
209 }
210 }


  リソースtypeface_testと何らかの方法で作成したbitmapとをpixel毎に等しいかチェックしています。


  比較元データ(リソース)を見てみます。


  framework/cts/tests/res/drawable/typeface_test.png


f:id:bs-android:20110907100748p:image






  もう少し、TypefaceTest.javaを見てみます。(bitmap作成処理)





Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "samplefont.ttf");
assertNotNull(typeface);
Bitmap bitmap = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
bitmap.eraseColor(Color.BLACK);
Canvas canvas = new Canvas(bitmap);
Paint p = new Paint();
p.setTypeface(typeface);
p.setColor(Color.WHITE);
p.setTextAlign(Paint.Align.CENTER);
p.setTextSize(50);
p.setFlags(0); // clear all flags (not sure what defaults flags are set)
canvas.drawText("test", bitmap.getWidth() / 2, 3 * bitmap.getHeight() / 4 , p);




  Note.


   CTSソースは、framework/cts/tests/testsの下にパッケージ単位(当然ですが)で存在します。


   failを検知(発生)させているソースは、failを出しているパッケージから、どこにあるかがわかります。






 2.3 解析




  テストシナリオ(処理内容)の解析結果:


   ARGB32bit作成した画像データとtypeface_test.pngをpixel単位で同一であるかをチェックしています。


   参考: 作成したデータはサイズ100x100、背景黒、文字色白、ttf-font、


       中央揃え、FontSize 50、文字列”test”で作られます。






  エラー要因の解析結果:


  期待値 -1(ARGB32bit Alpha 255, R 255, G 255,B 255 (白色))


   に対して、


  返却値 -16777216(ARGB32bit Alpha 255, R 0, G 0,B 0 (黒色))


   であったためです。


  ※リソースでは白色である部分が、作成したデータでは黒色であったということになります。






 2.4 対応方法




 当事例に関してまして、当方の対応方法を時系列で記載します。


 あくまで例となりますが、参考にしてください。




   1) AOSPで TypefaceTest.javaの最新コードをチェックします。


    failを出している該当箇所に変更があれば、使用中のCTSコードに未反映ではありますが、


    次回リリースのCTSに反映される可能性が高いということになり、


    Google社が、そのfailは互換性という観点で問題は無いと、現在考えているということです。


    よって、それ以上の調査は必要ないと判断可能です。  




   2) https://review.source.android.com/ にTypefaceTest.javaのsubmitがされていないか確認します。


    verifyまでされていれば、merge待ちとなりますので、AOSPにいずれ反映される見込みです。


    判断内容としては、1)と同じになります。


    ※rejectされていれば、framework側の調査が必要となります。




   3) 1)、2)のどちらにも当てはまら無ければ、framework側の調査が必要となります。


    当テストシナリオにおいては、Bitmapクラス、Colorクラスなどが使用されていますので、


    使用されているクラスについても、1)、2)のように変更がされていないかの調査が必要です。


   Note.


   調査した結果、failがでた項目を削除したpatchがbranch gingerbreadに対してsubmitされ、


   verify、mergedとなっておりました。(なぜか、CTS2.3R5には未反映ですが)


   つまり、対応方法1)にあたります。


   また、今回使用したターゲットデバイスは、Nexusシリーズでは無いためframework側の


   ソースコード入手も不可能です。


   よってこれ以上の深追いはしません。。。(出来ません)






以上です。







CTSでFailが出たときの調査方法(その1)



 今回は、CTS failについての調査方法に関して、記載いたします。


技術部 藤井洋祐 (twitterID:@i_m_yosuke)


なお、本内容を実施し、何らかの問題、損害などが発生した場合、当社は一切の責任を負いません。
あくまで自己責任で実施してください。
これらのことを認識頂いた上で、ご利用、参考にしてください。



1. CTSでFailがでたら


CTS実施中にfailが発生する場合があります。


  主な原因としては、


  ・ターゲットデバイスの設定ミス


  ・Framework層の変更による影響


  ・ハードウェア不良


  ・CTS自身の不具合


  があげられます。






 1.1 fail内容を確認


  failが出た場合、最初に行うことは、testResult.xmlを確認することから始めます。


  result fail項目にFailure Details(英語のみ)が表示されます。


  (下図のように表示されます。)


f:id:bs-android:20110907093249p:image


    (図1.1)




  1.1.1 fail要因調査(瞬殺編)


   図1.1のFailure Detailesを確認したところ、内容から、このfailは、WiFiセッティングでアクセスポイント設定がされていないことが原因(ターゲットデバイスの設定ミス)と考えられます。






  1.1.2 fail除去(瞬殺編)


  このケースでのfailはすぐに除去できます。


  WiFiアクセスポイント設定後、メソッド単位で再実施します。


f:id:bs-android:20110907093836p:image:w640




   passしました。testResult.xmlのfail情報は、この時点でpassとして、上書きされます。


   確認のため、ブラウザでtestResult.xmlを読み込んでみました。


f:id:bs-android:20110907094745p:image




  Note.


  メソッド単位実行した場合、testResult.xmlの結果を上書きします。設定ミスなどで、少数のfail項目再確認


  するには、メソッド単位でCTSを実行することをお勧めします。


  クラス単位、パッケージ単位の実施は、未実行(No Executed)項目に関しては、実行しますが、fail項目は、


  実行しません。




  Note.


  このように設定ミスでCTS failは、すぐに発生します。特にWiFi設定などは気をつけたほうがいいでしょう。


  また、必要なAPKがデバイスにインストールされていない場合も、当然ながらfailになります。






2. fail要因調査(中級編)


  前項のように、設定ミス等であった場合、即原因判明 → 即対応可能です。


  しかし、そうでない場合もあります。最悪の場合、kernelまで調査することがあるとかないとか。




f:id:bs-android:20110907095341p:image


 少し見にくいですが、上図を見ください。これは、たまたま出たのですが。。


 「-1を期待しているところに。-16777216が返却されてきた」ということでしょうが、この段階で、筆者には何のことかわかりません。






2.1 fail発生箇所特定


 まず、testResult.xmlをTextEditerで開き、stacktraceを見ます。


f:id:bs-android:20110907095342p:image


  (図2.1)




  TypefaceTest.java:208 というのが見えます。これは、「TypefaceTest.javaファイル208行目でfail検知しました。」ということです。   TypefaceTest.javaを見る必要があります。


  使用しているCTSがAndroid 2.3 R5 ですので、Android Open Source Projectで、android-cts-2.3_r5


  のタグから、repo syncでソースを取得します。


  Note.


   git cloneでcts.gitを取得しても特に問題はありません。Framework側のソースも必要になる事態を考慮し


   ここではあえてrepo syncで取得することを前提とします。 






2.2 fail発生箇所調査


  下はTypefaceTest.java 208行目付近のソースです。





202 Bitmap expected = BitmapFactory.decodeResource(
203 getContext().getResources(), R.drawable.typeface_test, opt);
204 assertEquals(expected.getWidth(), bitmap.getWidth());
205 assertEquals(expected.getHeight(), bitmap.getHeight());
206 for (int y = 0; y < bitmap.getHeight(); y++) {
207 for (int x = 0; x < bitmap.getWidth(); x++) {
208 assertEquals(expected.getPixel(x, y), bitmap.getPixel(x, y));
209 }
210 }


  リソースtypeface_testと何らかの方法で作成したbitmapとをpixel毎に等しいかチェックしています。


  比較元データ(リソース)を見てみます。


  framework/cts/tests/res/drawable/typeface_test.png


f:id:bs-android:20110907100748p:image






  もう少し、TypefaceTest.javaを見てみます。(bitmap作成処理)





Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "samplefont.ttf");
assertNotNull(typeface);
Bitmap bitmap = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
bitmap.eraseColor(Color.BLACK);
Canvas canvas = new Canvas(bitmap);
Paint p = new Paint();
p.setTypeface(typeface);
p.setColor(Color.WHITE);
p.setTextAlign(Paint.Align.CENTER);
p.setTextSize(50);
p.setFlags(0); // clear all flags (not sure what defaults flags are set)
canvas.drawText("test", bitmap.getWidth() / 2, 3 * bitmap.getHeight() / 4 , p);




  Note.


   CTSソースは、framework/cts/tests/testsの下にパッケージ単位(当然ですが)で存在します。


   failを検知(発生)させているソースは、failを出しているパッケージから、どこにあるかがわかります。






 2.3 解析




  テストシナリオ(処理内容)の解析結果:


   ARGB32bit作成した画像データとtypeface_test.pngをpixel単位で同一であるかをチェックしています。


   参考: 作成したデータはサイズ100x100、背景黒、文字色白、ttf-font、


       中央揃え、FontSize 50、文字列”test”で作られます。






  エラー要因の解析結果:


  期待値 -1(ARGB32bit Alpha 255, R 255, G 255,B 255 (白色))


   に対して、


  返却値 -16777216(ARGB32bit Alpha 255, R 0, G 0,B 0 (黒色))


   であったためです。


  ※リソースでは白色である部分が、作成したデータでは黒色であったということになります。






 2.4 対応方法




 当事例に関してまして、当方の対応方法を時系列で記載します。


 あくまで例となりますが、参考にしてください。




   1) AOSPで TypefaceTest.javaの最新コードをチェックします。


    failを出している該当箇所に変更があれば、使用中のCTSコードに未反映ではありますが、


    次回リリースのCTSに反映される可能性が高いということになり、


    Google社が、そのfailは互換性という観点で問題は無いと、現在考えているということです。


    よって、それ以上の調査は必要ないと判断可能です。  




   2) https://review.source.android.com/ にTypefaceTest.javaのsubmitがされていないか確認します。


    verifyまでされていれば、merge待ちとなりますので、AOSPにいずれ反映される見込みです。


    判断内容としては、1)と同じになります。


    ※rejectされていれば、framework側の調査が必要となります。




   3) 1)、2)のどちらにも当てはまら無ければ、framework側の調査が必要となります。


    当テストシナリオにおいては、Bitmapクラス、Colorクラスなどが使用されていますので、


    使用されているクラスについても、1)、2)のように変更がされていないかの調査が必要です。


   Note.


   調査した結果、failがでた項目を削除したpatchがbranch gingerbreadに対してsubmitされ、


   verify、mergedとなっておりました。(なぜか、CTS2.3R5には未反映ですが)


   つまり、対応方法1)にあたります。


   また、今回使用したターゲットデバイスは、Nexusシリーズでは無いためframework側の


   ソースコード入手も不可能です。


   よってこれ以上の深追いはしません。。。(出来ません)






以上です。







2011年9月1日木曜日



f:id:bs-android:20110829225748j:image:w640


今年5月にgoogleから発表されたAndroid Open Accessoryについて


面白い試みであったことから話題になっておりましたが、


しかし発表当初はNexusシリーズしか使用できず対応ボードも少ないことから


用途も限定されておりました。


最近になって組み込みの定番のBeagleBoardやADK互換ボードも潤沢に手に入るように


なってきましたのでGingerBreadとADKを載せる方法についてレポートいたします。


なお必要な作業全部を一気にやろうとすると息切れしてしまいそうな量になりますことから


これから3回に分けてBeagleBoardへのADK移植方法とFarmboxでの事例について記載して


いきたいと思います。


1回目 BeagleBoard-xMにGingerBread(2.3.4)とADKを移植


2回目 ADK-demoボードの使用方法


3回目 無線LANとWebカメラを追加しFarmboxのプラットフォームとする








○1回目 BeagleBoard-xMにGingerBreadとADKを移植


 まず1回目としてBeagleBoardでGingerBreadが動作させられるようにします。



☆ADKには2.6.35以降のカーネルと2.3.4r1のGingerBreadが必要


 既にいくつかのコミュニティにてGingerBreadを動作させている事例が出ておりますが


 ADKを使用するためには次の要件を満たす必要があることから2.6.35以降のカーネルと


 GingerBread(2.3.4r1)以降のコードが必要となります。


  1) USB compositeデバイスドライバ


  2) Android Accessory Service


 ちょうど7月にTIからこれらの要件を満たした新しいBSPがリリースされましたことから


 今回はこのBSPのオープンソース版を利用することにしました。





1.開発マシンのセッティング


 今回こちらでは次の環境で作業を行いました。


  Ubuntu 10.10 (32bit版)


  Oracle VirtualBox 4.0.10


 なお GingerBreadでは64bitビルド環境が必要とされていますが、今回使用するソースコードでは


 32bit版でもビルド可能なようになっておりますことから、作業は32bit版で行っています。


 また作業の都合で仮想環境を用いておりますが、こちらは必須ではありません。


 


 1-1. 必要なパッケージのインストール


 Android開発で必要なパッケージをインストールします。



 $ sudo apt-get install git-core flex bison gperf libesd0-dev libwxgtk2.6-dev zlib1g-dev build-essential libstdc++5 tofrodos
 $ sudo apt-get install x-dev libx11-dev libncurses5-dev


 Ubuntu 10.10においてJAVA-JDKがインストールすることができない場合は


 手動でrepositoryを追加してからインストールします



 $ sudo add-apt-repository ppa:sun-java-community-team/sun-java6
 $ sudo apt-get update
 $ sudo apt-get install sun-java6-jdk
 $ sudo update-java-alternative -s java-6-sun


 次にソースコード取得に必要なrepoを ~/bin以下にダウンロードします。



 $ mkdir ~/bin
 $ curl http://android.git.kernel.org/repo >~/bin/repo
 $ chmod a+x ~/bin/repo





2.作業ディレクトリの作成と環境設定


 今回は作業ディレクトリとして ~/rowboat-gingerbread を使用するようにします。


 ディレクトリ名は自由に変更してもかまいません。


 また作成したディレクトリを環境変数MYWORKに設定します。



 $ mkdir ~/rowboat-gingerbread
 $ export MYWORK=~/rowboat-gingerbread
 $ export PATH=~/bin:$PATH





3.ソースコードの取得


 BeagleBoard用のGingerBreadはrowboatプロジェクトにて公開されているものを利用します。


 OMAP3対応のkernel-2.6.37とGingerBread-2.3.4r1が既にマージされていることから


 Android本体とカーネルはこれをそのまま使用することができます。


3-1.まずダウンロードの前に次のrepo設定を行います



 $ cd $MYWORK
 $ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-GingerBread-2.3.4-DevKit-2.1.xml


 途中メールアドレス入力を要求されますが適当なメアドでもかまいません。


3-2.ソースコードのダウンロード


 repo設定が成功したらソースコードのダウンロードを行います。


 次のコマンドラインを実行するとダウンロードが開始されます、接続先のサーバー速度の関係で数時間ぐらい


 待たされることがあります。



 $ repo sync


 またごくまれですが接続先サーバーがダウンしていてダウンロードが失敗することがあります、


 この場合は再実行するようにしてください。





4.各種パッチの適用


 ソースコードの取得が終わったらADK関連のパッチを当てます。


4-1. MSM-Accessoryパッチ


 ADKのコードはMSM(Qualcomチップ)向けに作られて公開されています。


  http://android.git.kernel.org/?p=kernel/msm.git;a=shortlog


 今回は上記サイトから取得した差分を利用するようにしています。


 こちらにアーカイブしてありますので ~/ 以下に展開しておいてください。


 次のように kernel以下に移動してパッチを適用します。


 MSM向けパッチをそのまま利用することから、実行中にいくつか Hunkとエラーが出でますが


 次項のパッチにて補填していますので気にせず進めてください。



 $ cd $MYWORK/kernel
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-d7784832481a3d13e8f919db7eabc402696998e1.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-ead002dbe5a670536874d4cf2b4c73cbbc426157.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-5d9d8625e39f815673dedea353f39edccabb1fac.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-4aaac2e5495f5bde877c0221fb3a8afacbf5d3d3.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-9cf8b58077c7bfaeb91d3cd111775ca556879c8c.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-6f992b5fa6b9e20a406df75c52e212927b51e868.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-64bef932a63b68eb5a64d07364150ffdfba133c8.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-148b63e6082d35d9a5ec0f156d76ca40a4278044.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-3cb34390dbf3d219c823638a9ff835ae555cce48.patch


 なお同パッチのうち次のパッチは使用しません


 msm.git-768b24639b4dfd527928ea7ff5ce5b7cabb15a80.patch


  usb: gadget: Fixed Android gadget function discovery & product matching


 <これはすでに適用済み>


 msm.git-3ac4a31f2d603d6dabc50fe9e2fa4ebd4e7a4e59.patch


 msm.git-52630a39c5c9348381cec1b623def97f948f4df9.patch


 これはMSM固有であるため次項4-2のパッチを使用します。


4.2. BeagleBoardパッチ


前項のMSM-Accessoryパッチで不足しているパッチを適用します。



 $ cd $MYWORK/kernel
 $ patch -p1 < ~/ADK_Patches/beagleboard/beagleboard_kernel.patch
 $ cd $MYWORK/device
 $ patch -p1 < ~/ADK_Patches/beagleboard/beaglebard_device.patch


 このパッチでは次の内容を修正しています


  a) accessory gadgetドライバをビルド対象にするための Makefile設定


  b) usb compositeドライバで使用される USBディスクリプタテーブルの追加


  c) rowboatカーネルでは USBインターフェイスが1つしか登録できないことから


   複数のインターフェイスが登録できるように修正


 d) カーネルのコンフィグレーションファイルに accessory gadgetを追加


  e) Android Accessoryサービスが有効になるようxmlファイルを修正


 f) Android Accessory関連ファイルがAndroid FSにインストールされるよう設定ファイルを追加





5.ビルド


 ビルド作業はMLO,u-boot,AndroidFSの順に進めていきます。


5.1 x-loader


 OMAP3の1次ローダであるMLO(x-loader)は次のようにビルドします



 $ cd $MYWORK/x-loader
 $ export CROSS_COMPILE=$MYWORK/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
 $ make distclean
 $ make omap3beagle_config
 $ make


 なお出来上がったx-loader.binは”SecureOMAPの署名が付いていません


 BeagleBoardはSecureOMAPの署名は必要ありませんが念のため付加しておきます。


 署名に必要なsignGP コマンドは次のように入手します



 $ wget http://beagleboard.googlecode.com/files/signGP
 $ chmod +x signGP


 signGPコマンドが入手できたら次のコマンドで署名付きにします



 $ ./signGP x-load.bin
 $ mv x-load.bin.ift MLO


5.2 u-boot


 OMAP3の2次ローダーであるubootは次のようにビルドします



 $ cd $MYWORK/u-boot
 $ export CROSS_COMPILE=$MYWORK/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
 $ make distclean
 $ make omap3_beagle_config
 $ make


 次項のカーネルのビルド時に本項でビルド生成したmkimageが必要となりますので


 ~/binにコピーしておきます



 $ cp tools/mkimage ~/bin


5.3 Andorid FS


 今回使用しているコードではLinuxカーネル、Andorid、SGXをまとめてビルドすることができます


 BeagleBoard-xMはAM37xxを搭載しているので環境変数 "OMAPES"に "5.x"を使用します。


 なお、本来GingerBreadは64ビット環境でしかビルドすることができませんが


 rowboat版では64ビットコンパイルオプションを設定をコメントアウトしてあることから


 32ビット環境でもビルドすることができます。



 $ cd $MYWORK
 $ make TARGET_PRODUCT=beagleboard -j8 OMAPES=5.x


 Installation complete! と表示されればビルド完了です。


 5.3-1 カーネル再コンパイル


  カーネルだけ再ビルドしたいときには次のコマンドを使用します



 $ cd $MYWORK
 $ export ARCH=arm
 $ export CROSS_COMPILE=$MYWORK/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
 $ make -C kernel uImage





6.SDカードイメージを作成


 生成されたバイナリをインストール用にアーカイブします



 $ cd $MYWORK/out/target/product/beagleboard
 $ mkdir android_rootfs
 $ cp -r root/* android_rootfs
 $ cp -r system android_rootfs
 $ sudo ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs \
. rootfs rootfs.tar.bz2





7.SDカードへのインストール


 7.1 ブートスクリプトの作成


 BeagleBoard-xMではカーネルに起動パラメータを渡すためにブートスクリプトが必要となります


 ブートスクリプトは次の方法にて生成することができます



 $ cd $MYWORK
 $ cp ~/ADK_Patches/beagleboard/boot.script .
 $ $MYWORK/u-boot/tools/mkimage -A arm -O Linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null


 ここで使用しているテンプレートではDVI出力に 1280x720で表示するように設定しています


 これ以外の表示設定をしたい場合はパラメータを書き換えてスクリプトを再生成してください


7.2 SDカードのフォーマット


 SDカードから起動するためにはSDカードをパーテション分割しフォーマットする必要があります


 次のコマンドでSDカードをフォーマットを行います


 ここではUSB接続されたSDカードリーダが「/dev/sdb」として認識されているものとして記述しています


 もし別のデバイス名として認識されている場合は、この部分を読み替えて実行するようにしてください。



 $ sudo ~/ADK_Patches/omap3-mkcard.sh /dev/sdb


 このomap3-mkcard.shでは SDカードを2分割し第1パーテーションをvfat、第2パーテションをext3で


 フォーマットしています


7.3 バイナリのインストール


 SDカードの第1領域にブートローダ、カーネルをインストール、第2領域にAndorid FSをインストールします。


 インストールは MLO, uboot.bin, boot.scr, uImageの順にコピーする必要があります



 $ sudo mount /dev/sdb1 /mnt
 $ sudo cp $MYWORK/x-loader/MLO /mnt/
 $ sudo cp $MYWORK/u-boot/u-boot.bin /mnt/
 $ sudo cp $MYWORK/boot.scr /mnt/
 $ sudo cp $MYWORK/kernel/arch/arm/boot/uImage /mnt/
 $ sudo umount /mnt
 $ sudo mount /dev/sdb2 /mnt
 $ cd /mnt
 $ sudo tar xvjf $MYWORK/out/target/product/beagleboard/rootfs.tar.bz2
 $ cd /
 $ sudo umount /mnt





8.BeagleBoard-xMでの起動


 SDカードをBeagleBoard-xMに装着し、電源を投入します


 なおAndroidが起動するまで数分かかります


 また初回起動の際にはホーム画面が出てもしばらくの間はバックグランドでインストールが


 続いていることから多少動作レスポンスが遅くなりますが、次回起動時には通常となります。


9.ADKボードの接続


 もしDemoKitが書き込まれたADKボードがあれば、USBポート(ADB用の小さいほう)に接続すると


 次のような画面が出るはずです。


f:id:bs-android:20110829225747j:image:w640





 ADKボードの使い方については次回解説する予定です。


技術部 中村和貴





BeagleBoard-xMとADK(Android Open Accessory Development Kit)



f:id:bs-android:20110829225748j:image:w640


今年5月にgoogleから発表されたAndroid Open Accessoryについて


面白い試みであったことから話題になっておりましたが、


しかし発表当初はNexusシリーズしか使用できず対応ボードも少ないことから


用途も限定されておりました。


最近になって組み込みの定番のBeagleBoardやADK互換ボードも潤沢に手に入るように


なってきましたのでGingerBreadとADKを載せる方法についてレポートいたします。


なお必要な作業全部を一気にやろうとすると息切れしてしまいそうな量になりますことから


これから3回に分けてBeagleBoardへのADK移植方法とFarmboxでの事例について記載して


いきたいと思います。


1回目 BeagleBoard-xMにGingerBread(2.3.4)とADKを移植


2回目 ADK-demoボードの使用方法


3回目 無線LANとWebカメラを追加しFarmboxのプラットフォームとする








○1回目 BeagleBoard-xMにGingerBreadとADKを移植


 まず1回目としてBeagleBoardでGingerBreadが動作させられるようにします。



☆ADKには2.6.35以降のカーネルと2.3.4r1のGingerBreadが必要


 既にいくつかのコミュニティにてGingerBreadを動作させている事例が出ておりますが


 ADKを使用するためには次の要件を満たす必要があることから2.6.35以降のカーネルと


 GingerBread(2.3.4r1)以降のコードが必要となります。


  1) USB compositeデバイスドライバ


  2) Android Accessory Service


 ちょうど7月にTIからこれらの要件を満たした新しいBSPがリリースされましたことから


 今回はこのBSPのオープンソース版を利用することにしました。





1.開発マシンのセッティング


 今回こちらでは次の環境で作業を行いました。


  Ubuntu 10.10 (32bit版)


  Oracle VirtualBox 4.0.10


 なお GingerBreadでは64bitビルド環境が必要とされていますが、今回使用するソースコードでは


 32bit版でもビルド可能なようになっておりますことから、作業は32bit版で行っています。


 また作業の都合で仮想環境を用いておりますが、こちらは必須ではありません。


 


 1-1. 必要なパッケージのインストール


 Android開発で必要なパッケージをインストールします。



 $ sudo apt-get install git-core flex bison gperf libesd0-dev libwxgtk2.6-dev zlib1g-dev build-essential libstdc++5 tofrodos
 $ sudo apt-get install x-dev libx11-dev libncurses5-dev


 Ubuntu 10.10においてJAVA-JDKがインストールすることができない場合は


 手動でrepositoryを追加してからインストールします



 $ sudo add-apt-repository ppa:sun-java-community-team/sun-java6
 $ sudo apt-get update
 $ sudo apt-get install sun-java6-jdk
 $ sudo update-java-alternative -s java-6-sun


 次にソースコード取得に必要なrepoを ~/bin以下にダウンロードします。



 $ mkdir ~/bin
 $ curl http://android.git.kernel.org/repo >~/bin/repo
 $ chmod a+x ~/bin/repo





2.作業ディレクトリの作成と環境設定


 今回は作業ディレクトリとして ~/rowboat-gingerbread を使用するようにします。


 ディレクトリ名は自由に変更してもかまいません。


 また作成したディレクトリを環境変数MYWORKに設定します。



 $ mkdir ~/rowboat-gingerbread
 $ export MYWORK=~/rowboat-gingerbread
 $ export PATH=~/bin:$PATH





3.ソースコードの取得


 BeagleBoard用のGingerBreadはrowboatプロジェクトにて公開されているものを利用します。


 OMAP3対応のkernel-2.6.37とGingerBread-2.3.4r1が既にマージされていることから


 Android本体とカーネルはこれをそのまま使用することができます。


3-1.まずダウンロードの前に次のrepo設定を行います



 $ cd $MYWORK
 $ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-GingerBread-2.3.4-DevKit-2.1.xml


 途中メールアドレス入力を要求されますが適当なメアドでもかまいません。


3-2.ソースコードのダウンロード


 repo設定が成功したらソースコードのダウンロードを行います。


 次のコマンドラインを実行するとダウンロードが開始されます、接続先のサーバー速度の関係で数時間ぐらい


 待たされることがあります。



 $ repo sync


 またごくまれですが接続先サーバーがダウンしていてダウンロードが失敗することがあります、


 この場合は再実行するようにしてください。





4.各種パッチの適用


 ソースコードの取得が終わったらADK関連のパッチを当てます。


4-1. MSM-Accessoryパッチ


 ADKのコードはMSM(Qualcomチップ)向けに作られて公開されています。


  http://android.git.kernel.org/?p=kernel/msm.git;a=shortlog


 今回は上記サイトから取得した差分を利用するようにしています。


 こちらにアーカイブしてありますので ~/ 以下に展開しておいてください。


 次のように kernel以下に移動してパッチを適用します。


 MSM向けパッチをそのまま利用することから、実行中にいくつか Hunkとエラーが出でますが


 次項のパッチにて補填していますので気にせず進めてください。



 $ cd $MYWORK/kernel
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-d7784832481a3d13e8f919db7eabc402696998e1.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-ead002dbe5a670536874d4cf2b4c73cbbc426157.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-5d9d8625e39f815673dedea353f39edccabb1fac.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-4aaac2e5495f5bde877c0221fb3a8afacbf5d3d3.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-9cf8b58077c7bfaeb91d3cd111775ca556879c8c.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-6f992b5fa6b9e20a406df75c52e212927b51e868.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-64bef932a63b68eb5a64d07364150ffdfba133c8.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-148b63e6082d35d9a5ec0f156d76ca40a4278044.patch
 $ patch -p1 < ~/ADK_Patches/msm_patches/msm.git-3cb34390dbf3d219c823638a9ff835ae555cce48.patch


 なお同パッチのうち次のパッチは使用しません


 msm.git-768b24639b4dfd527928ea7ff5ce5b7cabb15a80.patch


  usb: gadget: Fixed Android gadget function discovery & product matching


 <これはすでに適用済み>


 msm.git-3ac4a31f2d603d6dabc50fe9e2fa4ebd4e7a4e59.patch


 msm.git-52630a39c5c9348381cec1b623def97f948f4df9.patch


 これはMSM固有であるため次項4-2のパッチを使用します。


4.2. BeagleBoardパッチ


前項のMSM-Accessoryパッチで不足しているパッチを適用します。



 $ cd $MYWORK/kernel
 $ patch -p1 < ~/ADK_Patches/beagleboard/beagleboard_kernel.patch
 $ cd $MYWORK/device
 $ patch -p1 < ~/ADK_Patches/beagleboard/beaglebard_device.patch


 このパッチでは次の内容を修正しています


  a) accessory gadgetドライバをビルド対象にするための Makefile設定


  b) usb compositeドライバで使用される USBディスクリプタテーブルの追加


  c) rowboatカーネルでは USBインターフェイスが1つしか登録できないことから


   複数のインターフェイスが登録できるように修正


 d) カーネルのコンフィグレーションファイルに accessory gadgetを追加


  e) Android Accessoryサービスが有効になるようxmlファイルを修正


 f) Android Accessory関連ファイルがAndroid FSにインストールされるよう設定ファイルを追加





5.ビルド


 ビルド作業はMLO,u-boot,AndroidFSの順に進めていきます。


5.1 x-loader


 OMAP3の1次ローダであるMLO(x-loader)は次のようにビルドします



 $ cd $MYWORK/x-loader
 $ export CROSS_COMPILE=$MYWORK/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
 $ make distclean
 $ make omap3beagle_config
 $ make


 なお出来上がったx-loader.binは”SecureOMAPの署名が付いていません


 BeagleBoardはSecureOMAPの署名は必要ありませんが念のため付加しておきます。


 署名に必要なsignGP コマンドは次のように入手します



 $ wget http://beagleboard.googlecode.com/files/signGP
 $ chmod +x signGP


 signGPコマンドが入手できたら次のコマンドで署名付きにします



 $ ./signGP x-load.bin
 $ mv x-load.bin.ift MLO


5.2 u-boot


 OMAP3の2次ローダーであるubootは次のようにビルドします



 $ cd $MYWORK/u-boot
 $ export CROSS_COMPILE=$MYWORK/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
 $ make distclean
 $ make omap3_beagle_config
 $ make


 次項のカーネルのビルド時に本項でビルド生成したmkimageが必要となりますので


 ~/binにコピーしておきます



 $ cp tools/mkimage ~/bin


5.3 Andorid FS


 今回使用しているコードではLinuxカーネル、Andorid、SGXをまとめてビルドすることができます


 BeagleBoard-xMはAM37xxを搭載しているので環境変数 "OMAPES"に "5.x"を使用します。


 なお、本来GingerBreadは64ビット環境でしかビルドすることができませんが


 rowboat版では64ビットコンパイルオプションを設定をコメントアウトしてあることから


 32ビット環境でもビルドすることができます。



 $ cd $MYWORK
 $ make TARGET_PRODUCT=beagleboard -j8 OMAPES=5.x


 Installation complete! と表示されればビルド完了です。


 5.3-1 カーネル再コンパイル


  カーネルだけ再ビルドしたいときには次のコマンドを使用します



 $ cd $MYWORK
 $ export ARCH=arm
 $ export CROSS_COMPILE=$MYWORK/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
 $ make -C kernel uImage





6.SDカードイメージを作成


 生成されたバイナリをインストール用にアーカイブします



 $ cd $MYWORK/out/target/product/beagleboard
 $ mkdir android_rootfs
 $ cp -r root/* android_rootfs
 $ cp -r system android_rootfs
 $ sudo ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs \
. rootfs rootfs.tar.bz2





7.SDカードへのインストール


 7.1 ブートスクリプトの作成


 BeagleBoard-xMではカーネルに起動パラメータを渡すためにブートスクリプトが必要となります


 ブートスクリプトは次の方法にて生成することができます



 $ cd $MYWORK
 $ cp ~/ADK_Patches/beagleboard/boot.script .
 $ $MYWORK/u-boot/tools/mkimage -A arm -O Linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null


 ここで使用しているテンプレートではDVI出力に 1280x720で表示するように設定しています


 これ以外の表示設定をしたい場合はパラメータを書き換えてスクリプトを再生成してください


7.2 SDカードのフォーマット


 SDカードから起動するためにはSDカードをパーテション分割しフォーマットする必要があります


 次のコマンドでSDカードをフォーマットを行います


 ここではUSB接続されたSDカードリーダが「/dev/sdb」として認識されているものとして記述しています


 もし別のデバイス名として認識されている場合は、この部分を読み替えて実行するようにしてください。



 $ sudo ~/ADK_Patches/omap3-mkcard.sh /dev/sdb


 このomap3-mkcard.shでは SDカードを2分割し第1パーテーションをvfat、第2パーテションをext3で


 フォーマットしています


7.3 バイナリのインストール


 SDカードの第1領域にブートローダ、カーネルをインストール、第2領域にAndorid FSをインストールします。


 インストールは MLO, uboot.bin, boot.scr, uImageの順にコピーする必要があります



 $ sudo mount /dev/sdb1 /mnt
 $ sudo cp $MYWORK/x-loader/MLO /mnt/
 $ sudo cp $MYWORK/u-boot/u-boot.bin /mnt/
 $ sudo cp $MYWORK/boot.scr /mnt/
 $ sudo cp $MYWORK/kernel/arch/arm/boot/uImage /mnt/
 $ sudo umount /mnt
 $ sudo mount /dev/sdb2 /mnt
 $ cd /mnt
 $ sudo tar xvjf $MYWORK/out/target/product/beagleboard/rootfs.tar.bz2
 $ cd /
 $ sudo umount /mnt





8.BeagleBoard-xMでの起動


 SDカードをBeagleBoard-xMに装着し、電源を投入します


 なおAndroidが起動するまで数分かかります


 また初回起動の際にはホーム画面が出てもしばらくの間はバックグランドでインストールが


 続いていることから多少動作レスポンスが遅くなりますが、次回起動時には通常となります。


9.ADKボードの接続


 もしDemoKitが書き込まれたADKボードがあれば、USBポート(ADB用の小さいほう)に接続すると


 次のような画面が出るはずです。


f:id:bs-android:20110829225747j:image:w640





 ADKボードの使い方については次回解説する予定です。


技術部 中村和貴





Related Posts Plugin for WordPress, Blogger...