連載
» 2012年10月25日 08時40分 公開

実践しながら学ぶ Android USBガジェットの仕組み(8):AndroidエミュレータとPCをUSB接続せよ! (2/2)

[中垣内勇祐、村上雅彦、森崇、中谷洋一(永和システムマネジメント),MONOist]
前のページへ 1|2       

AndroidエミュレータとPCとの接続についての考察と結果

中垣内 直感的な使いやすさを考えると、こんな感じですかねぇ。

 [USB接続]ボタンを追加して、ボタンを押すとUSB接続されて、PCのデスクトップ上にSDカード内のファイル格納フォルダがポップアップされる――という具合です(図1)。


USB接続ボタンを追加 図1 USB接続ボタンを追加

 なるほど。現在使用しているホストPCのOS(Linuxカーネル)とAndroidエミュレータとを仮想的にUSB接続して、ホストPC上からは本物のAndroid端末がUSB接続されているように見せ掛けるんだね(図2)。

ホストPCのOS(Linuxカーネル)とAndroidエミュレータとを仮想的にUSB接続 図2 ホストPCのOS(Linuxカーネル)とAndroidエミュレータとを仮想的にUSB接続

 ただ技術的な難点は、AndroidエミュレータからのUSBリクエストを、LinuxカーネルのUSBホストコントローラドライバ内でループバックして、ホストPCに戻すことができるか……だね。多分、これ以外にも技術的な課題は多そうだけど、Linuxカーネルならオープンソースだし、頑張ればできなくはなさそうだ……。とはいえ、短期間で作るとなると骨が折れそうだな。

 そうだ! 別の案だけど、“仮想マシン同士をUSB接続する”というのはどうかな?(図3

仮想マシン同士をUSB接続する 図3 仮想マシン同士をUSB接続する

 この構成だと、改造箇所は仮想マシン(QEMU)がメインになるので技術的にはやりやすいような気がするぞ。ただ、難点は、ユーザーの手間が増えるのと、QEMU上で動作するOSはとても重いということ。性能的に耐えられるかどうか……、かなり心配だな。KVMも選択肢に入れるか……。

村上 なるほど、2つの実現方法がありそうですね。

 確かに、難点は幾つかあるけど、“仮想マシン同士をUSB接続する”方が機能実現の一番の近道のようですし、そこから手を付けてみてはいかがでしょう?

AndroidエミュレータのUSB接続デモ

 こうして、AndroidエミュレータのUSB接続の方針が決まりました。

 それではこの方針を踏まえ、改造を始めていきましょう!

……

改造中

……


 ご覧の通り、トッカンで作りましたので、[USB接続]ボタンの作成は割愛し、[受話器]ボタンで代替しています。受話器を上げるとUSB接続し、受話器を下げるとUSB接続を切断します。

 改造ポイントをまとめたものを図4に示します。なお、今回はAndroidエミュレータ側を改造しました。

今回の改造ポイント 図4 今回の改造ポイント

 今回のエミュレータ側の改造ポイントによる“メリット”は、大きく分けて2つあります。

  1. Androidエミュレータ側の仮想USB接続/切断を実現
  2. Androidアプリケーションフレームワーク層を完全エミュレート

 まず、1.についてですが、単純なボタン操作でUSB接続/切断が実現できたことは、USB機能をデバッグする開発者にとってはうれしいポイントといえます。

 次に、2.についてですが、今回の改造箇所は、Linuxカーネルの非常に深いところにある「USBデバイスコントローラドライバ」と、仮想マシンであるQEMUの「USBデバイスコントローラ」だけであり、Androidフレームワーク側には一切の修正がありません。

 これは、USB接続/切断に関して、完全にAndroidアプリケーションフレームワーク層をエミュレートできたということです。つまり、フレームワーク層に対する修正なしで、デバッグ/テストが行えるということなので、この改造エミュレータの意義は非常に大きいといえます。少なくとも、今回開発を進めているPCRescuroidのフレームワーク層の改造で、このエミュレータは大変重宝されることでしょう。

 とはいえ、今のままでは、USB接続/切断までのエミュレートしか実現できておらず、肝心のSCSIコマンドなどのやりとりは、まだエミュレートし切れていません。これを実現するためには、ホストPC側のQEMUの改造が必須となります。現時点では、こちらの改造は、まだ“見通しが立っていない状態”であり、もう少し時間がかかりそうです。そのため、この進ちょく具合に応じて、次回は以下のいずれかの内容を紹介したいと思います。

  • 今回のエミュレータを使ったPCRescuroidの改造/デバッグ内容の紹介
  • ホストPC側のQEMUの改造結果の紹介

 どうぞご期待ください。(次回に続く)


Android コーナー

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

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


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.