Raspberry Pi Zero WをUSBメモリとして使えるようにする。
言い換えると、Raspberry Pi Zero WでUSB OTGを使い、Mass Storage Gadget (MSG)を起動するということ。
おそらく、Raspberry Pi 4などでも同じことができると思うけど、現時点では試していない。
これには、イメージファイルを使用する方法と、ディスク(SDカード)のパーティションを使用する方法とある。
今回は、イメージファイルを使用する方法編。パーティションを使用する編と重複した内容が含まれる。
USB OTG(On-The-Go)の有効化
通常、Raspberry PiのUSB端子は、Raspberry Piがホストで、接続されたものがデバイスとして働く。これを、逆にして、接続されている方がホストで、Raspberry Piをデバイスとして使えるようにするのが、USB OTG(On-The-Go)
dtoverlay=dwc2
Raspberry Piの/boot/config.txtというファイルに上の一行を追加する。
Raspberry Pi OSの起動時にこのファイルをチェックし、USB OTGが使えるようになる。
ここで一旦Raspberry Piをシャットダウン。
Raspberry PiのUSB端子のうちUSB OTGが使える方、Raspberry Pi Zero WならUSBって書いてある方にケーブルをつなぎ、もう一方をWindows PCに刺して起動する。Raspberry Pi Zero Wならこの接続で共有される電力で十分なので、PWR側に電力を供給する必要はない。
無事起動すると、Windows PCがぴっぴろりん!とUSBの認識がされた音がする。音がすれども、デバイス的には認識は失敗しているはず。なぜなら、USB OTGが有効化されても、デバイス的な設定をまだしてないから。
なにはともあれ、Raspberry Piにログイン。
USBメモリの領域を準備
今回は64GBのSDカードを使用しているので、以下の説明はそれに合わせた記述。適宜サイズに合わせて変更が必要。
exfatをUSBメモリのフォーマットとして使用する場合は、
$ sudo apt install exfat-fuse
で、exfatが使えるようにしておく。
$ dd if=/dev/zero of=/home/pi/usb_storage.img bs=1M count=60000
これで60GB分の空のイメージファイルを作成。これ死ぬほど時間がかかる。
これは環境に依存するのだが、このファイルがrootから読み書きできるようにchmodとかchownする必要があるかもしれない。
次に、イメージファイルのフォーマットだが、ここでフォーマットしなくても、USBメモリをWindows PCに刺してフォーマットしてもよい。
$ mkfs.exfat /home/pi/usb_storage.img
mkfs.exfatはexfatでフォーマットした場合。fat32だと、mkfs.vfat -F 32 /home/pi/usb_storage.img
USBマスストレージとして使えるか実験
$ sudo modprobe g_mass_storage file=/home/pi/usb_storage.img removable=y
とすると、おもむろにWindowsの方でUSBドライブが認識される。
$ sudo modprobe -r g_mass_storage
これで、USBマスストレージが解除される。Windows側では、ぴろりん、とUSBドライブが外れた音が鳴る。
マウントについて
今回作成したイメージファイルをRaspberry Pi側から利用するためにマウントする必要があるのだが、これに関してはややこしいので、別記事で記載する。
modprobe g_mass_storageをRaspberry piの起動時に実行するように設定
いくつかの方法がある。ここでは2通りのやりかたを記載する。
/etc/rc.localを使用
/etc/rc.localに以下の行を追加する。
# for USB MASS Storage
modprobe g_mass_storage file=/home/pi/usb_storage.img removable=y
systemdを使用
systemdのOneShotサービスで起動する。
[Unit]
Description = USB MASS Storage Service
After = local-fs.target
[Service]
ExecStart = /sbin/modprobe g_mass_storage file=/home/pi/usb_storage.img removable=y
Type = oneshot
[Install]
WantedBy = multi-user.target
上記の内容で、/lib/systemd/system/usb_storage.serviceとしてファイルを作り、
$ sudo systemctl enable usb_storage.service
と、サービスとして有効化する。
「RASPBERRY PI ZERO WをUSBメモリにする(イメージファイルを使用編)」への2件のフィードバック