ラベル BeagleBoard の投稿を表示しています。 すべての投稿を表示
ラベル BeagleBoard の投稿を表示しています。 すべての投稿を表示

2011年1月3日月曜日

基礎から学ぶ組み込みAndroid

3日坊主3日目の隠者でございます。
どうもこのブログ、BeagleBoardで検索にかかって訪れる方々が多いようでして。
そんな方々に書籍のご紹介ということで。


坂本俊之・出村成和・渡辺晶之
「基礎から学ぶ 組み込みAndroid」
(C&R研究所 2011/1/5 初版)

Androidの書籍というとアプリケーション開発関連の書籍が多いのですが、こちらはオタ・・・じゃなかった、組み込みの方向けの書籍です。

目次は、日本Androidの会のMLにも流れたから出しておいてもいいですかねぇ。著者の方から怒られたらごめんなさいして取り下げようかな・・・。
  1. 組み込みAndroidの概要
  2. 組み込み開発に必要な準備
  3. アプリケーション作成の基礎
  4. Android SDKによるハードウェア制御
  5. Android NDKによるアプリケーション作成
  6. Androidのハードウェアへのポーティング
  7. デバイス制御ライブラリの作成
  8. Androidの内部構造
  9. 赤外線を使ったAndroidの制御(ブレッドボードで実装)
  10. Webカメラを使った赤外線カメラ
  11. GPSレシーバーを使った地図の表示
  12. オーディオ出力を使ったロボット制御(半田つけ必要)
  13. WebViewを使ったキオスク端末
といった章立てとなっています。流れ的には、
  • 基礎編
    1. まずは、バイナリを落としてきてxMでAndroidを動かしてみて
    2. アプリの作成方法を学びつつ、SDKでの下回りの使い方、NDKについて学んだ後
    3. xM向けのソースコードの入手、ビルド、SGXドライバの追加という簡単な動かすための手順を学んでみて
    4. GPIOを使うデバイスドライバとNDKからの利用法の基礎を簡潔に学び
  • 応用編
    1. 赤外線受信機をBeagleBoardにつないでアプリまでの流れを追い
    2. Webカメラのつなぎ込み
    3. GPSのつなぎ込む
    4. BeagleBoardで制御する簡単な2輪ロボを作りコントロール
    5. 最後に軽く実務的にどんなことが行われてるのかの紹介?
となっているようです。なお、最後の5番については、実は隠者もまだ読み終わってません。ごめんなさい。それと、実践編については、正月が開けて時間ができたら機材の購入をしてやってみたいなと思ってはいるのですが、年末にかけて軽く読んだ程度で止まってるんですよね。

流れの組み方は非常によい形でできていて、初学者に教えていくのには良い構成ではないでしょうか。順序よく学んでいくのに適している気がします。

注意事項としては、これは、手元の未知のハードウェアへAndroidをポーティングできるようにしようという目的の書籍ではないです。ポーティングの話は、TIの用意したコードを使ってビルドするというレベルの話ですね。

デバイスドライバに関しても最低限書籍を最後までやり遂げるために必要な知識レベルまでです。それはまぁ、デバイスドライバに関する本を真面目に書くと、それだけで1冊になるわけですけど・・・。

それと、この通りうまく進んでいる間は良いのですが、経験則上、この本だけを渡して初心者に勉強させようと思うと、途中で躓くと立ち止まってしまいますね。困った時の辞書的に使う本ではなく、組み込みAndroidレッスン的に使うための書籍だと思います。

ISBN : 978-4-86354-076-7
定価  : 4200円+税

ちょっとお値段は高めですが、小難しい事はさけ、できるだけわかり安く、動かしてみよう!って方向で書かれている良い本です。BeagleBoard-xMを購入して、Androidを動かしかたからよくわからない方や、動かした後の次の一歩をどうしようか悩んでいる方には特におすすめですね。

なお、下記のamazonの画像付きリンクはアフィリエイトのリンクです。うさんくさいアフェリエイトは踏みたくない方は、こちら をどうぞ。




P.S.
Twitterでのこの書籍関係のハッシュタグは、#embandbook のようです。

1/11 編集について: 途中へんな編集をしたまま投稿してたようで、おかしな部分を修正しました。
1/11 追記 : 著者の一人が、そのうち横浜PF部に遊びに来て下さるそうなので、その時サインペンと一緒に本を渡すと、サインもらえるかと思います。

2010年11月25日木曜日

BeagleBoard-xMのAndroid起動microSDのパーティションをSD Cardとして認識させる

昨日のベンチマークの引き続きのためにmicroSDを探して部屋中ひっかきまわしていた隠者です。こんばんは。いやぁ・・・・みつかりませんでした。これは買わないとだめかな。

さて、そのようなわけで、今夜はベンチマークの続きではなく、中間でちょっと小技をひとつ。@himamuraさんが集めてるベンチマークを行うソフトの0xBenchmarkは、SD Cardが挿入されてると実行結果をテキストとXMLとに残してくれます。

ところが、beagleBoar-xMには、NORやNANDはありません。そのためAndroidの起動ディスクとしてmicroSDを使う事になります。

少しサイズの大きめなmicroSDカードを用意して、起動ディスクの他、SDカードとしても認識させてしまいましょう。

fdiskを使ってコマンドベースで起動用にmicroSDを設定し直す方法は、@pakuqi さんがブログにまとめて下さっています。
さて、この手順の中で領域を切るときに、64MBをMLO,u-boot,kernel用のFAT32領域、残りをすべてユーザーランド用にext3にされています。
が、例えば4GBのmicroSDなら、ユーザーランドとしてext3にするのは、2GB程度として、残りはすべてSDカード領域用にFAT32にして下さい。

え?手順?fdiskにはヘルプもあるし古くから使われているので、Google先生に聞いてもいいでしょう。僕はPF部の他の方々のようには優しくはなく、手取り足取り書き記す気はありませんのであしからず。

パーティションとしては
  1. FAT32 64MB (起動用)
  2. EXT3   2GB   (ユーザーランド用)
  3. FAT32 残りすべて (SD CARD領域)
という形にします。基本領域3もmkfs.vfatで初期化して下さい。

その後、ユーザーランドの /system/etc/vold.fstab に以下のような設定を追記します。


dev_mount sdcard /sdcard 3 /devices/platform/mmci-omap-hs.0 /devices/platform/mmci-omap-hs.0/mmc_host/mmc0

この設定でパーティション3をSDカードの領域として認識してマウントしてくれるはずです。お試しください。

2010年11月24日水曜日

BeagleBoard-xMのベンチマーク結果

大変長いことご無沙汰しておりました、hermit4です。
ネタは色々尽きないもののなかなか時間が取れませんで。全然更新されてないじゃんって怒られたので、 @himamura さんにPF部でお願いされていた、Beagle Board-XMのAndroidでのベンチマークを実施しました。

ちなみに、@himamura さんは、色々なデバイスをベンチマークとって下さりまとめてくださってます。
なお、今回の環境は、@sola_dolphin_1さんのfroyoを動かしやすいようにgithubにいれてくださって手順もまとめてくださっているので、基本的にそちらの手順に従って作成したものです(一部スクリプト部分については、手作業でやってますけど)。

使用したmicroSDは、SanDiskのものですが、残念ながら低速なclass 2の品です。いや、どこかに早いやつを数枚確保してあったはずなのですが、どのダンボールにしまってしまったのか発見できず・・・・・今夜家に帰って探しだせたら、ついでなのでそれぞれでベンチマーク比較してみたいなぁと思います。

結果は以下のとおりです。面倒なのでテキストをそのまま貼り付けます。XMLはグーグルドキュメントに置いてhimamuraさんにD飛ばしておいたので、近いうちにhimamuraさんの表に反映してもらえるかなぁとか思ってます。

Linpackの結果はあまり芳しくないように見えます。SGXを入れると描画周りでは改善が見られますけど・・・・これは満足出来る結果と言い切れるかどうか。

・TI's Android SGX SDKなし
============================================================

Linpack
------------------------------------------------------------
Mflops/s :9.437201527000578
Norm Res :1.7100673392687894E14
Precision:2.220446049250313E-16
============================================================
Scimark2
------------------------------------------------------------
Composite:
  13.017866789720463
Fast Fourier Transform:
  8.362614298864644
Jacobi Successive Over-relaxation:
  22.74927993955477
Monte Carlo integration:
  3.5335332771692993
Sparse matrix multiply:
  11.804034582132472
dense LU matrix factorization:
  18.63987185088113
============================================================
Draw Canvas
------------------------------------------------------------
Round 0 fps = 26.645351
Round 1 fps = 26.534584
Round 2 fps = 26.586315
Average: fps = 26.0
============================================================
Draw Circle
------------------------------------------------------------
Round 0: fps = 17.958694
Round 1: fps = 18.061409
Round 2: fps = 17.919006
Average: fps = 17.333334
============================================================
Draw Circle2
------------------------------------------------------------
Round 0: fps = 27.795794
Round 1: fps = 28.506271
Average: fps = 27.5
============================================================
Draw Rect
------------------------------------------------------------
Round 0: fps = 16.717749
Round 1: fps = 17.554125
Round 2: fps = 16.478989
Average: fps = 16.333334
============================================================
Draw Arc
------------------------------------------------------------
Round 0: fps = 23.337223
Round 1: fps = 23.331778
Average: fps = 23.0
============================================================
Draw Image
------------------------------------------------------------
Round 0: fps = 25.04759
Round 1: fps = 25.046337
Average: fps = 25.0
============================================================
Draw Text
------------------------------------------------------------
Round 0: fps = 21.483816
Round 1: fps = 21.457693
Round 2: fps = 21.217909
Average: fps = 21.0
==================OpenGL Cube
------------------------------------------------------------
Round 0: fps = 29.707972
Round 1: fps = 29.665668
Round 2: fps = 29.6349
Average: fps = 29.0
============================================================
OpenGL Blending
------------------------------------------------------------
Round 0: fps = 13.765573
Round 1: fps = 13.761972
Average: fps = 13.763773
============================================================
OpenGL Fog
------------------------------------------------------------
Round 0: fps = 14.064105
Round 1: fps = 14.110342
Average: fps = 14.087223
============================================================
Flying Teapot
------------------------------------------------------------
Round 0: fps = 24.663345
Round 1: fps = 23.784607
Average: fps = 24.223976
============================================================
Garbage Collection
------------------------------------------------------------
Stretching memory:
    binary tree of depth 16
*Total memory:4071392 bytes
*Free  memory:1238152 bytes


Creating:
    long-lived binary tree of depth 14
    long-lived array of 125000 doubles
*Total memory:7479264 bytes
*Free  memory:2709896 bytes


Create 37448 trees of depth 2
- Top down: 948msecs
- Bottom up: 984msecs
Create 8456 trees of depth 4
- Top down: 1015msecs
- Bottom up: 987msecs
Create 2064 trees of depth 6
- Top down: 1015msecs
- Bottom up: 930msecs
Create 512 trees of depth 8
- Top down: 950msecs
- Bottom up: 985msecs
*Total memory:7479264 bytes
*Free  memory:2212904 bytes


Completed in 8992ms.
=========================================



・TI's Android SGX SDKあり

============================================================
Linpack
------------------------------------------------------------
Mflops/s :9.300885244349358
Norm Res :1.7100673392687894E14
Precision:2.220446049250313E-16
============================================================
Scimark2
------------------------------------------------------------
Composite:
  12.901394988451766
Fast Fourier Transform:
  8.276270877619176
Jacobi Successive Over-relaxation:
  23.01006648834552
Monte Carlo integration:
  3.5054776431257824
Sparse matrix multiply:
  11.034482758620722
dense LU matrix factorization:
  18.680677174547643
============================================================
Draw Canvas
------------------------------------------------------------
Round 0 fps = 60.950832
Round 1 fps = 61.000404
Round 2 fps = 61.27451
Average: fps = 60.666668
============================================================
Draw Circle
------------------------------------------------------------
Round 0: fps = 26.071087
Round 1: fps = 26.399155
Round 2: fps = 26.403801
Average: fps = 26.0
============================================================
Draw Circle2
------------------------------------------------------------
Round 0: fps = 55.126793
Round 1: fps = 55.370983
Average: fps = 55.0
============================================================
Draw Rect
------------------------------------------------------------
Round 0: fps = 22.381378
Round 1: fps = 23.085802
Round 2: fps = 24.789291
Average: fps = 23.0
============================================================
Draw Arc
------------------------------------------------------------
Round 0: fps = 39.1604
Round 1: fps = 38.898396
Average: fps = 38.5
============================================================
Draw Image
------------------------------------------------------------
Round 0: fps = 42.448425
Round 1: fps = 42.21547
Average: fps = 42.0
============================================================
Draw Text
------------------------------------------------------------
Round 0: fps = 33.564556
Round 1: fps = 33.26311
Round 2: fps = 33.59839
Average: fps = 33.0
============================================================
Linpack
------------------------------------------------------------
Mflops/s :9.300885244349358
Norm Res :1.7100673392687894E14
Precision:2.220446049250313E-16
============================================================
Scimark2
------------------------------------------------------------
Composite:
  12.901394988451766
Fast Fourier Transform:
  8.276270877619176
Jacobi Successive Over-relaxation:
  23.01006648834552
Monte Carlo integration:
  3.5054776431257824
Sparse matrix multiply:
  11.034482758620722
dense LU matrix factorization:
  18.680677174547643
============================================================
Draw Canvas
------------------------------------------------------------
Round 0 fps = 60.950832
Round 1 fps = 61.000404
Round 2 fps = 61.27451
Average: fps = 60.666668
============================================================
Draw Circle
------------------------------------------------------------
Round 0: fps = 26.071087
Round 1: fps = 26.399155
Round 2: fps = 26.403801
Average: fps = 26.0
============================================================
Draw Circle2
------------------------------------------------------------
Round 0: fps = 55.126793
Round 1: fps = 55.370983
Average: fps = 55.0
============================================================
Draw Rect
------------------------------------------------------------
Round 0: fps = 22.381378
Round 1: fps = 23.085802
Round 2: fps = 24.789291
Average: fps = 23.0
============================================================
Draw Arc
------------------------------------------------------------
Round 0: fps = 39.1604
Round 1: fps = 38.898396
Average: fps = 38.5
============================================================
Draw Image
------------------------------------------------------------
Round 0: fps = 42.448425
Round 1: fps = 42.21547
Average: fps = 42.0
============================================================
Draw Text
------------------------------------------------------------
Round 0: fps = 33.564556
Round 1: fps = 33.26311
Round 2: fps = 33.59839
Average: fps = 33.0


2010/12/06 追記
暇村村長さんの日記が現在トラブルで表示できないようなので、BeagleBoardだけ表にしておきます。
設定 Android 2.2
SGX Driver
Android 2.2
Linpack
Mflops
9.30 9.43
Compo
site
12.90 13.02
FFT 8.28 8.36
SOR 23.01 22.75
Monte
Carlo
3.51 3.53
Sparse
Mult
11.03 11.80
LU 18.68 18.64
Draw Canvas 60.67 26.00
Circle 26.00 17.33
Circle2 55.00 27.50
Rect 23.00 16.33
Arc 38.50 23.00
Image 42.00 25.00
Text 33.00 21.00
Cube 60.00 29.00
OpenGL Blending 65.74 13.79
Fog 65.60 14.09
Flying
Teapod
60.60 24.22
Gabage
Collection
8961.00 8992.00

2010年9月1日水曜日

Beagle Board-xMについて調べ中なう

(9月に入って憂鬱な隠者でございます。
いや、そろそろいろいろ決着をつけなければならない問題が積まれている状態でして。

というわけで、現実逃避がてら、BeagleBoard-xMを調べてみてたりします。
まぁ、Androidを動かすというミッションは、既にsolaさんが情報公開してくださってますので、僕はのんびりと、マニュアルを眺めるところから。


システムマニュアルは、BeagleBoard Hardware Design から、入手ができます。
マニュアルのIntroductionには

The processor used on the BeagleBoard-xM is compatible with several Cortex A8 processors manufactured by Texas Instruments. Currently, the processor is a DM3730 processor, which has yet to be announced by Texas Instruments. The only documentation that is available is the AM3715. The key difference between the AM3715 and the DM3730, is that the DSP is not included on the AM3715.
と書かれています。というわけで、CPUはAM3751にDSPが含まれているDM3730ですね。マニュアル中にはまだアナウンスされていないとなっていますが、本日の時点で、既にTIのサイトでは、Activeになってます。

まぁ、僕と同じく組込み系の経験が浅いアプリ屋だと、 DSPってなんぞやとか思うわけですが、デジタルシグナルプロセッサ (Digital Signal Processor)といって、デジタル信号処理に特化したマイクロプロセッサで、画像処理とか動画のエンコード、デコードといった処理をこちらで行うことで高速に処理することができるようになるという代物です。これが付いていると出来る事の可能性が広がります。

PMIC(電源管理)用のチップとしては、TPS65950が載っているようです。

TIのWebを見ると統合パワー・マネージメント IC、3 DC/DC、11 LDO、オーディオ・コーデック、USB HS トランシーバ、チャージャー内蔵って書いてます。電源管理とオーディオコーデックはこちらのチップの役割のようです。


Beagle Board-xMには、残念ながらNORもNANDもありません。
DM3730には、GPMC Busという外部メモリコントローラのバスがあるのですが、マニュアルを見ると
8.10.3 GPMC Bus
The GPMC bus is not accessible on the BeagleBoard. Its connectivity is limited to the POP memory access on the top of the processor and therefore is only accessible by the NAND memory.
The memory on the GPMC bus is NAND and therefore will support the classical NAND interface. The address of the memory space is programmable.
ということで、使えないようです。こっそりNORを付けてu-bootまでは高速起動できないだろうかとか思ってたので残念です。

ま、そのようなわけで、BeagleBoard-xM君を起動すると
  1. BootRomが最低限の初期化を行ない、microSD Powerの設定をTPS65950へ行う
  2. BootRomはその後、GPMC(xM君は利用なし),MMC1(microSDが接続)の順に検索しMLOをさがす
  3. MLOからX-Loaderが起動。u-boot.binをメモリに展開
  4. u-bootが起動し、uImageを読み込む・・・
    といった流れで起動するようです(*1)。詳しいことはまだわかってませんけど、MLOというのは、どうやらBootRomが理解できるような署名を付けた X-Loader でしょうか。

    なおxMに付属のmicroSDに入ってる中身と、その起動の様子は先日のエントリーを参照してください。

    ところで、Power Connectorの項目を見ると
    5.16 Power Connector
    Power will be supplied via the USB OTG connector and if a need arises for additional power, such as when a board is added to the expansion connectors, a larger wall supply 5V can be plugged into the optional power jack. When the wall supply is plugged in, it will remove the power path from the USB connector and will be the power source for the whole board. The power supply is not provided with the BeagleBoard.
    と書かれています。つまり、電源の供給は、USB OTGを接続すればできるってことですねぇ。電力食うようなボードを追加しなければ、USB供給で動くんですか。知らなかった。もしかして、古いBeagle Boardもできたんでしょうか。

    ちなみに、Beagle Boardのマニュアルは164ページ。CPUのリファレンスマニュアルは3642ページ。もちろん英語です。全部読むつもりなら結構な覚悟が必要そうですよね。
    とりあえず、せっかくなので、僕はしらばくu-bootのコードを追いかけながら、この石について少し勉強しといてみたいなぁとか思ってたりします。



    2010年8月31日火曜日

    BeagleBoard-xM届きました

    万年金欠どころか、最近では借金まみれとも噂される隠者でございます。
    組込みと呼ばれる業界の難しいところは、勉強のためにハードウェアを購入しないとならないことですよね。おかげさまでいつもお財布が悲鳴を上げています。

    まぁ、そんなわけで仕入れた、期待の新星 BeagleBoard-xM。この性能でこのお値段はびっくりですよね。


    左側が、BeagleBoard RevCで、右側がBeagleBoard-xMのA2です。
    ちょっとサイズが大きくなりました。


    USBが4つに、そして待望のEthernetが追加されてます。



    USB OTG portはBeagleBoardからかわりないですが、以前はピンコネクタのみだったシリアルポートが今回はボードに直付けされてます。これは便利です。はい。


    音声の出力とVideoは、前回同様のようです。DVD-D(HDMI)がついてますね。


    JTAG pinも以前と同じですが、今回はカメラ用のピンコネクタがついてます。その右上にちっちゃくあるのはGNDピンですね。今回は豪勢にピンやコネクタが付きまくりです。裏面はというと


    ついてます。右上にLCD関連ピンコネクタ。その下はExpansionコネクタです。Power,McBSP,I2C,MMC2,UART,McSPI,GPIO,PWMがここにでているようです。
    ちょっと見づらいですが、左上にあるのが、Micro SDのスロットで、その右にこっそり4pin分のMcBSP2 portも出ています。

    その下の方にあるのは、Auxiliary Access Headerで、MMC3, GPIO,ADC,HDQとマニュアルに記載されてます。
    Beagle Boardよりも色々用意されているようです。しかもコネクタまで実装してくれている豪勢さ。いやぁ、すばらしいです。

    CPUは、Texas Instruments Cortex A8 1GHz processor
    Memoryは、Micron 4Gb MDDR SDRA(512MB) 200MHz
    今回は、NANDこそ無いものの、かなりリッチな環境になっているのは間違いありません。

    ついでに、今回はmicro SDが付属していました。中身は
    • md5Sum.txt
    • MLO
    • ramdisk.gz
    • ramfs.img
    • u-boot.bin
    • uImage
    • user.scr
    となっています。これ、テスト起動用ディスクですね。
    というわけで、こちらのmicro SDから起動してみました。
    電源投入と同時にシリアルコンソールには色々でましたけど、なんだか起動は遅いです。特に、ramdisk.gzの展開に時間がかかるのか、このファイルの読み込みに結構時間がかかりました。

    以前は、電源を入れてすぐにHDMIから犬の絵が表示されていましたけど、このMicroSDカードには入ってないようです。おかげで、シリアルをつながないと、途中でとまっているのではないかと、かなり不安に感じます。
    こちらは、起動完了後のログイン画面です。


    とりあえず、今週は色々と忙しいので、お遊びができるかどうかちょっと怪しい所なんですが。まぁ、時間があれば、まずはAndroidから動かしてみないとなぁと思ってます。