Android USBパケットをキャプチャーし、UMSプロトコルを解析する!!実践しながら学ぶ Android USBガジェットの仕組み(11)(3/3 ページ)

» 2013年04月16日 09時30分 公開
[村上雅彦、舟元拓斗、森崇(永和システムマネジメント 組込み技術センター),MONOist]
前のページへ 1|2|3       

4.UDKを使ってUMSのパケットの流れとSCSIデータを解析する

 それでは、UDKを使ってUMSのパケットを解析してみましょう。解析するまでの流れは図3の通りです。


UDKでのパケット解析までのステップ 図3 UDKでのパケット解析までのステップ

4.1.コンパイル

 UDKでは、Linuxカーネルのソースコードを、Eclipseプロジェクトとしてインポートし、USBデバイスドライバの修正および、コンパイル(ビルド)できます。

USBデバイスドライバのコンパイル 図4 USBデバイスドライバのコンパイル【※画像クリックで拡大表示】

4.2.起動

 ビルドで生成したカーネルイメージを、Eclipseの実行構成にて指定し、Androidエミュレータを起動できます。同様に、OSイメージを指定することで、仮想ホストマシンも起動できます。

 通常であれば、ROM焼きしてAndroidを起動しなければなりませんが、ボタン1つでホストマシンとAndroidを起動できるので、手軽にデバッグできます。

起動 図5 起動【※画像クリックで拡大表示】

4.3.USB接続

 仮想USBホストマシンとAndroidエミュレータを起動した状態で、[USB接続]ボタンを押下すると、実機と同じようにUSB接続状態となります。このため、通常のUSB操作の動作確認が可能です。本例では、Android側から[Mount]ボタンを押下すると、ホストマシン上でリムーバルディスクが表示され、ディスク内のファイルアクセスが可能です。

USB接続 図6 USB接続【※画像クリックで拡大表示】

4.4.パケット解析

 USBドライバ開発では、USBプロトコルアナライザの存在は必須といえるでしょう。UDKでは、USB接続後、USBパケットを確認したいタイミングで、[USBアナライザ起動]ボタンを押すと、Wiresharkが起動され、リアルタイムで流れているUSBパケットを表示してくれます。

 本例の場合、AndroidがUSB Mass StorageとしてUSB接続された時のUSBパケットの流れが表示されています。

パケット解析 図7 パケット解析【※画像クリックで拡大表示】

 それでは、本題に戻りましょう。われわれの本来の目的は、ホスト側にAndroidを“CD-ROMドライブ”として認識させることです。しかし、現時点でホスト側は、Androidを“リムーバブルディスク”として認識しています。

 これは、Androidがホスト側に対して、リムーバブルディスクとして認識させるための“ある仕掛け”をしているためです。その仕掛けは、USB接続からMountまでのSCSIコマンドの中に秘められています。

 そこで、まずはホストPCとAndroidをUSB接続し、Mountするまでの間をUSBアナライザで調べてみたいと思います。

code SCSIコマンド 概要 発行回数
0x00 TEST UNIT READY ターゲットデバイスへの診断コマンド(データ転送可否など) 44
0x03 REQUEST SENSE ターゲットデバイスのセンスデータ(ステータス/エラー情報)を取得する 30
0x12 INQUIRY ターゲットデバイスの基本情報を取得する 1
0x1A MODE SENSE(6) ターゲットデバイスの現在の状態を取得する 7
0x1E PREVENT ALLOW MEDIUM REMOVAL メディアの挿抜可否設定 8
0x25 READ CAPACITY ターゲットデバイスのデータ容量情報を取得する 24
0x23 READ FORMAT CAPACITIES フォーマット可能なデータ容量情報を取得する 3
0x28 READ(10) ターゲットデバイスからホストへデータ転送する 757
合計 874
表2 USBアナライザで観測したSCSIコマンド一覧

 表2は、ホスト側から発行されていたSCSIコマンドのサマリーです。USB接続からMountまでの間に874回ものパケットが流れているようです。しかし、その種類は限定的で実は8種類しかありません。ホスト側は、これら8種類のSCSIコマンドの応答のどこかで、リムーバブルディスクとして認識するに至ったと考えられます。

 数も少ないことですし、1つずつSCSIコマンドの仕様をひもといていくことで、その仕掛けを見いだすことができるはずです。そして、それが、最終的にはCD-ROMドライブとして認識させるための手掛かりにもつながります。

 それでは早速……、といきたいところなのですが、誌面の都合で今回はここまでにしたいと思います。それに、いきなり仕様解説を始めると多少難解になる恐れもありますし……。

 そこで次回は、少し基礎的な内容になりますが、「USB/SCSIプロトコル」について解説したいと思います。お楽しみに! (次回に続く)

なお、今回紹介したUDKを、2013年5月8〜10日の3日間、東京ビッグサイトで開催される「組込みシステム開発技術展(ESEC)」に出品する予定ですので、ご興味のある方は永和システムマネジメントのブースにお立ち寄りください。



Android コーナー

Androidコーナー
「Android(アンドロイド)」の組み込み機器への適用からアプリ開発、レポート、ニュースなどさまざまな技術情報・最新動向をお届けする!!

>>コーナーTOPはこちらから


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.