概要
-
Simple guide for setting up OTG modes on the Raspberry Pi Zero
のg_mass_storage
- ファイルを作って、それをマスストレージのディスクイメージとするらしい。
- ISOイメージのファイルをつかって、CD-ROMもできるらしい(要確認)。
-
/etc/modules
に記述しての、自動起動はできないので、起動スクリプトを書かないといけないと思う... - (2017-3-20追記)
-
単純に
/etc/rc.local
で、ウェイトを入れて、modprobe
すればよいみたい。/etc/rc.local# Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi # --- MassStorage --- /bin/sleep 5 sudo modprobe g_mass_storage file=/piusb.bin stall=0 # --- MassStorage --- exit 0
-
起動時に
loop,ro
で、マウント。USBホスト側での変更は再起動後に反映される。/etc/fstabproc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that # MassStorage マウント先(/mnt/msd)を作成しておくこと!! /piusb.bin /mnt/msd vfat loop,ro,auto 0 0
-
環境
- Raspberry Pi Zero
2016-05-27-raspbian-jessie-lite
- UART-USBケーブル (らずぱいのUARTと、PCをつないで、コンソールで操作する)
- microUSBケーブル (PC接続用)
- microUSBの口のAC電源(PiZeroの電源 - Power ON中に、microUSBを抜き差しする)
- Windows 7 (64bit)
手順
-
Raspbianを焼く
-
起動 (PWRから電源供給)
-
UART-USBケーブルを使って、ログイン
-
echo 'dtoverlay=dwc2' | sudo tee -a /boot/config.txt dtoverlay=dwc2
設定:/boot/config.txt
にdtoverlay=dwc2
追加 -
sudo reboot
=> 再起動 - microUSBケーブルははずしておく。 -
MassStorageのイメージファイル(
/piusb.bin
)を作成、g_mass_storageモジュールのロード/piusb.binを作成
1.44MBサイズで、パーティションなしなので、フロッピー?
sudo dd if=/dev/zero of=/piusb.bin bs=512 count=2880
sudo mkdosfs /piusb.bin
モジュールのロード
sudo modprobe g_mass_storage file=/piusb.bin
7. microUSBケーブルを接続<br>=> マスストーレジドライブが出てくる。。なんか、フロッピードライブ。。
![PiZero-MassStorage01.png](https://qiita-image-store.s3.amazonaws.com/0/75594/cbcedff2-72f0-09ca-4d9e-00284ec700fb.png)
8. 使い終わったら、PC側で イジェクトして、PiZero側は、`sudo sync; sudo rmmod g_mass_storage`でもしておく。
9. (2017-3-20追記) loopback、msdos形式でファイル`piusb.bin`マウントすれば、中身を見れる。
```bash:例
sudo mkdir /mnt/msd
sudo mount -o loop -t msdos /piusb.bin /mnt/msd
ls -l /mnt/msd
cd
sync
sudo umount /mnt/msd
sudo rmdir /mnt/msd
pi@raspberrypi:~$ sudo dd if=/dev/zero of=/piusb.bin bs=512 count=2880
2880+0 records in
2880+0 records out
1474560 bytes (1.5 MB) copied, 0.109404 s, 13.5 MB/s
pi@raspberrypi:~$ sudo mkdosfs /piusb.bin
mkfs.fat 3.0.27 (2014-11-12)
pi@raspberrypi:~$ lsmod
Module Size Used by
snd_bcm2835 23163 0
snd_pcm 95441 1 snd_bcm2835
snd_timer 22396 1 snd_pcm
snd 68368 3 snd_bcm2835,snd_timer,snd_pcm
dwc2 109939 0
udc_core 12769 1 dwc2
bcm2835_gpiomem 3823 0
bcm2835_wdt 4133 0
uio_pdrv_genirq 3718 0
uio 10230 1 uio_pdrv_genirq
ipv6 367607 20
pi@raspberrypi:~$ sudo modprobe g_mass_storage file=/piusb.bin
pi@raspberrypi:~$ lsmod
Module Size Used by
g_mass_storage 4555 0
usb_f_mass_storage 39457 2 g_mass_storage
libcomposite 49383 2 usb_f_mass_storage,g_mass_storage
snd_bcm2835 23163 0
snd_pcm 95441 1 snd_bcm2835
snd_timer 22396 1 snd_pcm
snd 68368 3 snd_bcm2835,snd_timer,snd_pcm
dwc2 109939 0
udc_core 12769 2 dwc2,libcomposite
bcm2835_gpiomem 3823 0
bcm2835_wdt 4133 0
uio_pdrv_genirq 3718 0
uio 10230 1 uio_pdrv_genirq
ipv6 367607 20
pi@raspberrypi:~$
...
...
~~~ PCに接続して、ファイル操作行い、メディアの取り外しを行う。
...
...
pi@raspberrypi:~$ sudo sync; sudo rmmod g_mass_storage
pi@raspberrypi:~$ sudo mkdir /mnt/msd
pi@raspberrypi:~$ sudo mount -o loop -t vfat /piusb.bin /mnt/msd
pi@raspberrypi:~$ ls -l /mnt/msd
total 1
drwxr-xr-x 2 root root 512 Mar 19 2017 test
pi@raspberrypi:~$ cat /mnt/msd/test/test.txt
ABCDEFG
pi@raspberrypi:~$ cd
pi@raspberrypi:~$ sync
pi@raspberrypi:~$ sudo umount /mnt/msd
pi@raspberrypi:~$ sudo rmdir /mnt/msd
その他
-
CD-ROMとなるには(要確認)
modprobe g_mass_storage file=/path/to/iso-image-file.iso cdrom=y
-
フロッピーとしてマウントされたのは、サイズのせい?(1.44MB)
-
HDDイメージ作成 ~ パーティションを作ってフォーマットする
例14.4MBのHDDイメージ
512 * 28800 bytes = 14.4MB
sudo dd if=/dev/zero of=/piusb.bin bs=512 count=28800
fdisk で、スタートセクタを2048にする。
sudo fdisk /piusb.bin
n
p
1
2048
t
c
w
パーティションを作ったら、/dev/loop0にマウント(?).
オフセット 512bytes/セクタ * 2048セクタ => 1024kbytes目がパーティション1のスタート
sudo losetup -o 1024k /dev/loop0 /piusb.bin
フォーマット
sudo mkfs.vfat /dev/loop0
sudo losetup -d /dev/loop0
sync
マスストレージモジュールロード
sudo modprobe g_mass_storage file=/piusb.bin
#終わったら、PCでイジェクトして、
sudo sync; sudo rmmod g_mass_storage
```shell-session:実行例
pi@raspberrypi:~$ sudo dd if=/dev/zero of=/piusb.bin bs=512 count=28800
28800+0 records in
28800+0 records out
14745600 bytes (15 MB) copied, 0.78584 s, 18.8 MB/s
pi@raspberrypi:~$ sudo fdisk /piusb.bin
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xbac5a697.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-28799, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-28799, default 28799):
Created a new partition 1 of type 'Linux' and of size 13.1 MiB.
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): c
If you have created or modified any DOS 6.x partitions, please see the fdisk documentation for additional information.
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.
Command (m for help): w
The partition table has been altered.
Syncing disks.
pi@raspberrypi:~$ sudo losetup -o 1024k /dev/loop0 /piusb.bin
pi@raspberrypi:~$ sudo mkfs.vfat /dev/loop0
mkfs.fat 3.0.27 (2014-11-12)
Loop device does not match a floppy size, using default hd params
pi@raspberrypi:~$ sudo losetup -d /dev/loop0
pi@raspberrypi:~$ sync
pi@raspberrypi:~$ sudo modprobe g_mass_storage file=/piusb.bin
pi@raspberrypi:~$
pi@raspberrypi:~$ sudo sync; sudo rmmod g_mass_storage
pi@raspberrypi:~$
- ↑を書いたけど、
dd
直後のまっさらなイメージファイルを使うと、未フォーマット状態で、Windowsに認識されるので、そこでパーティション切り、フォーマットしてもいいかも。