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:~$
のような結果を見ることができました.