緊急事態発生!? 起動不能になったPCをAndroidで救出せよ!:実践しながら学ぶ Android USBガジェットの仕組み(6)(1/2 ページ)
今回からAndroid USBガジェットの機能として比較的よく使用されている「USBマスストレージクラス(USB Mass Storage Class)」の仕組みを詳しく解説していく。Androidボードを使って、起動不能になったPCを救出できるか!?
はじめに
今回からAndroid USBガジェットの機能として比較的よく使用されている「USBマスストレージクラス(USB Mass Storage Class)」について解説していきます。
USBマスストレージクラスが提供する機能の利用シーンについては、連載第1回「Android USBガジェットを使ってみよう!」の2ページ目で紹介した通りです。今回からはその“仕組み”について詳しく触れていきます。
とはいえ、単純にAndroidの構造やUSBマスストレージクラスの仕様について解説するだけでは面白くないので、本シリーズでは実際に“モノづくり”を楽しみながら理解を深めていきたいと思います。
AndroidでPCを救出せよ!
プロローグ
――某月某日、ちょっとしたトラブルが発生しました――
中垣内 あれ……!? PC(Windows)が起動しないぞ。昨日何かしたかなぁ……。と、とにかくセーフモードでもいいから何とかOSを起動しなくては……(汗)。
――しばし試行錯誤――
中垣内 ダ、ダメだー。セーフモードも途中で止まってしまう……。ひょっとして、ファイルシステムが壊れかけているとか? となると……。
※PCを使用していると、誰しも直面し得るトラブルですね(場合によっては、本当にディスクが破損してしまうこともあるので、日ごろから大切なデータはバックアップを取りましょう)。
中垣内 うーむ。ノートPCだし、HDDを取り出すのはちょっと面倒だよなぁ。こうなると、「KNOPPIX」の出番か! えーと、確か以前にKNOPPIXのCD-ROMを作ったはずだけど……。
――机の引き出しから整理されていないCD-ROMの山が……――
中垣内 ……。ど、どれだっけ……(汗)。あーーーっ!! しかもこのノートPC、CD-ROMドライブないし……。外付けドライブはどこだっけ??
登場! Androidボード試作機1号
村上 中垣内さん、AndroidにKNOPPIXをインストールしておいて、USBからブートさせたらどうです?
中垣内 えっ……?
森 おっ!! それ面白そうやね。チョイ待って!
……
……
森 よっしゃ、できた! まだ、試作中の「Androidボード(試作機1号)」だけど、これを使えば何とかなるんじゃないかな。
中垣内 試作中……って(というか、森さん作るのが速すぎてコワイ)。
森 このボードとPCをUSB接続して、PCのBIOSを設定して〜。そんでもって、端末でパスを入れて〜と。
森 どうだ? これで再起動だ!
全員 おーーーっ!! キターーーッ!
USBマスストレージクラスのおさらい
結局、他のメンバーの協力を得て、中垣内さんのPCは事なきを得たわけですが……。一体、Androidにどんな魔法をかけたのでしょうか? 以降でその“種明かし”をしていきます。
本題に入る前に、ベースとなる知識として、USBマスストレージクラスのおさらいをしておきましょう。
AndroidのUSBマスストレージクラスを利用すると、USB接続でPC側からAndroid上のSDカード内のファイルへアクセスできます。この際、PC側はAndroidを“USBメモリ”として認識します(図1)。
つまり、USBマスストレージクラスを使うと、先ほどのAndroidボードがUSBメモリになるわけです。そして、USBメモリとして扱えるのであれば、「USBブートも可能」と考えるのはごく自然なことです。
繰り返しになりますが、今回の場合、PC側はAndroid上のSDカードのことを“USBメモリ”として認識します。SDカード内のデータを“USBブート可能なイメージ”に置き換えてしまえば、Androidボードは“ブート可能なUSBメモリ”となるわけです。
これが基本的な考え方となります。後は、少し応用を加えれば、割と簡単にAndroidを改造することが可能です。
Androidを仮想CD-ROMドライブにする
ここで、現実的な話に移りましょう。前述の通り、手段としてUSBメモリブートを用いてもよいのですが、KNOPPIXのダウンロードサイトにあるのは“CDイメージファイル(ISOファイル)”です。そこからUSBメモリブートできるようにするには少々手間がかかります。できることならば、ダウンロードしたISOファイルをそのまま使用したいですよね。
ご存じの通り、世の中にあるUSB機器の中には“CD-ROMドライブ”があります。そこで、「どうにかして、AndroidをUSBメモリではなく、“CD-ROMドライブ”に仕立てることはできないものか?」と考えるのは割と筋の通った話です(図2)。
つまり、USBメモリからのPCブートではなく、CD-ROMドライブからのPCブートということです。
ただし、Android側から見ると、ISOファイルは通常ファイルでしかないので、そのままではうまく認識しません。ここで利用するのが、Android(Linux)の特殊なデバイスファイル「ループバックデバイス(Loopback device)」です。これにより、容易に通常ファイルを仮想デバイス化することができます。SDカード内のISOファイルをループバックデバイスでデバイス化することで、ダウンロードしたISOファイルをそのまま使用でき、簡単にCD-ROMドライブとして扱うことができるのです。
後は、PC側のBIOS設定で、USB CD-ROMドライブをブートシーケンスの先頭にして、PCをブートするだけです。
以下に、Androidボード試作機1号でのオペレーション内容を示します(注1)。
1.ボードにSDカードを挿入する
2.シリアル端末上で、ISOファイルが入っていることを確認する
全部で、3つのISOファイル(KNOPPIX、Puppy Linux、Ubuntu)があります。
- knoppix_v6.7.1CD_20110914-20111018.iso …… KNOPPIX
- ubuntu.iso …… Ubuntu
- wary-511-01j-k2.6.32.28-small.iso …… Puppy Linux
この中で、今回使用するものはKNOPPIXです。
3.シリアル端末上で、「losetup」コマンドを使って、KNOPPIXのISOファイルを仮想デバイス化する
仮想デバイスができたかどうかは、ループバックデバイスファイル「/dev/block/loop0」に対し、「losetup」コマンドをたたいた結果で確認します。正しく仮想化できていると、設定したISOファイルのファイルパスが表示されます。
4.仮想化したデバイスファイルをUSBマスストレージクラスに認識させる
AndroidのUSBマスストレージクラスのデバイスドライバには、「/sys」配下に特殊ファイル(/sys/devices/platform/s3c6410-usbgadget/gadget/lun0/file)が存在します(注2)。この特殊ファイルに対して、デバイスファイルのパスを書き込んでおくと、USB接続時にPC側からそのデバイスを参照できるようになります。今回の場合は、KNOPPIXのISOファイルをループバックデバイス(/dev/block/loop0)で仮想デバイスにしていますので、そのファイルパスを書き込みます。
# echo “/dev/block/loop0” > /sys/devices/platform/s3c6410-usbgadget/gadget/lun0/file
5.PCのBIOS設定を変更する
6.PCと端末をUSB接続し、PCを起動する
関連キーワード
組み込みAndroid開発 | 実践しながら学ぶ Android USBガジェットの仕組み | USB | Android | 組み込み | Androidケータイ | アプリケーション開発 | Androidがもたらす組み込み開発の新たな可能性 | 組み込み開発 | 作りながら理解するファイルシステムの仕組み
Copyright © ITmedia, Inc. All Rights Reserved.