やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Raspberry Pi 4B のファームウェアを更新する

 USB boot に対応したファームウェアにするために。

情報源

目的

 新しく買ったラズパイ4(8GB)がある。これをUSBブートしたい。

背景

 ラズパイ4Bは2020-12-11のアップデートでUSBブートに対応した。なのでそれ以降のファームウェアでないとUSBブートできない。未対応のときは一旦SDカードでブートしてからファームウェアを更新する必要がある。

 私のラズパイは2021-07-20に購入したラズパイ4B(8GB)。USBブートさせようとしたが、ブート画面をみるとファームウェアの日付が2020-09-03だった。古いためかUSBブートできなかった。よってSDカードでブートさせてファームウェアを更新する必要がある。

必要なもの

手順

 現在のファームウェアのバージョンを確認する。

$ vcgencmd bootloader_version
Sep  3 2020 13:11:43
version c305221a6d7e532693cc7ff57fddfc8649def167 (release)
timestamp 1599135103
update-time 0
capabilities 0x00000000

 ファームウェアを更新する。

sudo apt update
sudo apt upgrade

 upgradeでなくfull-upgradeのほうがいいかもしれない。

sudo apt full-upgrade -y

 所々で何度か質問される。入力せねば先に進まないため厄介。時間がかかるくせに、途中で質問しやがるため、放置しているとムダに時間をロスする。さりとて張り付いていると長い。頼むからよしなにやってくれ。わかるだろ? アップデートするって言ってるだろが。

設定ファイル '/etc/default/rpi-eeprom-update'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** rpi-eeprom-update (Y/I/N/O/D/Z) [デフォルト=N] ? Y
新バージョンの設定ファイル /etc/default/rpi-eeprom-update をインストールしています ...

 使えるファームウェアを確認する。みづらい。たのむから改行してくれ……。バカなの?

$ ls /lib/firmware/raspberrypi/bootloader/stable/
pieeprom-2020-04-16.bin  pieeprom-2020-07-16.bin  pieeprom-2020-09-03.bin  pieeprom-2021-01-11.bin  pieeprom-2021-02-16.bin  pieeprom-2021-04-29.bin  recovery.bin        vl805-000138a1.bin
pieeprom-2020-06-15.bin  pieeprom-2020-07-31.bin  pieeprom-2020-12-11.bin  pieeprom-2021-01-16.bin  pieeprom-2021-03-18.bin  pieeprom-2021-07-06.bin  vl805-000137ad.bin

 とりあえず最新日付のやつを使えばいいだろ。/lib/...とかいうパスは謎。参考サイトからパクっただけ。

sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-07-06.bin
*** INSTALLING /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-07-06.bin  ***

   CURRENT: 2020\u5e74  9\u6708  3\u65e5 \u6728\u66dc\u65e5 12:11:43 UTC (1599135103)
    UPDATE: 2021\u5e74  7\u6708  6\u65e5 \u706b\u66dc\u65e5 10:44:53 UTC (1625568293)
    BOOTFS: /boot

EEPROM updates pending. Please reboot to apply the update.
To cancel a pending update run "sudo rpi-eeprom-update -r".

 英語のメッセージを翻訳すると以下。

EEPROMの更新は保留中です。再起動してアップデートを適用してください。
保留中の更新をキャンセルするには、「sudorpi-eeprom-update-r」を実行します。

 再起動しないとアップデートされないっぽい。しゃーねーな。

reboot

 再起動後、現在のバージョンを確認。

vcgencmd bootloader_version
Jul  6 2021 11:44:53
version c258ef8fe1d2334a750078b17dab5e2c1a1787fc (release)
timestamp 1625568293
update-time 1626764760
capabilities 0x0000007f

 OK! 日付が指定した版2021-07-06になっていることを確認した。

 あとは以下のようにUSBブートするかどうか確認するだけ。

  1. シャットダウンする
  2. 電源ぬく
  3. SDカードを抜く
  4. USBブートしたいSSDUSB3.0に挿す
  5. 電源さす
  6. USBブートすればOK!

 USBブートするとき、初回ブートなら数分くらい時間がかかるかもしれない。ディスク領域を広げたりする作業を自動でやってくれている。画面がなかなか進まなくても信じて待つべし。まちがってもフリーズしたと思い込んで電源をぶっこぬいたりしないように。

 と思ったが、エラーが出てブートしなかった。次回につづく。

 上記は書き込みミスによるものだが、正しく書き込んだ後にブートさせようとするとフリーズした。1時間30分放置しても変わらなかった。原因不明。もしや専用ツールで書き込まないのダメなのか?