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

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

2.Android USBガジェットドライバのスタック構造

 AndroidカーネルにUSBデバイスドライバとしてCD-ROMドライバを追加する上で、まず、AndroidのUSBガジェットドライバのスタック構成を説明します(図1)。


AndroidのUSBガジェットドライバのスタック構成 図1 AndroidのUSBガジェットドライバのスタック構成

 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(USB Device driver development Kit) 図2 UDK(USB Device driver development Kit)【※画像クリックで拡大表示】

 本ツールを使用すると、以下のような開発効率の向上が期待できます。

UDKのソリューション対象ユースケースと改善効果 表1 UDKのソリューション対象ユースケースと改善効果

 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.