目次
- はじめに
- ブロック図
- 使用した端末
- USB Gadgetを設定するのに使用するアプリ
- USB MASS STORAGE Enablerの使い方
- MiXplorer
- ポートフォワーディング
- 懸念事項、問題点
- AndroidでのUSB Gadget
- おわりに
はじめに
TektronixのTDS2024Bというオシロスコープを使用しているのですが、PCにUSBケーブルで接続できても、画面キャプチャができません。前に使用していたOWONのオシロスコープではできたのに…USBメモリを接続してそこに保存することはできます。そこで適当に余っている価値のないAndroid端末をUSB Gadgetなどを使用して、USBメモリとして認識して、WiFiでSambaなどを使用して共有すれば楽ということを思いつきました。今回はそれを行います。
USB OTGに対応しているLinuxが乗るボード(Raspberry Pi Zeroとか)を使用しても良いんですが高いので500円程度買える中古のAndroid端末を使用しました。
ブロック図
こんなのを作るのを予定していました。
使用した端末
Root化ができている必要があります。アプリの関係でAndroid4以上の必要があります。
最近の端末は高くてもったいないので、昔の端末を使用しました。Android5を搭載しているfreetel priori2です。中古で500円くらいで売っていると思います。KingRootで簡単にRoot化できます。
USB Gadgetを設定するのに使用するアプリ
2つあるので、使用する端末に合わせて選んで下さい。AndroidでのUSB Gadgetの詳細は下にまとめました。詳しく知りたい人はどうぞ
USB Gadget Tool
Android6以降の比較的最近の端末向けです。カーネルがConfigFSをサポートしていることが必須です。このページを参考にすると、Kernel 3.13以降でないとMass storageはサポートされていないようです。
USB MASS STORAGE Enabler
Kernel 3.13以下のAndroid4~5or6くらいで使用するのが良いと思います。今回は、こちらを使用しました。自鯖ミラー(UMS_Enabler_1.6.2.apk)
USB MASS STORAGE Enablerの使い方
インストールする前にSDカードを刺して下さい。その後普通にAPKをインストールして、ENABLE USB MASS STORAGEを押すだけです。
右上の設定からADBを有効化するかどうか、使用するブロックデバイスの選択ができます。ADBはOFFにして下さい。
これで、PC等に挿すとUSBメモリの様にSDカードの中身が直接表示されます。
SDカードを挿す前に起動させると、本体のeMMCの方を参照してしまい、とんでもないパーティションが表示されます。また、右上の設定に入ろうとするとクラッシュしていしまいます。SDカードを挿してからアプリデータを消すことで解消できます。
MiXplorer
Androidに挿入されたSDカードをUSBメモリとして振る舞うようにすることができたので、あとは適当にSDカードの内容を共有すればいいだけです。正直アプリは何でも良いです。自分は、FTPとSMBが簡単に共有できるMiXplorerを使用しています。右上の︙からServerを押せば、設定できます。
ポートフォワーディング
Root権限が無いと、ウェルノウンポート(0~1023番ポート)が使用できません。Windowsで見やすいようにSMBで共有するには、ウェルノウンポートを設定する必要があります。これに関しては、Root化されたAndroid端末でウェルノウンポートを使用するを参考にして下さい。Termuxではなく、ADBにWiFi経由で接続し(参考)、adb shellで実行します。
懸念事項、問題点
使用できない機器がある。
使いたかったTektronix TDS2024Bでは使用できませんでした。「サポートされていないデバイスが接続されました。」と言われてしまいます。謎です。普通のUSBメモリとはやっぱり挙動が違うんでしょうね。もしかしたら、ConfigFSでは使用できるかもしれないのでそのうち試してみます。
起動時のセットアップが面倒
今回は本来の目的が達成できなかったのでAndroidの起動時に自動にUSB Gadgetを設定し、SMBサーバを起動し、ポートフォワーディングを設定する、という必要があります。USB MASS STORAGE Enablerの設定を見ると自動起動の項目があるのでこれをONにすれば問題ありません。、SMBサーバですが、これが面倒でMiXplorerには自動的に起動する設定があるのですが、バグで起動しません。バグを修正するか、DroidMacroで頑張るしかありません。ポートフォワーディングも面倒で、起動時にシェルスクリプトを実行する必要があります。これもDroidMacro頼みですかね。
同時書き込み
懸念事項です。ファイルに対して同時書き込みに対する制限をしていないので、USBとSMBの両方で書き込みをしてしまうと多分ファイルが終わります。
AndroidでのUSB Gadget
いろいろいじってわかったことをまとめます。
AndroidのUSB Gadgetは2種類あります。
/sys/class/android_usb/android0を使用する物(Kernel 3.11以下?)
これ用いてUSB Gadgetを設定するのが、USB MASS STORAGE Enablerです。
/sys/class/android_usb/android0/enable
を0にすると無効化、1にすると無効化となります。
/sys/class/android_usb/android0/idVendor
はベンダID
/sys/class/android_usb/android0/idProduct
はプロダクトIDです。echoとかで流し込むと任意のものに変更できます。
Mass Storageの設定はsys/class/android_usb/android0/f_mass_storage/下にあります。接続する保存デバイスは、
/sys/class/android_usb/android0/f_mass_storage/lun/file
で設定できます。ブロックデバイスだけでなく、イメージファイルでもいけると思います。ディスクの名前は、
sys/class/android_usb/android0/f_mass_storage/inquiry_string
の中身を変更すればできます。
手動で設定すれば、USB Gadgetを設定できます。逆テザリングをやってみたい場合とかに使えそうです。
/sys/kernel/config/usb_gadgetを使用する物(Kernel 3.11以上?)
これを用いてUSB Gadgetを設定するのが、USB Gadget Toolです。ConfigFSを用いています。
インターネットでUSB Gadgetとかで検索して出てくる方法で設定するやつです。対応していないのにこの方法で作成しようとすると
mkdir failed for functions/mass_storage.0/, Function not implemented
と言われてfunctions以下のフォルダを作成できません。
おわりに
いろいろできて面白かったんですが、目的は達成できませんでした。なぜオシロスコープでは非対応って出てしまうんだろうか…不思議