AndroidカーネルにUSBデバイスドライバとしてCD-ROMドライバを追加する上で、まず、AndroidのUSBガジェットドライバのスタック構成を説明します(図1)。
USBガジェットドライバは、大きく分けて以下の2つの層に分かれています。
USBデバイスコントローラのレジスタアクセスや割り込み制御を行います。
本層は、大きく分けて以下の2層に分かれています。
なお、本層は、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データを解析しながら理解を深めていくことにしましょう。
UDKは、USBデバイスドライバ開発をターゲットとした統合開発環境です。本ツールは、Eclipseのプラグインとして機能提供します(図2)。
本ツールを使用すると、以下のような開発効率の向上が期待できます。
UDKを使用すると、冒頭で述べた“苦労”は全て解決されます。それでは、1つずつみていきましょう。
UDKは、Android端末の代わりに、Androidエミュレータを使用して動作を確認できるため、Android端末不足の問題が解消されます。
UDKには、仮想USBプロトコルアナライザ(Wiresharkで実現)が同梱されています。このため、本物のUSBプロトコルアナライザがなくても、USBデバイスドライバとUSBホストとの通信パケットを簡単に解析できます。具体的な解析事例は後述します。
USBデバイスドライバのソースコード修正から、Androidエミュレータの起動までを一貫して、UDK上で行うことができます。ROM焼きなどの特殊なオペレーションも一切不要なので、デバッグ効率が格段に向上します。
Copyright © ITmedia, Inc. All Rights Reserved.