Main Content

MathWorks Buildroot を使用したカスタム Zynq ボードに対する Xilinx Zynq Linux イメージの作成

この例では、MathWorks® Buildroot システムを使用して、Zynq® ワークフロー内で Linux® オペレーティング システムが搭載された Zynq® カスタム ボードを開始するための Zynq® Linux® イメージを作成する方法を説明します。

はじめに

HDL ワークフロー アドバイザーで、Digilent™ Zybo Z7-10 Zynq® 開発ボードの Zynq® Linux® イメージをカスタム リファレンス設計用に作成します。この例では、Zybo Z7-10 ボードを使用します。その他の Zynq® プラットフォーム用 Linux® イメージは MathWorks® ビルド システムを使用してビルドできます。

要件

  • MathWorks ビルド システム - Buildroot

  • Linux® オペレーティング システム

  • HDL Coder™ のドキュメンテーションにリストされている、サポートされているバージョンの Xilinx® Vivado® Design Suite

  • 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) にコピーされます。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 とデータ キャッシュが構成されてアクティブになり、その他のアクションが実行され、完全なシステムをアプリケーションで使用できるようにします。

MathWorks ビルド システム

MathWorks Buildroot はクロスコンパイルを介して組み込みの Linux® システムを生成するために使用するツールです。MathWorks® ビルド システムは前処理および後処理スクリプトに Buildroot をラップし、さまざまなプラットフォームのシステム イメージの生成を自動化します。ビルド システムは、ターゲット ボード、プラットフォーム、またはイメージの記述ファイルを入力として取り、ブートローダー、カーネル、ユーザー スペースを含む完全なシステム イメージとして出力するスクリプトに基づいています。このリポジトリは、MathWorks® ツールで使用する Altera® SoC と Xilinx® Zynq® プラットフォームの SD カード イメージを作成する Buildroot フレームワークをホストします。

MathWorks ビルド システムを使用した Zynq Linux イメージのビルド

1. クロス コンパイラを設定する

以下のコマンドを使用して、Linux マシンに Linaro ARM ツールチェーンをインストールし、クロス コンパイラを設定します。以下のコマンドは Debian® 10 Linux マシンで機能します。

>> sudo apt-get install gcc-arm-linux-gnueabihf

2.Git Hub から MathWorks Buildroot を同期する

最新のリリース タグを使用して、git クローン GitHub - MathWorks Buildroot から buildroot を取得します。

>> git checkout mathworks_zynq_R22.1.0

リリース タグには mathworks_zynq_R2x.y.z のラベルがついています。ここで、"R2x" は MATLAB リリースの年を示し、"y" は 'a' または 'b' リリースを示します。"z" は特定の MATLAB リリース内のイメージに対する更新に使用されます。たとえば、タグ "R22.1.0" は、MATLAB R2022a と解釈されます。ここで、"R22" は R2022 を表し、"1.0" はリリース 'a' に対応します。R2022a リリース内のイメージに何らかの更新がある場合、バージョンは "R22.1.1"、"R22.1.2" などになります。

MathWorks buildroot を同期した後、次のファイルを使用してイメージをビルドします。ファイル フォルダーに移動し、必要なファイルをそこに配置します。次の図は、特定のボード (ZyboZ7) に対して Linux イメージをビルドするために使用するフォルダー階層とその内容を示しています。

/buildroot/board/mathworks/zynq/boards/zyboz7/

Zynq Linux イメージのビルドに必要なファイル

  • エクスポートされたハンドオフ ファイル

  • デバイス ツリー ソース ファイル

  • Zynq Defconfig ファイル

ハンドオフ ファイル

メモリや周辺装置のアドレス マッピングなど、Zynq 処理システム IP に適用される設定は Xilinx Vivado プロジェクトからエクスポートされます。ビットストリーム ファイル、システム ハードウェア プロジェクト ファイル (.hdf) はカスタム リファレンス設計の作成後にエクスポートされます。詳細については、Zynq ワークフロー用のカスタムのボードとリファレンス設計の定義で「Xilinx Vivado を使用したカスタム リファレンス設計の作成とエクスポート」のセクションを参照してください。vivado ブロック設計プロジェクトからハードウェア プラットフォームをエクスポートし、.xsa ファイルを解凍して ps7_init_gpl.c と ps7_init_gpl.h を取得したら、以下の図に示すように、これらのファイルを zyboz7 buildroot ディレクトリの handoff フォルダーに配置します。

デバイス ツリー ソース

デバイス ツリーとはハードウェアを記述するデータ構造です。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 = <&ethernet_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>;
};

3.Zynq Defconfig

プラットフォームの defconfig には、カーネル ビルドを適切に構成するために必要な Linux kconfig 設定が含まれています。このファイルは Z7-10 イメージのビルドに使用される zynq_zybo_z7_defconfig ファイルです。

###########################################

# Zybo Options

###########################################

BR2_TARGET_UBOOT_BOARD_DEFCONFIG="zynq_zyboz7"

BR2_PACKAGE_XILINX_BOOTLOADER_UBOOT_TARGET_DIR="board/xilinx/zynq/zynq-zyboz7"

ビルド スクリプト

次のビルド スクリプトを使用して、特定のボードに対する linux SD イメージのビルドを開始できます。

>> build.py -c board/mathworks/zynq/boards/zyboz7/catalog.xml

それ以外の場合は、次のコマンドを使用して、手動でビルドするための異なるツールチェーンのパスを指定します。

>> ./build.py -p zynq -b zyboz7 --brconfig BR2_TOOLCHAIN_EXTERNAL_PATH='/opt/ARM_CortexA/LinaroToolchain/6.3.1-2017.02/Linux/aarch32'

ビルド後のファイルのリスト

ビルド後、これらのファイルは出力フォルダー "/buildroot/output/zybo_linux_linaro/images/" に zip ファイルとして置かれます。ファイルを SD カードに解凍し、SD カードを Zybo Z7-10 ボードに挿入します。ボードの接続の詳細については、Zynq ワークフロー用のカスタムのボードとリファレンス設計の定義を参照してください。

概要

この例は、MathWorks Buildroot システムを使用して Linux イメージをビルドするプロセスをステップごとに示しています。その他の Zynq プラットフォーム用 Linux イメージは MathWorks ビルド システムを使用してビルドできます。この例を使用して、必要なファイルを MathWorks buildroot フォルダーに含め、linaro のクロスコンパイラを設定し、カスタム Zynq ボードに対する Xilinx Zynq Linux イメージを作成できます。