Vitisなんか勉強したくない(2日目)

VitisやPetaLinuxの複雑怪奇現象を探ってみる。

ZYNQを起動するのに使っている成果物

まずは起動時に必要な最終成果物を確認してみた。

ここではSDカードに成果物を入れてZYNQ UltraScale+で実行する場合を想定している。

面倒くさいし、フロー図に描きこんでしまえ!

SDカードは2つのパーティションに分割することが多いだろう。

Boot用のパーティションとLinuxのRoot Filesystemのパーティションである。

Boot用のパーティションはFATでフォーマットされ、LinuxのRoot Filesystemはext4でフォーマットされることが多い。

Boot用パーティションには最低限、次のファイルが格納される。

  • BOOT.BIN
  • image.ub

BOOT.BIN

BOOT.BINはZYNQを起動するためのLinuxを起動するまでのバイナリが格納されている。

Vitis環境であれば概ね、次の4つのファイルが格納されている。

  • pmufw.elf(Platform Management Unit Firmware)
  • fsbl.elf(First Stage Boot Loader)
  • bl31.elf(ARM Trusted Firmware)
  • u-boot.elf

もし、BOOT.BINでPL(Plogramable Logic)を起動するのであれば、BitStreamも含まれる。

image.ub

image.ubはLinuxの次のバイナリが格納されている。

  • Image(Linux Kernel)
  • zynq.dtb(Device Tree Blob)

Xilinx社のドキュメントでよく目にするのはこのBOOT.BINとimage.ubではあるが、アプリケーションをVitisでコンパイルした次のバイナリも実行時はどこかに格納しなければいけない。

  • app.exe(Linuxでの慣例で実行アプリケーションに拡張子を付けないけど、ここでは便宜上、付けている)
  • app.xclbin(PLに展開するBitStreamを含んだバイナリ)

これらのバイナリはZYNQでLinuxが起動後に読み込めて実行できればいいので、SDカードのどちらのパーティションでも良いし、何らかの通信を使用してZYNQの外部から読み込んで実行しても良い。

VitisとPetaLinuxが複雑怪奇なのは個々に変更したいバイナリが多いのに最終的なバイナリがまとまってしまっている点だと考える。

各ファイルの変更が必要なケースは単純に考えるとつぎのように思い浮かべられる。

ファイル 変更が発生するケース
pmufw.elf たぶん、変更するケースはない
fsbl.elf PSの設定を変更したら変更する
bl31.elf たぶん、変更するケースはない
u-boot.bin Linuxをブートするデバイスを追加変更した場合など
Image Linux Kernelの変更を行った場合、ドライバを変更した場合など
zynq.dtb ドライバを変更した場合、
ドライバを追加削除したい場合など、
ドライバの固定パラメータを変更したい場合など
app.exe アプリケーション(OpenCD Host側)を変更した場合など
app.xclbin アプリケーション(OpenCD Kernel側)を変更した場合など

アプリケーション開発だけ見てもLinux Kernelのドライバの追加や修正、アプリもHostとKernelを問わず変更が発生する。

そして、ZYNQの場合、PLの回路を追加や修正をしたり、PSのパラメータを変更したりするケースが意外に多い。

ZYNQの変更を行った場合はPlatformの変更が発生するので次のファイルがケースによって変更が必要になる。

  • Image
  • zynq.dtb
  • app.exe
  • app.xclbin

Platformの変更で「変更が発生するケース」の表に示した各ケースが発生すればファイルの変更が必要になる。

例えば、PLの回路を変更したけど、Linuxのドライバやアプリケーションの修正は必要ないという場合、変更が必要なのはBitStreamが格納されているapp.xclbinだけである。

そのためにフローではVivado→PetaLinux→Vitis(Platformのための)→Vitisの経路をたどる必要がある。

ここでPetaLinuxとPlatformのためのVitisの経路は不要なのである。

不要なのにわざわざ通らなくてはならない。

通ったがために別の問題が発生するというのはよく起こること。

だから、VitisとPetaLinuxは難しい。

write: 2021/01/22/ 23:00:00