このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
HDL Coder IP コア ワークフロー用のカスタム Linux イメージのビルド
この例では、MathWorks® Buildroot 環境を使用して Digilent™ Zybo Z7-10 Zynq ボード用のカスタム Zynq® Linux® イメージをビルドするときの基本的な手順を示します。同じ手順に従って、Digilent Zybo Z7-20 Zynq ボードや他の Zynq プラットフォーム用のイメージも作成もできます。
この例では、Zynq プラットフォーム用の Linux イメージのビルドを開始する前のビルド環境の設定プロセスについても説明します。
要件
Debian-9 Linux オペレーティング システム。
HDL Coder™ のドキュメンテーションにリストされている、サポートされているバージョンの Xilinx® Vivado® Design Suite
AMD® Vitis® 統合ソフトウェア プラットフォーム
MathWorks ビルド システム - Buildroot
Digilent Zybo Z7-10 Zynq 開発ボードとアクセサリ キット
Zynq の構成
Zynq の起動プロセスには、プロセッサ システム (PS)、第 1 ステージ ブートローダー (FSBL) で構成される Zynq ブート イメージの読み込みと実行、プログラマブル ロジック (PL) を構成するビットストリーム、およびユーザー アプリケーションが含まれます。

起動プロセス
ステージ 0
ボードが ON に切り替わるか、Zynq プロセッサが reset, になった後、処理システム (PS) の 1 つのプロセッサ (CPU0) から読み取り専用コードである BootROM が実行されます。利用可能なブート モード オプション (QSPI フラッシュ、NAND フラッシュ、SD カードなど) からの Zybo Z7-10 のブート モード ピン設定 (JP5) に基づいて、BootROM がオンチップ メモリ (OCM) にコピーされます。その後、OCM で BootROM が実行されます。実行後、BootROM は実行を OCM の FSBL に転送します。
ステージ 1
FSBL は PS コンポーネント (DDR メモリ コントローラー、I/O コンポーネントなど) を構成することによって有効になると、起動デバイスでビットストリーム ファイルを探します。FSBL は完全なイメージが起動デバイスから読み取られるまでアプリケーション バイナリとデータ ファイルをメモリに読み込みます。次に、FSBL は外部の RAM を初期化し、第 2 ステージ ブートローダーまたはスタンドアロンのアプリケーションを読み込みます。
ステージ 2
前のステージで読み込まれたユーザー アプリケーションが U-Boot のように実行されます。これは CPU0 で実行され、OS が起動する環境を初期化して設定します。初期化にはメモリ管理ユニットの構成も含まれます。
ステージ 3
ブートローダーは、次にカーネル イメージを取得し、組み込みの Linux オペレーティング システムを起動します。Linux の場合、OS で 2 番目のプロセッサ コア CPU1 が検出されて有効になり、MMU とデータ キャッシュが構成されてアクティブになり、その他のアクションが実行され、完全なシステムをアプリケーションで使用できるようにします。
この例は、Debian-9 Linux オペレーティング システムで検証済みです。サポートされている OS をインストール済みの場合は、「MathWorks ビルド システムを使用した Zynq Linux イメージのビルド」セクションに進むことができます。それ以外の場合は、以下のインストール プロセスに従って Debian-9 をインストールしてください。
Debian-9 Linux オペレーティング システムのインストール
手順 1
このリンクを使用して公式 Web サイトから Debian-9 iso cdimage ファイルをダウンロードします。
手順 2
上記の iso ファイルを使用して Debian-9 OS をインストールします。インストール プロセス中に、パッケージ マネージャーを構成するように求められることがあります。以下に示すように、記載されている debian アーカイブ ミラーを手動で指定します。

以下に示すように設定を行い、[Continue] をクリックします。

手順 3
Debian Lenny のセキュリティ更新プログラムはないため、次の手順の "security.debian.org" にアクセスできなかったことを示すエラーは無視し、残りのインストール プロセスに従って Debian 9 のインストールを完了します。
MathWorks ビルド システム
MathWorks Buildroot は、クロスコンパイルを介してカスタム Linux イメージを生成するために使用できるツールです。MathWorks ビルド システムは前処理および後処理スクリプトに Buildroot をラップし、さまざまなプラットフォームのシステム イメージの生成を自動化します。ビルド システムは、ターゲット ボード、プラットフォーム、またはイメージの記述ファイルを入力として取り、ブートローダー、カーネル、ユーザー スペースを含む完全なシステム イメージとして出力するスクリプトに基づいています。このリポジトリは、MathWorks ツールで使用する Xilinx® Zynq プラットフォームと Altera® SoC の SD カード イメージを作成する Buildroot フレームワークをホストします。ビルド プロセスに進む前に、いくつかの事前作業を行ってハンドオフ ファイルを生成する必要があります。これは、追加のセクションに示すように Xilinx Vivado ツールと AMD Vitis ツールを使用して行うことができます。
ハンドオフ ファイルの生成
ハンドオフ ファイルを生成するには、アプリケーション用の Xilinx Vivado プロジェクトを使用してリファレンス設計を作成する必要があります。メモリやペリフェラルのアドレス マッピングなど、Zynq 処理システム IP に適用される設定は Xilinx Vivado プロジェクトからエクスポートされます。詳細については、AMD ワークフロー用のカスタムのボードとリファレンス設計の定義で「Xilinx Vivado を使用したカスタム リファレンス設計の作成とエクスポート」のセクションを参照してください。この例では、カスタム リファレンス設計の作成で Zybo Z7-10 ボードをターゲットにしていますが、Zybo Z7-20 やその他の Zynq ベースのボードにも同じワークフローを使用できます。次に示すように、Vivado ブロック設計プロジェクトからハードウェア プラットフォームをエクスポートし、.xsa (Xilinx Source Archive) ファイルを解凍して ps7_init_gpl.c と ps7_init_gpl.h を取得します。
手順 1: Vivado プロジェクトの作成が正常に完了した後、次のように Vivado でブロック設計を開いてハードウェアをエクスポートし、対応する手順に従って .xsa ファイルを生成します。


手順 2: .xsa ファイルが作成されたら、次のように Vitis ツールでファイルを開き、プロセッサの構成済みヘッダー ファイルを抽出します。

MATLAB コマンド ウィンドウで、エクスポートされた .xsa ファイルのパスに移動してから次のコマンドを実行することで、エクスポートされた .xsa ファイルからハンドオフ ファイルを抽出することもできます。
>> unzip design_led_wrapper.xsa
.xsa ファイルの抽出とハンドオフ ファイルの生成が終わったら事前作業は完了です。MathWorks ビルド システムを使用して Linux イメージのビルドを開始できます。
MathWorks ビルド システムを使用した Zynq Linux イメージのビルド
1. クロス コンパイラを設定する
Linux マシンに Linaro ARM ツールチェーンをインストールしてクロス コンパイラを設定します。リンク Linaro ツールチェーンを使用して対応する tarball をインストールできます。
tarball を解凍し、Linux マシン上の指定のフォルダー "/opt/linaro/aarch32-6.3.1-2017.02" に内容をコピーします。
2.Git Hub から MathWorks Buildroot を同期する
git clone を使用して GitHub - MathWorks Buildroot リポジトリから Buildroot を取得します。
>> git clone https://github.com/mathworks/buildroot.git
次に、最新のタグを使用してブランチをチェックアウトします。
>> git checkout xilinx-next
3.ハンドオフ ファイルを buildroot ディレクトリにコピーして置き換える
生成された ps7_init_gpl.c, ps7_init_gpl.h ファイルをコピーし、以下のイメージに示すように、Debian-9 Linux マシン上の zyboz710 buildroot ディレクトリ buildroot/board/mathworks/boards/zynq/zyboz710/handoff にある handoff フォルダーの内容と置き換えます。

次は、Python コマンドを使用したビルド プロセスに進みます。
4.ビルド スクリプトを実行する
次のビルド スクリプトを使用して、特定のボードに対する Linux SD イメージのビルドを開始できます。場合によっては、イメージを正常にビルドするために、sudo コマンドを使用して gcc、make、g++ などの追加パッケージのインストールが必要になる可能性があることに注意してください。
>> ./build.py -c board/mathworks/zynq/boards/zyboz710/catalog.xml
それ以外の場合は、次のコマンドを使用して、手動でビルドするための異なるツールチェーンのパスを指定します。
>> ./build.py -p zynq -b zyboz710 --brconfig BR2_TOOLCHAIN_EXTERNAL_PATH='/opt/linaro/aarch32-6.3.1-2017.02'
ビルドが正常に完了すると、/buildroot/output/<board_name>_linux_linaro/images folder に zip ファイルとして <board_name>_sdcard_hdlcoder_<build_date>.zip という名前で生成されたイメージを確認できるはずです。

5.SD カードにイメージ ファイルを解凍する
イメージ ファイルを解凍します。その内容が以下のように表示されます。

内容を SD カードにコピーし、SD カードを Zybo Z7-10 ボードに挿入します。ボードは必ず SD ブート モードにしてください。これは JP5 ジャンパー スイッチを使用して行うことができます。ボードの接続の詳細については、AMD ワークフロー用のカスタムのボードとリファレンス設計の定義を参照してください。
ボードの電源がオンになったら、以下に示すように、外部コンソールのログで起動が正常に完了したことを確認できます。

これで、イメージをビルドしてボードを起動するプロセスまで正常に完了しました。
デバイス ツリー ソースと defconfig ファイル
このセクションでは、Buildroot でイメージをビルドするときに使用されるデバイスツリー ファイルと defconfig ファイルに関する情報を示します。これらのファイルは、Buildroot ディレクトリのいずれの場所にも手動で用意したり追加したりする必要はありません。これらのファイルが必要なときは、自動化された Python ビルド スクリプトによって他の MathWorks GitHub リポジトリからフェッチされます。
1. デバイス ツリー ソース
デバイス ツリーとはハードウェアを記述するデータ構造です。Linux などのオペレーティング システムによって読み取り可能なので、マシンの詳細をハード コードする必要がありません。デバイス ツリー ソース (DTS) ファイルには、プラットフォームを識別するためのノード、プロパティ、子ノードのリストと、bootargs などの実行時の構成を記述するプレーン テキスト データが含まれています。DTS ファイルはデバイス ツリーのコンパイラを使用してデバイス ツリー ブロブ (DTB) にコンパイルされます。これは起動プロセス時にハードウェアで使用されるバイナリ ファイルです。
以下のコードは Zybo Z7-10 デバイス ツリー ソース ファイルのサンプル コードです。
#include "zynq-7000.dtsi"
#include <dt-bindings/gpio/gpio.h>
/ {
model = "Digilent Zybo Z7 board";
compatible = "digilent,zynq-zybo-z7", "xlnx,zynq-7000";
aliases {
ethernet0 = &gem0;
serial0 = &uart1;
};
memory@0 {
device_type = "memory";
reg = <0x0 0x40000000>;
};
chosen {
bootargs = "";
stdout-path = "serial0:115200n8";
};
gpio-leds {
compatible = "gpio-leds";
ld4 {
label = "zynq-zybo-z7:green:ld4";
gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
};
};
usb_phy0: phy0 {
#phy-cells = <0>;
compatible = "usb-nop-xceiv";
reset-gpios = <&gpio0 46 GPIO_ACTIVE_LOW>;
};
};
&clkc {
ps-clk-frequency = <33333333>;
};
&gem0 {
status = "okay";
phy-mode = "rgmii-id";
phy-handle = <ðernet_phy>;
ethernet_phy: ethernet-phy@0 {
reg = <0>;
device_type = "ethernet-phy";
};
};
&sdhci0 {
status = "okay";
};
&uart1 {
status = "okay";
};
&usb0 {
status = "okay";
dr_mode = "host";
usb-phy = <&usb_phy0>;
};
2.Zynq Defconfig
プラットフォームの defconfig には、カーネル ビルドを適切に構成するために必要な Linux kconfig 設定が含まれています。次のファイルは Z7-10 および Z7-20 のイメージのビルドに使用される zynq_zybo_defconfig ファイルです。
###########################################
# Zybo Options
###########################################
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="zynq_zybo"
BR2_PACKAGE_XILINX_BOOTLOADER_UBOOT_TARGET_DIR="board/xilinx/zynq/zynq-zybo"
まとめ
この例は、MathWorks Buildroot システムを使用して Linux イメージをビルドするプロセスをステップごとに示しています。その他の Zynq プラットフォーム用 Linux イメージは MathWorks ビルド システムを使用してビルドできます。この例を使用して、必要なファイルを MathWorks buildroot フォルダーに含め、linaro のクロスコンパイラを設定し、カスタム Zynq ボードに対する Xilinx Zynq Linux イメージを作成できます。