眼鏡止水

FPGA、ネットワーク機器、料理、そしてメガネ女子。

【KR260】積みKriaのファームウェアをアップデートする

概要

AMDのKria KR260 Robotics Starter Kitは、Kria K26 SOMを搭載するFPGAボードのキットです。 産業ロボットをはじめとするリアルタイム処理に関連した機能に加え、10GbpsのSFP+ポートも搭載している点が魅力的です。

筆者はこのKR260キットを昨年10月にMouserから購入してから放置していました。 いい加減この積みKriaを使い始めるべく、そのファームウェアをアップデートします。

www.mouser.jp

作業

基本的な内容はAMDのGetting StartedおよびWikiに準じます。

電源投入

まずは火入れです。 起動中の様子がわかるように、PCとKR260を付属のUSBケーブルで接続し、PC側のシリアルコンソールを115200BAUDで待機させます。 また、KR260の4つあるRJ45ポートのうち、右上のポートにLANケーブルを接続し、ネットワークアクセスができる状態にします。 ここで、念のため、Micro SDは外しておきます。 そして電源ケーブルを接続します。

KR260にUSB、LAN、そして電源ケーブルを接続した様子。

すると、Zynq MPのFSBLが起動し、シリアルコンソールにログが表示されます。

Xilinx Zynq MP First Stage Boot Loader
Release 2022.1   Jun  3 2022  -  09:06:13
MultiBootOffset: 0x40
Reset Mode      :       System Reset
Platform: Silicon (4.0), Running on A53-0 (64-bit) Processor, Device Name: XCZUUNKNEG
QSPI 32 bit Boot Mode
FlashID=0x20 0xBB 0x20
Pr▒NOTICE:  BL31: v2.6(release):145c616
NOTICE:  BL31: Built : 09:08:18, Jun  3 2022


U-Boot 2022.01-g14ce5558-dirty (Jun 03 2022 - 03:10:32 -0600), Build: jenkins-BUILDS-2022.1-som_qspi_generation-12

CPU:   ZynqMP
Silicon: v3
Detected name: zynqmp-smk-k26-xcl2g-rev1-sck-kr-g-rev1
Model: ZynqMP SMK-K26 Rev1/B/A
Board: Xilinx ZynqMP
DRAM:  4 GiB
PMUFW:  v1.1
...

なんか文字化けしてますが、気にせず続けます。 また、途中でPXEブートを試みていますが、PXEに非対応の環境では失敗します。

Micro SDを外した状態では、FSBLのコンソールが表示されます。

TFTP server died; starting again
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
Found 0 disks
No EFI system partition
tpm_tis_spi_probe: missing reset GPIO
DFU alt info setting: done
SF: Detected mt25qu512a with page size 256 Bytes, erase size 64 KiB, total 64 MiB
No UEFI binary known at 0x18000000
ZynqMP> 82;126R

無事に起動したようです。

Ubuntu 22.04のインストール

インストールといっても、ビルド済みのOSイメージをMicro SDに焼くだけです。

ダウンロードページからK26 SoM用のイメージをダウンロードして、お好みのツールでMicro SDに書き込みます。 ファイルはXZで圧縮されているためunxzコマンドなどで事前に展開しておき、その後書き込みます。 筆者はGetting Startedに倣ってbalenaEtcherを利用してMicro SDに書き込みました。

※balenaEtcherは圧縮ファイルを読んでフラッシュメモリに書き込むことができるようですが、筆者の環境ではエラーが出たため、おとなしく展開してから書き込みました。

Ubuntuのイメージを書き込めたら、一旦KR260の電源を切り、Micro SDを挿入して、再度電源を入れます。

ユーザ名、パスワードともにubuntuと入力してログインします。 新しくパスワードを設定するよう求められるので、適切に設定します。 そうして、やっとログインが完了します。

ファームウェアのアップデート

Wikiのから最新のファームウェア (Yocto版) をダウンロードします。 筆者はK26 Boot FW 1.02をダウンロードしました。 なお、リンクではAMD/Xilinxのログインページへと飛ぶため、wgetなどで直接ダウンロードできない点に注意しましょう。

ダウンロードしたら、SCPなどでKR26にそのファイルを転送します。 K26 SoM向けUbuntuイメージにはあらかじめSSHサーバがインストールされており、Ubuntuの起動直後からSSHでKR26へのアクセスが可能です。 (今後を見据えて、筆者はSSHの公開鍵認証の設定も行っておきました。)

どうやらK26用Ubuntuイメージは最初からMDNSに対応しているようなので、宛先ホスト名をkria.localすることでKR260と通信できるようです。 なお、この手法は同一ネットワーク内に同様のK26が2つ以上存在すると使えないと思われます。

# On the host machine
scp .\K26-BootFW-01.02-06140626.bin ubuntu@kria.local:~/

転送が完了したら、xmutilを用いてファームウェアの書き込みを行います。

$ sudo xmutil bootfw_update -i K26-BootFW-01.02-06140626.bin
Marking last booted image as bootable
Reading Image file
Updating Image B
Marking target image as non bootable
Writing Image to Image B partition
Marking target image as non bootable and requested image
Clearing multiboot register value
K26-BootFW-01.02-06140626.bin successfully updated to Image B partition

すると、ファームウェアのBスロットに新しいファームウェアがインストールされます。 xmutilコマンドでこれを確認します。

$ sudo xmutil bootfw_status
Image A: Bootable
Image B: Non Bootable
Requested Boot Image: Image B
Last Booted Image: Image A
XilinxSom_QspiImage_v2.0_06030313
ImageA Revision Info: XilinxSOM_BootFW_20220603

ImageB Revision Info: K26-BootFW-01.02-06140626

大丈夫ですね。 次回起動時はスロットBのイメージで起動することもわかります。

KR26のボードについているRESETボタンを押下し再起動します。 その後、再度ステータスを見て新しいファームウェアで起動していることを確認します。

$ sudo xmutil bootfw_status
Image A: Bootable
Image B: Non Bootable
Requested Boot Image: Image B
Last Booted Image: Image B
XilinxSom_QspiImage_v2.0_06030313
ImageA Revision Info: XilinxSOM_BootFW_20220603

ImageB Revision Info: K26-BootFW-01.02-06140626

Last Booted ImageがAからBに変わりました。 大丈夫そうですね。

ところで、ステータスではImage A: BootableおよびImage B: Non Bootableとなっています。 実は、ファームウェアアップデート直後は新しいファームウェアで起動するものの、それ以降は古いファームウェアにフォールバックしてしまうようです。 そこで、新しいファームウェアで永続的に起動するよう設定します

※当然ですが、この操作はファームウェアアップデート直後1回目の再起動後に行う必要があります。

$ sudo xmutil bootfw_update -v
Marking last booted image as bootable

これで完了のようです。 実際、ステータスと確認するとImage B: Bootableとなっています。

$ sudo xmutil bootfw_status
Image A: Bootable
Image B: Bootable
Requested Boot Image: Image B
Last Booted Image: Image B
XilinxSom_QspiImage_v2.0_06030313
ImageA Revision Info: XilinxSOM_BootFW_20220603

ImageB Revision Info: K26-BootFW-01.02-06140626

RESETボタンを再度押して再起動し、新しいファームウェアで起動していることを確認できたら完了です。

まとめ

本記事ではKria KR260にUbuntu 22.04をインストールし、ファームウェアのアップデートを行いました。 ファームウェアの永続化などは見落とす可能性が高いため、注意して作業する必要があると感じました。

次回以降はKR260でアプリケーションを動かしてみようと思います。