連載
» 2011年07月22日 00時00分 公開

実践しながら学ぶ Android USBガジェットの仕組み(1):Android USBガジェットを使ってみよう! (2/4)

[中垣内勇祐、森崇、中谷洋一(永和システムマネジメント),@IT MONOist]

Android USBマスストレージ

 誰しも一度は、携帯電話で写真や動画を撮影した経験があるのではないでしょうか。そこで撮影した写真や動画のデータは、大抵の場合、大容量のSDカードに保存すると思いますが、月日がたてば思い出も増え、いずれSDカードの容量も不足していきます……。

 そういう場合は、SDカードのデータをPCなどにバックアップすることになると思いますが、ほとんどの携帯電話のSDカードは、バッテリーを外さないと取り出せない構造になっています(注7)。バッテリーを外すには、一度、携帯電話の電源をOFFにしないといけないので、ちょっと不便です。


※注7:恐らく、ユーザーが誤ってデータアクセス中にSDカードを抜き、データ破損しないようにしているのだと思います


 そんなとき、携帯電話をPCにUSB接続して、SDカードの中のデータを取り出せたら便利ではないでしょうか? Android USBマスストレージは、そんな機能を提供します。使い方は簡単です。USBケーブルを接続するだけです。実際にやってみましょう。

 今回、2枚の写真の入ったSDカードを用意しました。図10は、このSDカードを組み込みボードに挿して、ボード上で閲覧している様子です。

組み込みボードにSDカードを挿入 図10 組み込みボードにSDカードを挿入

 それでは、この組み込みボードをPCに接続してみましょう。

PCと組み込みボードをUSB接続(失敗) 図11 PCと組み込みボードをUSB接続(失敗)

 ……あれ? 何も起きません。早速つまづきました!!

 実は、この組み込みボード上に搭載された初期状態のAndroid 2.1は、「USB接続されたらSDカードをPCから閲覧できるようにする」という設定が適切にされていません。そのため、何も起きなかったのです。

 通常であれば、Android内で常駐している「ボリュームデーモン」というデーモンプロセスが、自動で閲覧できるような状態にしてくれるのですが、ちょっとうまくいってないようです。というわけで、今回は、ボリュームデーモンの代わりに、手動でセッティングしてみましょう。

 セッティングするといっても、この組み込みボードにどうやってアクセスすればよいのでしょうか? この組み込みボードにはシリアルケーブルを接続するための端子があります。この端子を使って、今回使用するPCと接続することで、Androidのコンソールを立ち上げることができます。なお、PC側でシリアルコンソール接続するためのアプリケーションとして本稿では「screen」を使用します。

 まずは、PC側でAndroidのコンソールを立ち上げるところまでやってみましょう。

1.screenをインストールする

 以下のコマンドでscreenをインストールしましょう(注8)。

sudo apt-get install screen
※注8:「apt-get」でネットワーク接続するため、プロキシの設定が必要な場合があります。


2.PCと組み込みボードをシリアルケーブルで接続する

 実は、本連載で使用するPCには、シリアルインタフェースはありません。そのため、“シリアル変換USBケーブル”を使ってUSB接続するようにしています(図12)。

PCと組み込みボードをシリアル接続 図12 PCと組み込みボードをシリアル接続

3.Androidのコンソールを立ち上げる

 それでは、以下のように「screen」コマンドを実行(注9)して、Androidのコンソールを立ち上げます。

screen /dev/ttyUSB0 115200
※注9:「/dev/ttyUSB0」は、USBシリアルコンソール用のデバイスファイルです。「115200」は今回使用するボーレートです。


 そして、組み込みボードの電源をONにし、Android起動時のログ情報をPC側で見てみましょう(図13)。起動ログが出てきましたよ〜。うまくいきましたね!

Android起動時のログをPC側で見る 図13 Android起動時のログをPC側で見る

 それでは、いよいよPC側から組み込みボード上のSDカードを閲覧できるようにしてみましょう! まず、SDカードのパーティション名を知る必要があります。パーティション情報は「/proc/partitions」で参照できます。

Androidのパーティション情報 図14 Androidのパーティション情報
項目 概要
major デバイスのメジャー番号
minor デバイスのマイナー番号
#blocks パーティションのブロック数
name パーティションの名前
表5 パーティション情報の説明

 この内、SDカードのパーティション名は“mmcblk0p1”です。ファイルシステム上のパスとしては「/dev/block/mmcblk0p1」です。このパス名を、Android USBガジェットのマスストレージの設定ファイル「/sys/devices/platform/s3c6410-usbgadget/gadget/lun0/file」に追加します(注10)。

echo “/dev/block/mmcblk0p1” > /sys/devices/platform/s3c6410-usbgadget/gadget/lun0/file
※注10:設定ファイルのパスは組み込みボードに依存します。


 これで終わりです。それでは、実際にPCと組み込みボードをUSBで接続してみましょう。なお、接続する際には、組み込みボード側からはSDカードを閲覧できないように、SDカードはアンマウントしておきます(注11)。

PCと組み込みボードをUSB接続(成功) 図15 PCと組み込みボードをUSB接続(成功)

 USB接続すると図16のように、SDカードのディレクトリがPC上にポップアップします!

組み込みボードのSDカードの内容がポップアップ表示 図16 組み込みボードのSDカードの内容がポップアップ表示
※注11:アンマウントしておかないと、組み込みボードとPC側から同時にファイルシステムに対するアクセスが発生し、最悪、データ破壊が発生するためです。ちなみに、ボリュームデーモンは、PC側にSDカードの内容を見せる場合は、必ず、アンマウントしています。


Copyright © ITmedia, Inc. All Rights Reserved.