Help us understand the problem. What is going on with this article?

[メモ] Raspberry Pi ZeroをUSBマスストレージデバイスとして使う

More than 3 years have passed since last update.

概要

  • Simple guide for setting up OTG modes on the Raspberry Pi Zerog_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/fstab
      proc            /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)

手順

  1. Raspbianを焼く
  2. 起動 (PWRから電源供給)
  3. UART-USBケーブルを使って、ログイン
  4. echo 'dtoverlay=dwc2' | sudo tee -a /boot/config.txt dtoverlay=dwc2
    設定: /boot/config.txtdtoverlay=dwc2追加

  5. sudo reboot
    => 再起動 - microUSBケーブルははずしておく。

  6. 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ケーブルを接続
    => マスストーレジドライブが出てくる。。なんか、フロッピードライブ。。
    PiZero-MassStorage01.png

  8. 使い終わったら、PC側で イジェクトして、PiZero側は、sudo sync; sudo rmmod g_mass_storageでもしておく。

  9. (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に認識されるので、そこでパーティション切り、フォーマットしてもいいかも。


PiZeroのUSBデバイスのメモ

mt08
ツイッターアカウントと紐づけてみた。[2019-11-26]
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away