概要
-
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
使い終わったら、PC側で イジェクトして、PiZero側は、
sudo sync; sudo rmmod g_mass_storage
でもしておく。-
(2017-3-20追記) loopback、msdos形式でファイル
piusb.bin
マウントすれば、中身を見れる。例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
実行例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に認識されるので、そこでパーティション切り、フォーマットしてもいいかも。