Seeed K.K.の松岡です。
reTerminalはストレージとしてeMMCを内蔵しているのでマイクロSD選びに悩まなくて良いです。相性とか速度とか。ただ、開発時に頻繁にOSを切り替えるときは不便です。Raspberry Pi OSの32bitと64bitの両方に対応したアプリケーションを開発しているときなど。
このようなときに、reTerminalをUSBブートできるようにしておくと便利です。今回は、reTerminalをUSBブート可能にする設定方法を紹介します。
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を使うと簡単です。
動画
参考リンク
変更履歴
日付 | 変更者 | 変更内容 |
---|---|---|
2022/1/4 | 松岡 | 作成 |