2011年11月25日金曜日

pandroidにSDカードを認識させる

はい。前回に引き続き小ネタで間を持たせます。

前々回の方法でpandroidが無事動いたところですが、ちょっと動画でも再生させてみようかとUSBメモリなどを挿しても自動では認識してくれません。(手動でmountコマンドを打って認識させることはできますが)
ちょっと役立つ情報をば。

一番簡単な方法は、pandroidのSDカードにストレージとして利用するパーティションを新たに作成することです。
Ubuntuの「Gparted」を使いまして(標準ではインストールされていませんのでapt-get instal gpartedなどで入れておきまして)、
下図のように後方のAndroidのルートファイルシステム領域(Angstromというラベルの領域)を縮小し、空いた領域に新たにFAT32の領域を作成します。(わかりやすくMediaとでもラベルを付けておきましょうか)

こうやってブートさせると、このSDカードの3番目の領域がSDカードとして自動で認識されます。
(※なお、初回の認識時は、この領域はAndroid用にフォーマットされるらしく、中身が消えてしまうようです。)


以上。(本当はもう一個ネタがあったんですが、やっぱりやめとこう)



2011年11月24日木曜日

pandroidでUSB経由のadb方法

pandaboardでAndroidの続きですが、
今回はAndroid開発ではかかせないadbを利用する方法を説明しちゃいます。

pandaboard側の準備

Androidのランチャー画面より「Settings」アプリを開き、
「Applications」→「Development」の『USB debugging』に(チェックが入っていない場合は)チェックをいれます。
(このまえの手順で入れたものには既にチェックが入っている状態でした。が、一旦チェックを外して、もう一度チェックを入れる方が確実かもしれません。)

続いては、Windows XPの場合、Ubuntuの場合を見ていきましょう。

Windows XPの場合
まずは、基本的にAndroid SDKが既にインストール済みであることを前提とします。
(ない場合はこちらを見て入れておきましょう)

追加でパッケージを入れておく必要がありますので、Android SDK Managerを立ち上げます。
この中で、最低限必要なものとしてToolsの『Android SDK Platform-tools』とExtrasの『Google USB Driver package』を(インストールしていない場合は)インストールします。
※Platform-toolsの方にadbが入っています。こちらについては説明略


続いては、Android SDKのインストール先のフォルダ(インストーラーを使って入れた場合には"C:\Program Files\Android\android-sdk"です)の中の「extras」→「google」→「usb_driver」フォルダ下にある『android_winusb.inf』をテキストエディタで開きます。

端末を開きまして"[Google.NTx86]"(64bit版の場合には"[Google.NTamd64]")のセクションに下記の行を追加します。
[Google.NTx86]

; pandaboard
%CompositeAdbInterface%        = USB_Install, USB\VID_0451&PID_d102&MI_01
上書き保存して閉じます。

miniUSBケーブルでPCと接続します。これで「新しいハードウェアの接続ウィザード」が起動するはずです。
ドライバの場所選択にて、手動で先ほどのフォルダ(C:\Program Files\Android\android-sdk\extras\google\usb_driver)を選択して探索をかければADB用のドライバインストールされます。
(インストール後、再起動を求められる場合は再起動をしましょう。)

これでもう一度USBを抜き差しすれば、adbで接続できるようになっているはずです。


Ubuntu(10.04で確認)の場合
Android SDKにてWindowsの場合と同様に『Android SDK Platform-tools』を追加でインストールしておきます。(『Google USB Driver package』はWindows用のドライバであるためインストールは不要)

udevのルールファイルを新たに作成します。
$ sudo vi /etc/udev/rules.d/51-android.rules
(下記一行を追記して上書き保存)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d102", MODE="0666"

$ chmod a+rw /etc/udev/rules.d/51-android.rules

これでminiUSBケーブルでPCと接続すればadbでアクセスできるようになるはずです。

ちなみにadb devicesの結果は以下のように表示されます。

$ adb devices
**略**
List of devices attached
686A00011FF00000    device

以上、小ネタでした。(ベンダーIDとプロダクトIDがわかっていれば大体同様の方法でいけます。正規のドライバが用意されている場合そちらを使いましょうw)

2011年11月19日土曜日

pandaboardでAndroidことはじめ

pandaboardをひょいっと渡されたので、ひょいっとAndroidでも動かしてみましょうかね。

さてまずは何をすればいいのでしょうか?
パッケージに書かれている pandaboard.org にアクセスしてみましょうか。
何はともあれ、中央あたりにあるGetting Startedに進んでみましょう。

えーと、必要なものは、
・5Vの電源
・SDカード4GB以上
・USB SerialあるいはSerialケーブル
・Ubuntu 10.04 PC(おそらく64bit版を推奨)
・LANケーブル
・miniAのUSBケーブル
・DVIまたはHDMIケーブルと、それに繋がるモニタ
・USBキーボードとUSBマウス

準備できたら(一部なくてもOK)、お次は omappedia.org
色々ありますが、とりあえず pandaboard のリンクを踏みます

めざすは、もちろんAndroidだ(下の方にスクロールして)
あー、手っ取り早く動かしたいのでカンで Project Release

一番新しいのは L27.12.1-P2_Gingerbread_pandroid_rls_v2 ですな。
ダウンロードして解凍してみると、どうやらプリビルド済みのものみたいですね

これをどう使うのかということですが、一つ前に戻り Getting Started に行ってみましょう
つづいて latest release notes を見ることにしましょう

どうやらソースコードの入手方法とビルド手順がかかれているようですね。
ここは後まわしでいいとして、Booting Kernel and Android from SD に飛びましょう

SDカードをUbuntuのPCに挿してフォーマットを行なうようです。
手順の初めからfdiskコマンドでやってみてもいいですが、これを一度に実行できるスクリプトが用意されていますので、こちらを利用するほうが楽々です。

$ wget http://cgit.openembedded.org/cgit.cgi/openembedded/plain/contrib/angstrom/omap3-mkcard.sh
$ chmod a+x omap3-mkcard.sh
(SDカードを挿して認識させ(/dev/sdbとして認識されるとして)、アンマウントした状態にて)
$ sudo ./omap3-mkcard.sh /dev/sdb
シェルプロンプトが戻ってくるまでしばし待ちましょう
これで、"boot"という70MB程のFatパーティションが先頭に、残りは"Angstrom"というext3のパーティションができあがります
途中でエラーが出る場合(予め複数のパーティションがあった場合など)には、一旦gpartedなどで全て消去し、Fat32の一つのパーティションにしておいてから実行すると良いみたいです。

出来上がったら一旦SDカードを抜き差ししてやると自動でマウントされてファイルマネージャーで表示されるんじゃないかと思います。
後は先ほどダウンロードして解凍したプロジェクトリリースの中身をSDカードに書き込むだけです。

$ cd L27.12.1-P2-pandroid_v2
$ ls
boot gfx_license.txt myfs patches powervr_ddk_install.log wlan_license.txt
(bootをbootパーティションに、myfsをAngstromパーティションにコピーしてやりましょう)
$ sudo cp boot/* /media/boot/
$ sudo cp -r myfs/* /media/Angstrom/
(アクセス可能なようにパーミッションを777にする必要があるようです。)
$ sudo chmod -R 777 /media/Angstrom/*
SDカードをアンマウントしてUbuntuから取り外し、pandaboardに挿しましょう。
(アンマウントするときに書き込み完了の処理のため、しばらく時間がかかる場合があります。)

電源を入れる前に、pandaboardをシリアルケーブルでPCと繋ぎましょう。
例えば、Tera Termを使う場合の設定としては、ボーレートを"115200"に変更し、他は多分デフォルトのままでOKと思います。
いちおう設定を載せておきます



そして、いよいよ電源ONです。
ちなみに最低限動かすのに必要と思われる接続はこんな感じ。
・先ほど作成したSDカード
・USBシリアルケーブルでPCと接続。(通信用にTera Term)
・USBキーボードとUSBマウス
・HDMIケーブルでモニタと接続
・5Vの電源を挿す(挿すと電源が入ります)

ええと、起動させてそのまま待っているとシリアルでは、
Texas Instruments X-Loader 1.41 (May 12 2011 - 10:52:12)
mmc read: Invalid size
Starting OS Bootloader from MMC/SD1 ...

U-Boot 1.1.4-L27.13.1^0-dirty (May 12 2011 - 10:48:49)
Load address: 0x80e80000
DRAM:  1024 MB
Flash:  0 kB
Using default environment
In:    serial
Out:   serial
Err:   serial
efi partition table:
efi partition table not found
Net:   KS8851SNL
Hit any key to stop autoboot:  0
booti: cannot find 'boot' partition
Device Serial Number: 7E72002400000001
Fastboot entered...

と、Fastbootモードに入ってしまうようで何も起きない!(それはそれとして覚えておきましょう。)
どうやら"Hit any key to stop autoboot: "と表示されている間に何かキーを打ってubootを止めて、環境変数を手動で入れてやる必要があるみたい。

もう一回起動をやり直しましょう。(ちなみに、上の画像でいうと上下に2つボタンが並んでいるうちの上のボタンがリセットボタンとなっており、こちらを押すことで再起動がかかります)
(略 )
Hit any key to stop autoboot:  5
(ここが0になる前にEnterを入力)
PANDA #
上のように"PANDA #"というプロンプトが表示されれば成功です。

以下、順番に打ち込んでいきましょう。
PANDA # setenv console console=ttyO2,115200n8 androidboot.console=ttyO2
PANDA # setenv memory mem=456M@0x80000000 mem=512M@0xA0000000
PANDA # setenv rootfs root=/dev/mmcblk0p2 rw rootdelay=2 init=/init
PANDA # setenv vmem  vram="32M" omapfb.vram=0:16M
PANDA # setenv display omapdss.def_disp=hdmi consoleblank=0
PANDA # setenv bootargs ${console} ${memory} ${rootfs} ${vmem} ${display}
PANDA # printenv bootargs
bootargs=console=ttyO2,115200n8 androidboot.console=ttyO2 mem=456M@0x80000000 mem=512M@0xA0000000 root=/dev/mmcblk0p2 rw rootdelay=2 init=/init vram="32M" omapfb.vram=0:16M omapdss.def_disp=hdmi consoleblank=0
PANDA # setenv bootcmd 'mmcinit 0;fatload mmc 0 0x80000000 uImage; bootm 0x80000000'

最後にbootです。(ちなみにsaveenvは(現状では)出来ませんので電源ONする度に上記を毎回打ち込む必要があります)
PANDA # boot
mmc read: Invalid size
3246752 bytes read
## Booting image at 80000000 ...
   Image Name:   Linux-2.6.35.7-00148-g6d54618
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3246688 Bytes =  3.1 MB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
OK
I2C read: I/O error
Blaze/SDP Board.
Starting kernel ...
(略)
とブートが走り、Androidの起動ロゴ画面の後、見事Android 2.3(Gingerbread)のホーム画面が表示されます!
(初回起動は結構時間がかかります(ずっとAndroidの起動ロゴ画面)ので、気長に待ちましょう)

(アプリのアイコン等の表示も、結構時間がかかります。SDカードからの読み出しだからでしょうか)



とりあえず今回は以上です。次回はもう少し細かく見ていきましょうか