Raspberry Pi4 : USB BOOT

Raspberry Pi4はUSB3.0が使える。折角なので、USBメモリからブートできるときはmicro sd-cardよりもUSBメモリからブートするように設定しておく。2020/8時点ではファームウェアの更新をしないとUSBメモリからのブートは出来ないようなのでファームウェアの更新作業を始めに行う。

まずは公式(https://www.raspberrypi.org/downloads/raspberry-pi-os/)からRaspberry Pi OSをダウンロードする。今回はFull版(2020-05-27-raspios-buster-full-armhf.zip)を使用したが、Lite版でも問題は無いと思われる。作業前のアップデートで時間を浪費しない様にFull版は使わない方がいい。

Rufusを使ってRaspberry Pi OSをsd-cardにセットアップする。Rufusはzipファイルを処理できるのでダウンロードしたzipファイルをインプットに指定すればよい。

作成したRaspberry Pi OSの設定を行う。初回ログインはユーザー名がpi、パスワードがraspberryになる。デフォルトではsshdが動作していないようなのでsshdを起動させる。

pi@raspberrypi:~ $ passwd
pi@raspberrypi:~ $ sudo su -
root@raspberrypi:~# passwd
root@raspberrypi:~# systemctl enable ssh
root@raspberrypi:~# systemctl start ssh

次にソフトウェアの最新化を行う。

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt full-upgrade

ファームウェアを更新する前に導入したいファームウェアのリリースステータスを指定する。すでにusbブートに対応したstableがリリースされているのでstableを指定する。(初期値はcriticalだった)

pi@raspberrypi:~ $ sudo vi /etc/default/rpi-eeprom-update
pi@raspberrypi:~ $ cat /etc/default/rpi-eeprom-update
FIRMWARE_RELEASE_STATUS="stable"

USBブートに対応したファームウェアをインストールする。このまま書き込むとSDカード→USBメディアの順でブートするので順番を変更したい場合は後述する手順を踏む。

pi@raspberrypi:~ $ sudo rpi-eeprom-update -d -a
BCM2711 detected
Dedicated VL805 EEPROM detected
BOOTFS /boot
*** INSTALLING EEPROM UPDATES ***
BOOTLOADER: update available
CURRENT: Thu 16 Apr 2020 05:11:26 PM UTC (1587057086)
 LATEST: Fri 31 Jul 2020 01:43:39 PM UTC (1596203019)
 FW DIR: /lib/firmware/raspberrypi/bootloader/stable
VL805: update available
CURRENT: 000137ad
 LATEST: 000138a1
BOOTFS /boot
EEPROM updates pending. Please reboot to apply the update.
pi@raspberrypi:~ $
pi@raspberrypi:~ $sudo reboot
~~~~ REBOOT ~~~~
pi@raspberrypi:~ $ sudo vcgencmd bootloader_version
Jul 31 2020 14:43:39
version f8d1dc69144b10b4bd78b4b6d08658ac3005726d (release)
timestamp 1596203019
pi@raspberrypi:~ $
pi@raspberrypi:~ $ vcgencmd bootloader_config
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
ENABLE_SELF_UPDATE=1
DISABLE_HDMI=0
BOOT_ORDER=0xf41

ブート時はUSBメモリを優先したいのでBOOT_ORDERを書き換える。bootloader configの設定については公式(https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md)を参照。

pi@raspberrypi:~ $ sudo su -
root@raspberrypi:~# ls /lib/firmware/raspberrypi/bootloader/stable/
pieeprom-2020-04-16.bin  pieeprom-2020-07-16.bin  recovery.bin             vl805-000138a1.bin
pieeprom-2020-06-15.bin  pieeprom-2020-07-31.bin  vl805-000137ad.bin
root@raspberrypi:~# cp /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-07-31.bin pieeprom.bin
root@raspberrypi:~# rpi-eeprom-config pieeprom.bin > bootconf.txt
root@raspberrypi:~# vi bootconf.txt
root@raspberrypi:~#
root@raspberrypi:~# cat bootconf.txt
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
ENABLE_SELF_UPDATE=1
DISABLE_HDMI=0
BOOT_ORDER=0xf14

root@raspberrypi:~# rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt pieeprom.bin
root@raspberrypi:~# ls
bootconf.txt  pieeprom.bin  pieeprom-new.bin

作成したpieeprom-new.binをファームウェアとして適用する。

root@raspberrypi:~# rpi-eeprom-update -d -f ./pieeprom-new.bin
BCM2711 detected
Dedicated VL805 EEPROM detected
BOOTFS /boot
*** INSTALLING ./pieeprom-new.bin  ***
BOOTFS /boot
EEPROM update pending. Please reboot to apply the update.
root@raspberrypi:~# reboot

再起動後にbootloader_configを確認する。

pi@raspberrypi:~ $ vcgencmd bootloader_version
Jul 31 2020 14:43:39
version f8d1dc69144b10b4bd78b4b6d08658ac3005726d (release)
timestamp 1596203019
pi@raspberrypi:~ $
pi@raspberrypi:~ $ vcgencmd bootloader_config
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
ENABLE_SELF_UPDATE=1
DISABLE_HDMI=0
BOOT_ORDER=0xf14

USBメモリとsd-cardを同時にセットして、USBメモリからブートされるかを確認する。今回はUSBメモリ側に使用中のRaspberry Pi OS、SD-card側にopenSUSEをセットしているので、Raspberry Pi OSが起動すればO.K.

root@raspberrypi:~# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 58.2G  0 disk
tqsda1        8:1    1  256M  0 part /boot
mqsda2        8:2    1   58G  0 part /
mmcblk0     179:0    0 28.8G  0 disk
tqmmcblk0p1 179:1    0   64M  0 part /media/pi/EFI
tqmmcblk0p2 179:2    0  500M  0 part
mqmmcblk0p3 179:3    0 28.3G  0 part /media/pi/ROOT
root@raspberrypi:~#
root@raspberrypi:~#
root@raspberrypi:~# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4       58G  6.4G   49G  12% /
devtmpfs       devtmpfs  1.8G     0  1.8G   0% /dev
tmpfs          tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs          tmpfs     1.9G   17M  1.9G   1% /run
tmpfs          tmpfs     5.0M  4.0K  5.0M   1% /run/lock
tmpfs          tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1      vfat      253M   54M  199M  22% /boot
tmpfs          tmpfs     383M     0  383M   0% /run/user/1000
/dev/mmcblk0p3 ext4       28G  4.6G   22G  18% /media/pi/ROOT
/dev/mmcblk0p1 vfat       64M  8.5M   56M  14% /media/pi/EFI
USB3.0側に接続したUSBメモリがSD-Cardよりも優先されてブート