Help us understand the problem. What is going on with this article?

UltraZed 向け Debian GNU/Linux (v2017.3版) の構築(PMUFW編)

More than 1 year has passed since last update.

はじめに

UltraZed-EG スターターキットに Debian GNU/Linux を構築する方法について、具体的な方法をいくつかに分けて説明します。

この記事では、ZynqMP の Boot Loader で使うための PMUFW (Platform Manager Unit Firmware) の構築について説明をします。

必要な環境

  • Vivado SDK 2017.2

Sample FPGA Design の構築

PMUFW の構築には Sample FPGA Design のハードウェア情報が必要です。「UltraZed 向け Debian GNU/Linux (v2017.3版) の構築(Sample FPGA Design編)」の通りに target/UltraZed-EG-IOCC/build/fpga/project.sdk/design_1_wrapper.hdf を作っておきます。

PMUFW の構築

ここでは Vivado の hsi(Hardware Software Interface) を使って構築する方法を示します。GUI を使って手で入力するのは面倒なので Tcl スクリプトファイルを用意しています。Tcl スクリプトの詳しい内容は「Vivado SDK でZynq FSBL(First Stage Boot Loader)をビルドするTclスクリプト(hsi編)」を参照してください。

target/UltraZed-EG-IOCC/build/fpga/build_zynqmp_pmufw.hsi
#!/usr/bin/tclsh

set app_name          "pmufw"
set app_type          "zynqmp_pmufw"
set hwspec_file       "design_1_wrapper.hdf"
set proc_name         "psu_pmu_0"
set project_name      "project"
set project_dir       [pwd]
set sdk_workspace     [file join $project_dir $project_name.sdk]
set app_dir           [file join $sdk_workspace $app_name]
set app_release_dir   [file join [pwd] ".." ]
set app_release_elf   "zynqmp_pmufw.elf"

set hw_design         [open_hw_design [file join $sdk_workspace $hwspec_file]]

generate_app -hw $hw_design -os standalone -proc $proc_name -app $app_type -compile -dir $app_dir
file copy -force [file join $app_dir "executable.elf"] [file join $app_release_dir $app_release_elf]

build_zynqmp_pmufw.hsi を Vivado で実行することにより、target/UltraZed-EG-IOCC/build/zynqmp_pmufw.elf が生成されます。

vivado% cd target/UltraZed-EG-IOCC/build/fpga/
vivado% hsi -mode tcl -source build_zynqmp_pmufw.hsi

Vivado SDK 2017.3 で構築する際の注意点

今回は Vivado SDK 2017.2 を使って構築しましたが、Vivado SDK 2017.3 を使いたいという場合もあるでしょう。しかし Vivado 2017.3 では上手くいかない事が報告されています。

要するに次のような次第らしいです。

  • Vivado SDK 2017.3 で PMUFW のコードが増えて通常のコンパイルオプションでは RAM に入りきらなくなった。
  • Vivado SDK 2017.3 の GUI では -Os -flto -ffat-lto-objects というコンパイルオプションが追加されている。これは最適化用のコンパイラオプション。
  • しかし CUI 用の generate_app では上記コンパイルオプションが追加されていない(忘れてた?

暫定的な対処方法として次のようにすると良いようです。

  • generate_app の時に -compile オプションを外して実行して、環境だけを構築する。
  • 構築した環境のディレクトリ(ここでは target/UltraZed-EG-IOCC/build/fpga/project.sdk/pmufw)の Makefile の CC_FLAGS に に -Os -flto -ffat-lto-objects を追加する。
  • 構築した環境のディレクトリ(ここでは target/UltraZed-EG-IOCC/build/fpga/project.sdk/pmufw)で make を実行する。
  • 出来た executable.elf を target/UltraZed-EG-IOCC/build/zynqmp_pmufw.elf にコピーする。

参考

ikwzm
元へっぽこ電子回路エンジニア。現在隠居中。どちらかというとVHDL派。最近はFPGA+SoC でいろいろやってます。github でもいろいろと公開してます。 https://github.com/ikwzm
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away