reTerminal USBブート

Seeed K.K.の松岡です。

reTerminalはストレージとしてeMMCを内蔵しているのでマイクロSD選びに悩まなくて良いです。相性とか速度とか。ただ、開発時に頻繁にOSを切り替えるときは不便です。Raspberry Pi OSの32bitと64bitの両方に対応したアプリケーションを開発しているときなど。
このようなときに、reTerminalをUSBブートできるようにしておくと便利です。今回は、reTerminalをUSBブート可能にする設定方法を紹介します。

f:id:matsujirushix:20220104144324p:plain

USBブートとは?

USBブートとは、USBメモリに入っているOSイメージから起動する機能です。
reTerminalが採用しているCompute Module 4には、eMMCやUSBメモリ、ネットワークなど、様々なデバイスから起動することが可能です(ブート可能なデバイスについてはここに書かれています)。

reTerminalのブート順序

reTerminalの工場出荷時は、雑に言うとeMMC -> USBメモリ -> ネットワークの順にブートを試みる設定で、さらに、eMMCにOSイメージが書き込んであります。そのため、OSイメージが入ったUSBメモリを差して電源オンしても、USBメモリからブートすることはありません。

具体的には、このブートを試みる順序の設定はBootloader ConfigurationのBOOT_ORDERというもので、vcgencmd bootloader_configコマンドで現在の設定値を確認することができます。

工場出荷時のboot.conf:

$ vcgencmd bootloader_config
[all]
BOOT_UART=0
WAKE_ON_GPIO=0
POWER_OFF_ON_HALT=1

# Try  SD- > USB PCIe MSD -> USB 2.0 BCM XHCI -> Network ->  Loop
BOOT_ORDER=0xf2541

# Set to 0 to prevent bootloader updates from USB/Network boot
# For remote units EEPROM hardware write protection should be used.
ENABLE_SELF_UPDATE=1

reTerminalの工場出荷時は0xf2541と設定してあります。ちょっと分かりにくいのですが、1桁がデバイスを示していて、右から左の順にブートを試みます。
0xf2541なので、

  • 1 ... SD CARD (reTerminalの場合はeMMC)
  • 4 ... USB-MSD (reTerminalの場合はデバイス無し)
  • 5 ... BCM-USB-MSD (reTermialの場合はUSBメモリ)
  • 2 ... NETWORK (reTerminalの場合はネットワーク)
  • f ... RESTART (1->4->5->2でブートできなかった場合は、最初からやり直す)

という意味です。

USBブートを優先にする

それでは、USBメモリからブートできるようにBootloader ConfigurationのBOOT_ORDERを0xf15に設定変更しましょう。

  • 5 ... BCM-USB-MSD (reTermialの場合はUSBメモリ)
  • 1 ... SD CARD (reTerminalの場合はeMMC)
  • f ... RESTART (1->4->5->2でブートできなかった場合は、

Bootloader ConfigurationはCompute Module 4のEEPROMに書いておくのですが、reTerminal上のアプリケーションから直接書くことはできません。手元のPCでEEPROMイメージを作成して、rpibootコマンドを使ってUSB経由で書き込みます。EEPROMイメージを作成するupdate-pieeprom.shコマンドがWindowsでは動かないので、ここではWSLのUbuntuを使います。

EEPROMイメージを作成

GitHubからBootloaderを取得して、Bootloader Configurationをセットアップします。Bootloader Configurationはboot.confに書いてください。

Windows PC(WSL):

$ git clone --depth=1 https://github.com/raspberrypi/usbboot
$ cd usbboot/recovery
$ vi boot.conf

こちらがUSBブートを有効にしたboot.confです。

USBブート有効なboot.conf:

[all]
BOOT_UART=0
WAKE_ON_GPIO=0
POWER_OFF_ON_HALT=1

# USB 2.0 BCM XHCI -> SD card -> Loop
BOOT_ORDER=0xf15

# Set to 0 to prevent bootloader updates from USB/Network boot
# For remote units EEPROM hardware write protection should be used.
ENABLE_SELF_UPDATE=1

update-pieeprom.shを実行してください。EEPROMイメージが作成されます。

Windows PC(WSL):

$ ./update-pieeprom.sh

WSLからWindowsドライブへファイルをコピーして、

Windows PC(WSL):

$ mkdir /mnt/c/usbboot_recovery
$ cp -p * /mnt/c/usbboot_recovery

rpibootコマンドを使ってEEPROMイメージをreTerminalへ転送します。このとき、reTerminalはブートモードにして接続しておく必要があります。こちらを参照ください。

Windows PC(コマンドプロンプト):

C:\> "C:\Program Files (x86)\Raspberry Pi\rpiboot.exe" -d C:\usbboot_recovery

これで、USBブートが有効になりました。
USBメモリへのOSイメージのインストールは、Raspberry Pi Imagerを使うと簡単です。

動画

f:id:matsujirushix:20220104142443g:plain

参考リンク

変更履歴

日付 変更者 変更内容
2022/1/4 松岡 作成