KV260のBoot FWのアップデート

Pocket

KV260で公式のUbuntu 22.04を使おうとしたら Boot Firmware が古くてブートできなかったので更新して事なきを得ましたよ,という話.

ことのはじまり

Kria KV260 Vison AI Starter Kit 向けに Ubuntu 22.04 が公開されています.これまで特に困っていなかったのでUbuntu 20.04を使っていたのですが,そろそろ22.04に移行してみようかとディスクイメージをSDカードに書いて起動しようとするも起動せず…

起動時メッセージをUARTで眺めてみると,

...
[   17.451167] alua: device handler registered
[   17.454602] systemd-journald[519]: File /var/log/journal/51e779f9d8744d228d23aebdf3a8b34e/system.journal corrupted or uncleanly shut down, renaming and replacing.
[   17.470258] emc: device handler registered
[   17.500224] rdac: device handler registered
[   20.179629] tpm tpm0: A TPM error (256) occurred attempting the self test

まですすんで以降ブートプロセスがすすんでいません.

調べてみると Does anyone know what a TPM error (256) during self-test portion of Kira Vision starter Kit boot up mean? に似たような質問が.その中に boot firmware の更新に言及している人がいたので試してみました.

なお,ドキュメントには,ちゃんと boot firmware についての言及がありました.

Ubuntu 20.04でアップデート

基本的にアップデート方法は Kria K26 SOM/Developer Resources/Boot FW Update Process/Boot FW via xmutil に書いてある通りです.

いくつか方法はあるようですが,ファイル操作などや準備が楽そうだなということで,KC260上でUbunut 20.04を起動してコマンドラインでアップデートする方法を選択.Ubuntu 20.04は公式イメージをそのまま使います

xlnx-configのインストール

PetaLinuxで作った環境では xmutil コマンドでboot firmwareの操作ができるようですが(未確認),Ubuntu 20.04にはxmutilコマンドは入っていません.その代わりにsnapでインストールする xlnx-config 経由で同様の操作を実行するようです.xlnx-config のインストールは次の通り.

sudo snap install xlnx-config --classic --channel=1.x

インストールしたら,xlnx-config --xmutil ほげほげ として xmutil でできる操作が実行できます(xmutilの前にはハイフン記号が二つ必要なので注意).

Boot Firmwareのダウンロード

Boot Firmware Updates から最新の 2022.1 Boot FW Update をダウンロードして,KV260で動作するUbuntu 20.04上のホームディレクトリにコピーします.

Fimwareアップデート

sudo xlnx-config --xmutil bootfw_update -i BOOT.BIN

とアップデートコマンドを実行します.

ubuntu@kria:~$ sudo xlnx-config --xmutil bootfw_update -i BOOT.BIN
Marking last booted image as bootable
Reading Image..
Marking target image non bootable
Writing Image..
Marking target image as non bootable and requested image
BOOT.BIN updated successfully
ubuntu@kria:~$

という感じで,successfully でコマンドの実行が完了します.

終わったらリブートします.おまじない的に sync; sync; sync とかしたあとで,ボード上の RESET ボタンを押します.

無事に Ubuntu 20.04 が起動してきたら,ログインして,

sudo xlnx-config --xmutil bootfw_update -v

と,次回以降もアップデートしたBoot Firmwareで起動するようにベリフィケーションを実行します.逆に言うと,これをしなければ,次回リブート時はアップデート前の元のBoot Firmwareで起動してきます.よくできてます.

終わったら,halt -p などでOSを落としてアップデートはおしまいです.

Ubuntu 22.04の実行

Ubuntu 22.04のイメージを書きこんだSDカードに入れ替えて再び電源を投入すると,今度は無事にUbuntu 22.04が立ち上がりました.

めでたし,めでたし.

ちなみに Ubuntu 22.04 には xmutil コマンドが同梱されていて,bootfw_status は,

ubuntu@kria:~$ sudo xmutil bootfw_status
Image A: Bootable
Image B: Bootable
Requested Boot Image: Image A
Last Booted Image: Image A
XilinxSom_QspiImage_v1.1_20210422

ImageA Revision Info: XilinxSOM_BootFW_20220915

ImageB Revision Info: XilinxSOM_BootFW_20220915

ubuntu@kria:~$

のような結果を見ることができました.