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

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

More than 1 year has passed since last update.

はじめに

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

この記事では、ZynqMP の Boot Loader で使うための BL31 (ARM Trusted Firmware Boot Loader state 3-1) の構築について説明をします。

注意

Linux Kernel では 起動時に ATF(ARM Trusted Firmware) のバージョンをチェックしています。Debian GNU/Linux (v2017.3版) で構築する Linux Kernel 4.9.0 (xilinx-v2017.3) では ATF(ARM Trusted Firmware) のバージョンは v0.3 である必要があります。これ以外のバージョンでは Kernel が Panic を起こして起動出来ないので注意してください。

必要な環境

  • Vivado SDK 2017.2 または gcc-aarch64-linux-gnu

Boot Loader 構築環境の準備

次の URL から git clone でリポジトリをダウンロードして v2017.3.0 をチェックアウトします。

shell$ git clone git://github.com/ikwzm/ZynqMP-FPGA-Linux
shell$ cd ZynqMP-FPGA-Linux
shell$ git checkout v2017.3.0

ソースコードのダウンロード

ATF(ARM Trusted Firmware) は以下の URL からソースコードをダウンロードします。

shell% cd target/UltraZed-EG-IOCC/build
shell% git clone https://github.com/Xilinx/arm-trusted-firmware.git

xilinx-v2017.3 をチェックアウト

arm-trusted-firmware の xilinx-v2017.3 というタグをチェックアウトして xilinx-v2017.3-ultrazed-eg-iocc という作業用のブランチを作ります。

shell$ cd arm-trusted-firmware
shell$ git checkout -b xilinx-v2017.3-ultrazed-eg-iocc refs/tags/xilinx-v2017.3

BL31 の構築

shell% cd arm-trusted-firmware
shell% make CROSS_COMPILE=aarch64-linux-gnu- PLAT=zynqmp RESET_TO_BL31=1

もしかしたら binutils-aarch64-linux-gnu のバージョンによっては次のようなエラーが出て失敗するかもしれません。

Building zynqmp
  AS      bl31/aarch64/runtime_exceptions.S
bl31/aarch64/runtime_exceptions.S: Assembler messages:
bl31/aarch64/runtime_exceptions.S:157: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:165: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:170: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:175: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:189: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:193: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:197: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:201: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:215: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:219: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:223: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:231: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:245: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:249: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:253: Error: non-constant expression in ".if" statement
bl31/aarch64/runtime_exceptions.S:261: Error: non-constant expression in ".if" statement
Makefile:597: recipe for target 'build/zynqmp/release/bl31/runtime_exceptions.o' failed
make: *** [build/zynqmp/release/bl31/runtime_exceptions.o] Error 1

その場合は Vivado SDK のツールチェインを使って構築すると良いでしょう。

shell% cd arm-trusted-firmware
shell% make CROSS_COMPILE="<SDK PATH>/gnu/aarch64/<lin or nt>/aarch64-linux/bin/aarch64-linux-gnu-" PLAT=zynqmp RESET_TO_BL31=1

<SDK PATH> には Vivado SDK をインストールしたパスを指定します。
<lin or nt> には Vivado SDK を実行するプラットフォームを指定します. lin=linux, nt=windows です。

無事に arm-trusted-firmware/build/zynqmp/release/bl31/bl31.elf が出来たら bl31.elf を target/UltraZed-EG-IOCC/build にコピーします。

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