Raspberry Pi CM4で on-board eMMCと PCIeスロットのNVMe M.2 SSDからOSブート

Raspberry Pi Compute Module 4(CM4)向けのNVMe boot support のEEPROM( 2021-07-07 – Promote pieeprom-2021-07-06 to stable – STABLE )がリリースされたので、on-board eMMCと PCIeスロットに挿したNVMe M.2 SSDからのOSブートを試しました。安定した高速アクセスによるGUI操作はとても快適です。

目次

準備したパーツ

CM4は Raspberry Pi 4 Model B の産業・組み込み用途向けモデルです。無線LAN及びBluetoothの有無、RAMのサイズ、on-board eMMCのサイズにより多くのラインナップがあります。

CM4 (無線LAN、Bluetooth無モデル)
CM4 (無線LAN、Bluetooth無モデル)

CM4にはIOコネクタの実装がないので、専用のRaspberry Pi Compute Module 4 IO Board(以下、IOボード)とセットで使ってます。IOボードには、USB3.0の代わりにPCIeが、RTCとバックアップ用の電池ホルダ(CR2031)などが追加されています。
この PCIeスロットにNVMe M.2 SSD カードを挿します。PWM Fan付ヒートシンクは、「Raspberry Pi OSの設定」で65℃でFANがONになる設定にしています。

IOボード
IOボード
CM4をIOボードに装着
CM4をIOボードに装着
PWM Fan付ヒートシンクを装着
PWM Fan付ヒートシンクを装着
#名称仕様
1Raspberry Pi CM 4無線LAN及びBluetooth:無、
RAM:8GB、eMMC:32GB モデル
2Raspberry Pi CM 4 IO Board
3CM4用ヒートシンク
GeeekPi PWM Fan付(ZP-0112) 
サポートサイト
4ACアダプター12V 5A
5ジャンパーピン※J2ピンに利用
6PCI-E 3.0 x1レーン-
M.2 NGFF M-Key SSD Nvme
AHCI PCI Express アダプタカード
ラズベリーパイ財団の文書にカード要件の記載があります。
7NVMe M.2 SSD(2280)
・MZ-VPV2560
・MZ-V7S250
250GB 2280 m.2 pci express x4
※PCリプレスで余っていた手持ち品
※NVMe (non-volatile memory express)
8microB – A  USBケーブル※CM4 IOボードとPCのUSB接続用
9キーボートとマウス※手持ちのUSBレシーバ型
10Windows PC※CM4 eMMCのドライブマウント、OS書き込み
11Raspberry Pi 4B※EEPROMイメージの CM4 書込み 、ブートの設定
12NVMe M.2 SSD M Key
USB外付けケース
2242/2260/2280 SSD対応
※PC接続してフォーマット時に利用

on-board eMMCからRaspberry Pi OSを起動する手順メモ

CM4のeMMC は外付けのUSBメモリやmicroSDカードのように取り外せないので、PCに専用ツール rpiboot をインストールして USB大容量ストレージとして認識させてから 、IOボートとUSBケーブルでつないで、Raspberry Pi Imagerから on-board eMMC にOSを書き込みます。

WindowsPCとCM4をつないでon-board eMMCにOS書き込み

(1)rpiboot( Windowsインストーラ)をダウンロード してインストールしておきます。インストールが完了するとWinsowsメニューに「 rpiboot 」ができます。

(2)on-board eMMCを「USB 大容量ストレージ」モードに設定するために、IOボードの「Fit jumper to disable eMMC Boot」というラベルの付いたJ2ピンにジャンパピンを挿します。

(3)PCからUSBケーブルをIOボードの「USB Slave」ラベルのmicroUSBポートに差し込み、12V電源を入れます。IOボードの電源が入り、赤い D1 LED が点灯(J2ジャンパで eMMC ブートを無効にしているので CM4は起動しません)。

(4) 「rpiboot」を起動すると、コマンドが実行され、eMMC がストレージとしてマウントされます(D:¥など)。もし、FAT32でフォーマットしますか?とのポップアップメッセージが出たらOKします。これでeMMC ストレージはPCに接続した USB ドライブと同じように動作します。緑のD2 LEDが点灯

(5)「Raspberry Pi Imager」を起動してOSをeMMC ストレージ 「RPi-MSD-0001」に書き込みます。今回は「Raspberry Pi OS(32bit)」をセットアップしました。

(6) 書き込みが終了したら、電源を切って、USBケーブル、J2ジャンパーを外します。再度電源を入れると eMMC ストレージ に書き込んだ Raspberry Pi OS(32bit) が起動します。

J2にジャンパピン(基板上部の中央付近、赤丸のピン) を挿して、PCとUSBケーブル接続して 12V電源(右下)を入れる
J2にジャンパピン(基板上部の中央付近、赤丸のピン) を挿して、PCとUSBケーブル接続して 12V電源(右下)を入れると赤い D1 LED が点灯。 eMMC ストレージ がD:¥としてマウントされ ると 緑のD2 LEDが点灯。
Raspberry Pi OS(32bit)をeMMCストレージ( RPi-MSD-0001 )にフラッシュ
Raspberry Pi OS(32bit)をeMMCストレージ( RPi-MSD-0001 )にフラッシュ

USB2.0を有効化してマウスとキーボート接続(2022/02/25訂正)

Raspberry Pi Imager v1.7.1からインストールした32bit版と64bit版の「Raspberry Pi OS with desktop」コードネーム「bullseye」では、CM4 IOボードのUSB2.0はデフォルトで有効化されていました。「bullseye」ではUSB2.0有効化の手順は不要でした(2022/02/25追記)。

CM4 IOボードのUSB2.0は デフォルトでは有効化されていないので、USB2.0につないだマウスやキーボートが使えません。 configファイルを直接編集します。なお、(5)のRaspberry Pi Imagerで書き込んだ直後ではeMMC内には configファイルが見えませんでした。一回でもCM4を起動すると D:¥フォルダ内にconfig.txtファイルがあります。

(7) IOボード の電源を切った後、J2にジャンパーを挿して、PCとIOボードをUSBケーブルで接続します。 IOボード の電源を入れ、 PCで「rpiboot」を起動してCM4の eMMC ストレージ に保存されている「config.txt」ファイルに下記の3行を追記して保存します。

# Enable USB2.0
dtoverlay=dwc2
dr_mode=host

IOボード の 電源を切って、USBケーブル、J2ジャンパーを外します。

Raspberry Pi OSの初期設定

(8) LANケーブル、HDMIディスプレイ、マウス、キーボードをつないで電源を入れると Raspberry Pi OSの初期設定画面が立ち上がるので設定を行います。 その後、苺マークのメニューから「設定 」–>「Raspberry PIの設定」でSSHとVNC Serverを有効化を行いました。
設定完了後にCM4をShutdownして 電源を切ります。

NVMe M.2 SSDからRaspberry Pi OSを起動する手順メモ

CM4のEEPROMアップデート(2021/9/21 ファイル名の誤り訂正)

CM4の NVMe boot support のEEPROMが latest beta から stable になりました。
Release notes :2021-07-07 – Promote pieeprom-2021-07-06 to stable – STABLE
Firmware:pieeprom-2021-07-06.bin

CM4入手時点のバージョン日付は、vcgencmd bootloader_version で確認すると、Feb 16 2021 でした。CM4のEEPROM書き換えはrpi-eeprom-updateコマンドではできないので、Raspberry PI 4BのRaspberry Pi OSを使って、EEPROMイメージファイルを作って rpibootコマンドで CM4 に書き込みます。

下記はEEPROMイメージファイル作成、書き込み時にRaspberry PI 4BのLXTerminalから打ち込んだコマンドのメモです。

0x1 SD card or eMMC on CM4
0x6 NVMe SSD

Raspberry Pi 4Bに生成されたusbbootフォルダ
Raspberry Pi 4Bに生成されたusbbootフォルダ
sudo apt install git
git clone --depth=1 https://github.com/raspberrypi/usbboot
cd usbboot
sudo apt install -y libusb-1.0-0-dev
make
cd recovery
rpi-eeprom-config /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-07-06.bin -o boot.conf
sudo nano boot.conf   ※BOOT_ORDER=0xf16を追加
rpi-eeprom-config -c boot.conf -o pieeprom.bin /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-07-06.bin
sha256sum pieeprom.bin | awk '{print $1}' > pieeprom.sig
sudo ../rpiboot -d .

rpibootの実行で Raspberry Pi 4B が待機状態になるので、4B のUSBポートとCM4 IOボードのmicroUSBポートをUSBケーブルで接続し、CM4 IOボードのJ2ジャンパーをショートして、CM4 IOボードの電源をオンにします。
電源をオンすると待機状態の画面が動き出して書き込みが始まります。書き込みが終わったら、CM4の電源を切ります。

rpibootの実行。Second stage boot server doneで正常終了
rpibootの実行。Second stage boot server doneで正常終了

CM4のUSBケーブル、J2ジャンパーを外して電源をオン、eMMCのRaspberry Pi OSを起動してバージョン日付を確認します。

vcgencmd bootloader_version

更新後のbootloaderバージョン日付は「July 6 2021」になりました。

 入手時点のbootloaderバージョン日付
入手時点のbootloaderバージョン日付
更新後のbootloaderバージョン日付を確認
更新後のbootloaderバージョン日付を確認

PCIeスロットにブランクのNVMe M.2 SSDカードを挿して認識するかを確認

NVMe M.2 SSDカードはUSB外付けケースを使ってWindows PCに接続して、FAT32でフォーマットしておきます。

Raspberry Pi Imagerの「Erase」でFAT32でフォーマットするのが簡単ですが、フォーマットできない大容量サイズの場合は、Fat32Formatterといったフリーソフトを利用させていただきました(2024/07/03追記)。

FAT32でフォーマットしたNVMe M.2 SSDカードを実装したPCIeアダプターカードを、電源を切った状態で、IOボードの PCIeスロットに挿します。このPCIeアダプターカードは、NVMe M.2 SSDにアクセスがあると緑色のLEDが眩し過ぎるくらい点滅します。

今回テストしたNVMe M.2 SSD (2280) のMZ-V7S250(上)、MZ-VPV2560(中)と2種類のPCIeアダプターカード
今回テストしたNVMe M.2 SSD (2280) のMZ-V7S250(上)、MZ-VPV2560(中)と2種類のPCIeアダプターカード
  IOボードのPCIe x1スロットにセット
IOボードのPCIe x1スロットにセット。

eMMCからブートしたRaspberry Pi OSから、NVMe M.2 SSD を下記コマンドで確認したところ、無事ストレージとして認識しました。

lsblk
ls -l /dev/nvme*
NVMe M.2 SSD を ストレージとして認識
NVMe M.2 SSD を ストレージとして認識

NVMeブートに変更(2021/9/21 ディレクトリ名の誤り訂正)

下記は Raspberry Pi 4BのLXTerminalで打ち込んだコマンドラインのメモです。前記した CM4のEEPROMアップデートと同様に、J2ジャンパーをつけて、Raspberry Pi 4BとUSBケーブルをつないでからCM4の電源を入れます。下記のコマンドを実行してrpibootを実行します。

cd usbboot/recovery
sed -i 's/\(BOOT_ORDER=.*\)6\(.*\)/\1\26/' boot.conf
./update-pieeprom.sh
cd ..
sudo ./rpiboot -d recovery

0x6 NVMe SSD
0x1 SD card or eMMC on CM4

NVMeブートに変更
NVMeブートに変更

rpibootが完了したら、USBケーブルとJ2ジャンパを抜いてCM4 IOボードの電源を入れなおします。
なお、 NVMeブート変更しても NVMe M.2 SSD には未だOSがインストールされていないので、eMMCで起動します。

引き続き、eMMCのRaspberry Pi OSを NVMe M.2 SSD にコピー、ファームウェアやカーネルなどを最新のプレリリースバージョンにアップデートすることで NVMeブート設定が完了します。

eMMCのRaspberry Pi OSをNVMe M.2 SSDにコピー

CM4のRaspberry Pi OSの苺メニューの「SD Card Copier」でコピーします。その際、「New Partition UUIDs」にチェックを入れます。

SD Card CopierでeMMCをNVMeのM.2 SSDにコピー
SD Card CopierでeMMCをNVMeのM.2 SSDにコピー

NVMeディスクのファームウェアとカーネルを最新バージョンにアップデート

コピーが完了したら、引き続き、VideoCoreファームウェア、Raspberry Pi OS Linuxカーネルなどを最新のプレリリースバージョンにアップデートします。
CM4のRaspberry Pi OSのLXTerminalから打ち込んだコマンドラインのメモです。

mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo mount /dev/nvme0n1p1 mnt/fat32
sudo mount /dev/nvme0n1p2 mnt/ext4
sudo ROOT_PATH=mnt/ext4 BOOT_PATH=mnt/fat32 rpi-update
NVMeディスクのファームウェアとカーネルを最新のリリースバージョンにアップデート(画面は2021/07/30時点)
NVMeディスクのファームウェアとカーネルを最新のリリースバージョンにアップデート(画面は2021/07/30時点)

NVMeブートの動作検証

アップデート完了後に再起動すると、NVMeブートでRaspberry Pi OSが起動することを確認できました。PCIeスロットのNVMe M.2 SSDカードを取り外すと、eMMCからOSブートします。

NVMe M.2 SSDブートしたデスクトップの壁紙は、間違わないように「設定」→「外観の設定」「画像」で「cliff.jpg」に変更しています。

vcgencmd bootloader_version
lsblk
ls -l /dev/nvme*
NVMeブートしたRaspberry Pi OS
NVMeブートしたRaspberry Pi OS

NVMe M.2 SSDの速度をhdparmで簡易測定

Raspberry Pi OS(32bit) をNVMeブートした NVMe M.2 SSDの速度をhdparmを使って簡易測定しました。

sudo apt install hdparm
sudo hdparm -t /dev/nvme0n1
sudo hdparm -t /dev/mmcblk0
 -t:Timing buffered disk reads
 -T:Timing cached reads
接続コネクタhdparm -t  (MB/s)
※5回平均
接続デバイス
1eMMC83on-board eMMC 32GB

2

PCIe Gen2.0 x 1socket

333
376
NVMe M.2 SSD
MZ-VPV2560 256GB
MZ-V7S250 256GB

参照したサイト (2021/8/12 URL見直し)

CM4のeMMCブート、NVMeブートの設定手順は、ラズベリーパイ財団の下記Webサイトのドキュメントを参照しました。
NVMe SSD Boot – raspberrypi.org
Raspberry Pi USB booting code, moved from tools repositor – Github
Flashing the Compute Module eMMC – raspberrypi.org
  Mistake in documentation, “Flashing the Compute Module eMMC”- forums
Raspberry Pi 4 bootloader configuration – raspberrypi.org
Raspberry Pi 4 boot EEPROM – raspberrypi.org
Raspberry Pi 4 boot flow – raspberrypi.org
Raspberry Pi4 bootloader EEPROM release notes – github.com
  2021-07-07 – Promote pieeprom-2021-07-06 to stable – raspberrypi.org
rpi-eeprom-firmware at master · raspberrypi-rpi-eeprom · GitHub

Compute Module 4 specification – raspberrypi.org
Compute Module 4 IO Board specification – raspberrypi.org
Compute Module 4 Datasheet – raspberrypi.org
Compute Module 4 IO Board Datasheet – raspberrypi.org
Raspberry Pi – GitHub

Raspberry Pi 4 Model B specifications – Raspberry Pi
Raspberry-Pi-4-Product-Brief.pdf (raspberrypi.org)
SCHEMATIC1 : REDUCED SCHEMATICS (raspberrypi.org)

よかったらシェアしてね!
  • URLをコピーしました!
目次