LoginSignup
7
7

More than 1 year has passed since last update.

Raspberry PiをROM化しつつ読み書き用パーティションを追加する

Last updated at Posted at 2021-11-14

動機

Raspberry Piをいつでも強制電源オフしてよいシステムにしつつデータの読み書きはできるパーティションが欲しかった。

用意するもの

  • Raspberry Pi
  • Micro SD Card
  • Linuxが起動するマシンもしくは仮想マシン

準備

RaspbianをSDカードに焼いてRaspberry Piに挿して起動し、パーティションが自動で拡張されるところまでやっておく。そしたら電源をオフしてSDカードを取り外す。

パーティションの作成

Raspberry Pi上ではパーティションの操作ができないので、Linuxが動くマシンもしくは仮想マシンで行う。ここではmacOSのParallels上にインストールしたUbuntu 20.04の例で行う。

SDカードを確認

MacにSDカードを挿し、Parallels上のUbuntuに接続、bootとrootfsが自動でマウントされるのを確認。
Screen Shot 2021-11-14 at 21.50.22.png

gpartedをインストール、起動

$ sudo apt-get update
$ sudo apt-get gparted -y
$ sudo gparted

パーティションの作成とフォーマット

gpartedの右上のメニューからSDカードを選択。
Screen Shot 2021-11-14 at 21.56.44.png
rootfs(File Systemがext4のもの)をクリックして選択。
Screen Shot 2021-11-14 at 22.00.12.png
rootfs右クリックしてメニューからunmountを選択。
Screen Shot 2021-11-14 at 22.04.09.png
rootfsを右クリックしてメニューからResize/Moveを選択。
Screen Shot 2021-11-14 at 22.01.46.png
rootfsのサイズを縮小してResize/Moveボタンをクリック。この例では1024MB縮小。
Screen Shot 2021-11-14 at 22.05.47.png
PartitionメニューからNewを選択、File systemをfat32に、LabelをmydataとしてAddをクリック。
Screen Shot 2021-11-14 at 22.09.38.png
ここまでで下記の様になっているはず。
Screen Shot 2021-11-14 at 22.10.44.png
EditメニューからApply All Operationsを選択。
Screen Shot 2021-11-14 at 22.11.59.png
Applyをクリック。
Screen Shot 2021-11-14 at 22.12.50.png
処理が終わるまで待つ。時間がかかるかもしれない。
Screen Shot 2021-11-14 at 22.13.11.png
終わったら、Closeをクリック。
Screen Shot 2021-11-14 at 22.14.00.png
パーティションの作成とフォーマットが完了。
Screen Shot 2021-11-14 at 22.14.32.png
SDカードを取り出しMacに挿し直し、接続先をMacに変更。ディスクユーティリティを起動してできたパーティションを確認。
Screen Shot 2021-11-14 at 22.19.46.png
SDカードをMacから取り外す。

Raspberry Piで自動マウントする

Raspberry PiにSDカードを挿して電源を入れ、sshでログインする。このままではマウントされないので、/etc/fstabで設定をする。

$ sudo nano /etc/fstab

下記の様になっていると思うので、1行追加する。

/etc/fstab.
proc            /proc           proc    defaults          0       0
PARTUUID=9729c2e1-01  /boot           vfat    defaults          0       2
PARTUUID=9729c2e1-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

PARTUUIDの前半部分は前の2つのコピーで、後半の数字は1足した値にする。

/etc/fstab.
proc            /proc           proc    defaults          0       0
PARTUUID=9729c2e1-01  /boot           vfat    defaults          0       2
PARTUUID=9729c2e1-02  /               ext4    defaults,noatime  0       1
PARTUUID=9729c2e1-03  /mydata         vfat    auto,exec,umask=000    0       1

ここで保存。Raspberry Piを再起動し、sshでログインし直して/mydataが読み書き可能でマウントされていることを確認。
Screen Shot 2021-11-14 at 22.46.55.png

Overlay FSを使用してROM化

$ sudo raspi-config

Performance Optionsを選択。
Screen Shot 2021-11-14 at 22.37.47.png
P3 Overlay File Systemを選択。
Screen Shot 2021-11-14 at 22.38.49.png
Yesで。
Screen Shot 2021-11-14 at 22.42.05.png
終わったらOkで。
Screen Shot 2021-11-14 at 22.42.55.png
Would you like the boot partition to be write-protected?と聞かれるのでNoで。
Screen Shot 2021-11-14 at 22.43.32.png
その後raspi-configを終了して再起動。これ以後、書込みはすべてRAMディスク上に行われるので再起動すると保存されていないので注意。元に戻すには、raspi-configのPerformance OptionsでOverlay FSを無効にして再起動。

eMMCの場合

seeed reTerminalのようにRaspberry PiがCompute Module版でeMMCの場合、rpibootでストレージとして認識できるようにしてから行う。

Linuxの場合

$ sudo apt-get install libusb-1.0.0-dev
$ sudo apt-get install git
$ git clone https://github.com/raspberrypi/usbboot
$ cd usbboot
$ make
$ sudo make install
$ rpiboot

あとは上記のgpartedの部分から同じ。

macOS Big Surの場合

brewでlibusbがインストールできないので、ソースからビルド。

$ git clone https://github.com/libusb/libusb.git

中にXcodeのプロジェクトが入っているので、それをXcodeで開いてProduct->Archiveでビルド。
Screen Shot 2021-11-15 at 2.10.12.png
↑こんな風にできあがってるので、libusb.hを/usr/local/includeにコピー、libusb-1.0.0.dylibを/usr/local/libにコピー。

次にrpibootをビルド

$ git clone https://github.com/raspberrypi/usbboot
$ cd usbboot

main.cの一番最初の行を

main.c
#include <libusb-1.0/libusb.h>

#include <libusb.h>

に変更、保存。次にMakefileを

Makefile.
rpiboot: main.c msd/bootcode.h msd/start.h msd/bootcode4.h msd/start4.h
        $(CC) -Wall -Wextra -g -o $@ $< -lusb-1.0
↓
rpiboot: main.c msd/bootcode.h msd/start.h msd/bootcode4.h msd/start4.h
        $(CC) -Wall -Wextra -g -o $@ $< -lusb-1.0.0

に変更、保存。

$ make
$ sudo cp ./rpiboot /usr/local/bin/
$ rpiboot

すると、

Waiting for BCM2835/6/7/2711...

となるので、eMMCが載ってるCompute Moduleをストレージモードにして接続(reTerminalの場合、裏開けてスイッチを変更してから繋ぐ)。

ただし、Macからはなぜかbootパーティションしか見えなかったので、Parallels上でUbuntuを起動してそちらに繋いでgpartedしたらできた(以降は上記のgpartedの部分から同じ)。

7
7
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
7
7