29
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-09-06

概要

  • 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/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ケーブルを接続<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に認識されるので、そこでパーティション切り、フォーマットしてもいいかも。

PiZeroのUSBデバイスのメモ

29
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?