LoginSignup
3
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-26

はじめに

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 にコピーする。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0