Android端末をUSB Gadgetを使用してWiFi共有USBメモリにする

投稿者: | 12月 23, 2023

目次

はじめに

TektronixのTDS2024Bというオシロスコープを使用しているのですが、PCにUSBケーブルで接続できても、画面キャプチャができません。前に使用していたOWONのオシロスコープではできたのに…USBメモリを接続してそこに保存することはできます。そこで適当に余っている価値のないAndroid端末をUSB Gadgetなどを使用して、USBメモリとして認識して、WiFiでSambaなどを使用して共有すれば楽ということを思いつきました。今回はそれを行います。

USB OTGに対応しているLinuxが乗るボード(Raspberry Pi Zeroとか)を使用しても良いんですが高いので500円程度買える中古のAndroid端末を使用しました。

ブロック図

こんなのを作るのを予定していました。

Android端末をUSB Gadgetを使用してWiFi共有USBメモリにする
USBホスト
TDS2024B
USB
Android端末
USB Gadget
Mass Storage
SDカード
dev/block/mmcblk1p1
/storage/sdcard0
MixPlorer
SMBサーバ
ポート
フォワーディング
WiFi
PC
作ろうとしたもの

使用した端末

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カードを挿してからアプリデータを消すことで解消できます。

Android端末をUSB Gadgetを使用してWiFi共有USBメモリにする
UMS Enabler
USB MASS STORAGE Enabler
USB Config mass_storage
USB MASS STORAGE(UMS) Enabler
USB MASS STORAGE Enabler
Android端末をUSB Gadgetを使用してWiFi共有USBメモリにする
本体のeMMCが参照さてしまった例

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では使用できるかもしれないのでそのうち試してみます。

USB MASS STORAGE Enabler
Android端末をUSB Gadgetを使用してWiFi共有USBメモリにする
オシロスコープ前面のUBポートに、サポートされていないデバイスが接続されました。
USB フラッシュ・ドライブをこのUSB ポートに接続して、データを保存したり、取込んだりすることはできます。
このメッセージを削除するには、oKを押してください。
使用できなかった例

起動時のセットアップが面倒
今回は本来の目的が達成できなかったので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を設定できます。逆テザリングをやってみたい場合とかに使えそうです。

Android端末をUSB Gadgetを使用してWiFi共有USBメモリにする
/sys/class/android_usb/android0/idVendor
/sys/class/android_usb/android0/idProduct
いろいろ(ベンダID、プロダクトID、ディスクの名前)変更してみた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以下のフォルダを作成できません。

おわりに

いろいろできて面白かったんですが、目的は達成できませんでした。なぜオシロスコープでは非対応って出てしまうんだろうか…不思議

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)