前回
前回はPetaLinuxでLinux環境を構築するところまでを解説しました。
今回は前回作成したSDKファイルを用いてVitisでプラットフォームを作成し、vaddプログラムを実行するところまでを解説しようと思います。
Vitis Platformの作成
まず、ultra96v2_pkgフォルダ等を作成します。
mkdir ultra96v2_pkg
cd ultra96v2_pkg
mkdir pfm
※pfmフォルダはプラットフォームのパッケージング用ファイルを格納するフォルダです。
次にSDKを展開します。
cd ultra96v2_plnx/images/linux
./sdk.sh -d ../../../ultra96v2_pkg/
次に、pfmフォルダに必要なファイルを格納します。まず以下のフォルダを作成します。
cd ultra96v2_pkg/pfm
mkdir sd_dir
mkdir boot
sd_dirフォルダにはultra96v2_plnx/images/linux
フォルダから次のファイルをコピーします。以下のファイルはV++によるFAT32パーティション作成のために必要になるそうです。
- boot.scr
- system.dtb
bootフォルダには次のファイルをコピーします。以下のファイルはBOOT.BINの作成に必要になるそうです。
- zynqmp_fsbl.elf
- pmufw.elf
- bl31.elf (bl31.binと間違えないように)
- u-boot-dtb.elf
- system.dtb
また、u-boot-dtb.elf
をu-boot.elf
にリネームします。
※PetaLinux 2021.1ではu-boot.elfからデバイスツリーの情報が削除されているため、このようなリネームが必要とのことです。次のVitisリリース時にはこのようなリネームは必要なくなるようです。バージョン毎にいろいろと変わるのは面倒なので辞めてほしいのですが・・・。こうした記事も陳腐化します。
最終的に以下のフォルダ構成になります。
ultra96v2
-ultra96v2_platform
-ultra96v2_plnx
-ultra96v2_pkg
-sysroot
-pfm
-sd_dir
boot.scr
system.dtb
-boot
zynqmp_fsbl.elf
pmufw.elf
bl31.elf
u-boot.elf
system.dtb
以上で準備ができましたので、Vitisを起動します。
cd ultra96v2_pkg
vitis &
Launchを押したら次のような画面が開きますので、Create Platform Project
を選択します。
次のページでは、Vivadoで作成したXSAファイルを選択します。またOperating systemはlinuxに変更します。
Finishを押します。
次にBootファイル等のディレクトリ設定を行います。linux on psu_cortexa53
を
選択すると以下の画面になります。
最初にBifを生成します。Bif File行のBrowseをドロップダウンさせると、Generate Bif
というのがありますので、選択します。
次にBoot Components Directry
とFAT32 Partition Directory
の設定を行います。
Boot Components Directory
にはultra96v2_pkg/pfm/boot
を、FAT32 Partition Directory
にはultra96v2_pkg/pfm/sd_dir
をそれぞれ設定します。
以上の設定を済ませたらビルドします。Explorer上でultra96v2を選択し、赤枠で囲った金槌マークを実行します。
platforminfo ./ultra96v2_pkg/ultra96v2/export/ultra96v2/ultra96v2.xpfm
で結果を確認してみます。
==========================
Basic Platform Information
==========================
Platform: ultra96v2
File: <プロジェクトフォルダ>/ultra96v2_pkg/ultra96v2/export/ultra96v2/ultra96v2.xpfm
Description:
ultra96v2
=====================================
Hardware Platform (Shell) Information
=====================================
Vendor: avnet
Board: ultra96v2
Name: ultra96v2
Version: 0.0
Generated Version: 2021.1
Hardware: 1
Software Emulation: 1
Hardware Emulation: 1
Hardware Emulation Platform: 0
FPGA Family: zynquplus
FPGA Device: xczu3eg
Board Vendor:
Board Name:
Board Part:
=================
Clock Information
=================
Default Clock Index: 2
Clock Index: 2
Frequency: 299.997000
==================
Memory Information
==================
Bus SP Tag: HP0
Bus SP Tag: HP1
Bus SP Tag: HP2
Bus SP Tag: HP3
Bus SP Tag: HPC0
Bus SP Tag: HPC1
=============================
Software Platform Information
=============================
Number of Runtimes: 1
Default System Configuration: ultra96v2
System Configurations:
System Config Name: ultra96v2
System Config Description: ultra96v2
System Config Default Processor Group: linux_domain
System Config Default Boot Image: standard
System Config Is QEMU Supported: 1
System Config Processor Groups:
Processor Group Name: linux on psu_cortexa53
Processor Group CPU Type: cortex-a53
Processor Group OS Name: linux
System Config Boot Images:
Boot Image Name: standard
Boot Image Type:
Boot Image BIF: ultra96v2/boot/linux.bif
Boot Image Data: ultra96v2/linux_domain/image
Boot Image Boot Mode: sd
Boot Image RootFileSystem:
Boot Image Mount Path: /mnt
Boot Image Read Me: ultra96v2/boot/generic.readme
Boot Image QEMU Args: ultra96v2/qemu/pmu_args.txt:ultra96v2/qemu/qemu_args.txt
Boot Image QEMU Boot:
Boot Image QEMU Dev Tree:
Supported Runtimes:
Runtime: OpenCL
Vivadoで設定を行ったクロックや、プラットフォーム <-> カーネル間通信のためのAXIインターフェースの設定が反映されています。
以上でPlatformの作成は終わります。
Vitis Applicationの作成
Vitisのメニューバーから、File -> New -> Application Project...
を選択します。
Platformは先ほど作成したプラットフォームが選択されています。
Sysroot、Root FS、Kernel Imageの設定を行います。
- Sysroot path : ultra96v2_pkg/sysroots/cortexa72-cortexa53-xilinx-linux
- Root FS : ultra96v2_plnx/images/linux/rootfs.ext4
- Kernel Image : ultra96_v2/images/linux/Image
実装するアプリケーションのテンプレート選択になります。Validate Examples -> Vector Addition
を選択します。
Finishを押します。
次に、Explorerのvadd.prjを選択し、Active build configurationsをEmulation-SWからHardwareに変更します。
Explorerのvadd_systemを選択し、金槌マークを押してビルドします。
次に、ultra96v2_pkg/vadd_system/Hardware/package
に生成されたsd_card.img
をSDカードに書き込みます。
sudo fdisk -l
を実行し、SDカードを探します。私の場合は/dev/sdeでした。
ディスク /dev/sde: 14.94 GiB, 16022241280 バイト, 31293440 セクタ
Disk model: STORAGE DEVICE
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xe570588e
デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ
/dev/sde1 * 2048 2000895 1998848 976M 83 Linux
/dev/sde2 2000896 4194303 2193408 1G 83 Linux
[1]+ 終了 vitis
パーティションが残ってますのでとりあえず消します。
sudo fdisk /dev/sde
d
d
w
SDカードに書き込みます。
sudo dd if=ultra96v2_pkg/vadd_system/Hardware/package/sd_card.img of=/dev/sde bs=4M status=progress
sudo sync
syncが完了したら、SDカードを抜き、Ultra96V2ボードに差し込み電源を立ち上げます。
login : root
password : root
でログインします。
次のコマンドを実行し、TEST PASSED
と表示されたら成功です。
cd /mnt/sd-mmcblk0p1/
./vadd binary_containter_1.xcbin
感想
高い。参入障壁が高い。スタート地点に立つまでにここまでツールをまたいで色々設定を行わなければならないとはとても面倒くさい。しかも情報が少ない。
特に過去のバージョン (2020.2とか) と同じ方法で出来るだろうと踏んでいたところができなかったりと、バージョンアップデートする毎になぜこんなにも変わるのか疑問が多かった。これもおそらく参入障壁が高い要因の一つだと思う(情報あるバージョンでやればいいじゃん、と言われたらそれまでだが。でも誰かが情報作らなくちゃいけないよね?)。
兎にも角にも、Vitisのサンプルアプリケーションを動かすところまではできたので、このあとはhackster.io等を眺めながら色々遊んでみたいと思います(高位合成してみたい)。