Android USBパケットをキャプチャーし、UMSプロトコルを解析する!!:実践しながら学ぶ Android USBガジェットの仕組み(11)(2/3 ページ)
今回は、USBデバイスドライバを効率的に開発するための統合開発環境「UDK(USB Device driver development Kit)」を使用して、UMS(USB Mass Storage)のパケットの流れとSCSIデータを解析する。
2.Android USBガジェットドライバのスタック構造
AndroidカーネルにUSBデバイスドライバとしてCD-ROMドライバを追加する上で、まず、AndroidのUSBガジェットドライバのスタック構成を説明します(図1)。
USBガジェットドライバは、大きく分けて以下の2つの層に分かれています。
ハードウェア(H/W)依存層
USBデバイスコントローラのレジスタアクセスや割り込み制御を行います。
ハードウェア(H/W)非依存層
本層は、大きく分けて以下の2層に分かれています。
- Setup層
……USBプラグ&プレイを実現する - Function層
……UMS(USB Mass Storage)をはじめとして、ADB、Accessory、HID(Human Interface Device)など、ユーザーが実際に使用するUSB機能を実現する
なお、本層は、H/W非依存層であり、USBデバイスコントローラの制御は、標準仕様化されたLinux USB Gadget APIを通して行います。本設計により、上位層はH/W非依存となり、保守性・移植性の向上に寄与します。
われわれが新たに追加するCD-ROMドライバの機能は、Linux USB Gadget APIを通して実現可能であり、H/W非依存層に配置することになります。また、USB Mass Storageの仕様(Mass Storage Class Specification Overview 1.4)では、CD-ROMドライブも含まれていますので、既存のUMSドライバに機能追加する形で、CD-ROMドライバを追加することになります。
とはいえ、既存のUMSドライバを知らなければ改造のしようがありません。そこで、われわれが開発したUDKを使用して、“USB接続 ⇒ マウント操作”で、USBバス上に流れるパケットの流れとSCSIデータを解析しながら理解を深めていくことにしましょう。
3.UDK(USB Device driver development Kit)の紹介
UDKは、USBデバイスドライバ開発をターゲットとした統合開発環境です。本ツールは、Eclipseのプラグインとして機能提供します(図2)。
本ツールを使用すると、以下のような開発効率の向上が期待できます。
UDKを使用すると、冒頭で述べた“苦労”は全て解決されます。それでは、1つずつみていきましょう。
3.1.解決1:Android端末不足
UDKは、Android端末の代わりに、Androidエミュレータを使用して動作を確認できるため、Android端末不足の問題が解消されます。
3.2.解決2:USBプロトコルアナライザ不足
UDKには、仮想USBプロトコルアナライザ(Wiresharkで実現)が同梱されています。このため、本物のUSBプロトコルアナライザがなくても、USBデバイスドライバとUSBホストとの通信パケットを簡単に解析できます。具体的な解析事例は後述します。
3.3.解決3:デバッグ効率の悪さ
USBデバイスドライバのソースコード修正から、Androidエミュレータの起動までを一貫して、UDK上で行うことができます。ROM焼きなどの特殊なオペレーションも一切不要なので、デバッグ効率が格段に向上します。
Copyright © ITmedia, Inc. All Rights Reserved.