※2024年2月: 最新リファレンス環境と同じバージョン(Yocto 4.3 nanbield)に対応した内容へアップデートしました。(最新リファレンス環境に使用されるバージョンは Release Notes 23.4 PRO を参照ください。)
この記事では、インテル® SoC FPGA のシステム・リファレンス環境(GSRD: Golden System Reference Design)に採用されている Yocto Poky リファレンス Linux 環境のビルド手順を日本語で解説します。
Linux のビルド作業にはインテル® SoC FPGA エンベデッド開発スイート (SoC EDS) を必要としないため、SoC EDS のインストール有無やバージョンを気にする必要はありません。SoC EDS は v20.1 Standard Edition もしくは v20.1 Pro Edition が最新かつ最終バージョンとなりますが、以前の SoC EDS バージョンをご使用の場合でも本手順で Linux 環境をビルドすることができます。
公式のビルド手順は Rocketboards.org の各デバイスファミリー向け GSRD のページを参照ください。
RocketBoards.org 『Cyclone V SoC GSRD - Rebuilding the GSRD Binaries』
RocketBoards.org 『Arria 10 SoC GSRD ‐ Building the GSRD』
RocketBoards.org 『Stratix 10 SoC L-Tile GSRD - Building the GSRD』
RocketBoards.org 『Stratix 10 SoC H-Tile GSRD - Building the SD Card Version』
RocketBoards.org 『Agilex 7 F-Series Transceiver-SoC DevKit (P-Tile and E-Tile) - Building the GSRD for the DK-SI-AGF014EA』
RocketBoards.org 『Agilex 7 F-Series Transceiver-SoC DevKit (P-Tile and E-Tile) - Building the GSRD for the DK-SI-AGF014EB』
RocketBoards.org 『Agilex 7 F-Series FPGA DevKit (2x F-Tile) - Building the GSRD』
RocketBoards.org 『Agilex 7 I-Series Transceiver-SoC DevKit (4x F-Tile) - Building the GSRD for the DK-SI-AGI027FB』
RocketBoards.org 『Agilex 7 I-Series Transceiver-SoC DevKit (4x F-Tile) - Building the GSRD for the DK-SI-AGI027FA』
RocketBoards.org 『Agilex 7 M-Series Development Kit - HBM2e Edition (3x F-Tile & 1x R-Tile) - Building the GSRD』
公式手順は大半がスクリプト化されているため詳細を理解するにはスクリプトの内容を読解する必要があります。この記事では、公式のスクリプトを使用せず、ビルドに必要なコマンドをターミナル上で直接実行する内容としていますので、Yocto のビルド手順を理解するための参考としてもご使用ください。
手順
- ホストマシンの準備
- Yocto 環境のセットアップ - レシピの取得(初回のみ)
- スクリプト実行および環境設定(初回のみ)
- ビルド(bitbake)実行
- ビルド結果の確認
本手順は Cyclone® V SoC をターゲットに記載していますが、インテル® SoC FPGA の各デバイスファミリー( Cyclone® V / Arria® V / インテル® Arria® 10 / インテル® Stratix® 10 / Intel Agilex® 7) 共通で使用できる手順となっています。
一通りの手順を実行すると、Linux 起動用の SD カードイメージの作成に必要なファイル一式が生成可能となっていますが、Preloader/U-Boot (ブートローダー) と Linux デバイスツリーについては、ボードや FPGA 側のデザインなど、ハードウェアの差分を考慮する必要があるため、別のフローで対応することをお勧めします。
それぞれ、以下のページを参考に対応ください。
【Preloader/U-Boot (ブートローダー)】
RocketBoards.org 『Building Bootloader for Cyclone V and Arria 10』
RocketBoards.org 『Building Bootloader for Stratix 10』
RocketBoards.org 『Building Bootloader for Agilex 7』
RocketBoards.org 『Building Bootloader for Agilex 5』
アルティマカンパニー 技術コンテンツ『新しい U-Boot のハンドオフやデバイスツリーの構成』
【Linux デバイスツリー】
アルティマカンパニー 技術コンテンツ『インテル® SoC FPGA 向け Linux デバイスツリーの作成および編集方法』
なお、この記事で紹介している Linux ビルド手順では、 ビルドシステムに Yocto Project (以下 Yocto) が採用されています。Yocto を利用する際には、git プロトコルによる外部ネットワークへのアクセスが必要となるので、ご利用のネットワーク環境で git が利用可能であることをご確認の上でビルド手順をお試しください。
以下に Yocto のバージョンおよびステータスを一覧しておきます。
バージョン | コードネーム | ステータス / 補足 |
5.0 | scarthgap | Active Development (開発中) |
4.3 | nanbield | Current Release (Stable) / 最新 GSRD で使用するバージョン |
4.2 | mickledore | Previous Release (EOL) |
4.1 | langdale | Previous Release (EOL) |
4.0 | kirkstone | Current Release (LTS until Apr.2026) |
3.4 | honister | Previous Release (EOL) |
3.1 | dunfell | Current Release (LTS until Apr.2024) |
: |
Yocto バージョンとコードネームの対応ならびにステータス(2024年2月 現在)
※注意点: バージョン 3.3 (hardknott) から 3.4 (honister) への変更時にビルドに必要な設定ファイル(レシピ)の書式が一部変更となっているため、変更の影響を受ける一部の手順については「Yocto バージョン 3.4 (honister) 以降」と「3.3.x (hardknott) 以前」の 2 通りに分けて記載しています。
Yocto の詳細情報および環境のカスタマイズ方法については Yocto の公式ドキュメントを参照してください。
yoctoproject.org 『Yocto Project – It's not an embedded Linux distribution – it creates a custom one for you』
yoctoproject.org 『Welcome to the Yocto Project Documentation — The Yocto Project ® documentation』
yoctoproject.org 『Supported Release Manuals — The Yocto Project ® documentation』
yoctoproject.org 『Outdated Release Manuals — The Yocto Project ® documentation』
1. ホスト・マシンの準備
Linux ベースのホスト・マシンを用意します。仮想マシンでの構築も可能ですが、50 GByte 以上の空きディスク容量が要件となっている点に注意が必要です。ただし、実際のところは 100 GByte 以上は用意しておいた方が良いと思います。50 GByte では 1 種類のイメージをビルドするだけで空き容量に余裕がなくなります。メモリーの要件は記載がありません。当方では 8 GByte で正常に動作しています。
ホスト・マシンの Linux ディストリビューションは、Yocto Project の公式ドキュメントにリストされている環境から選択して準備ください。この記事に記載の手順は、Ubuntu 20.04 (LTS) および Ubuntu 22.04 (LTS) で確認をおこなっています。
yoctoproject.org 『Supported Linux Distributions』
なお、最近の Yocto バージョンでは Windows Subsystem for Linux (WSL) での対応も可能となっているようです。ただし、WSLv1 には非対応のようなので、試す場合には WSLv2 で環境構築する必要がある点に注意が必要です。また、WSL を使用した手順は、公式ドキュメントでも非公式の手順と明記されています。(WSL での環境構築を試す場合は自己責任でトライしてみてください)
yoctoproject.org 『Setting Up to Use Windows Subsystem For Linux (WSLv2)』
ここからがホスト・マシンの準備に必要な手順です。( Ubuntu 20.04/22.04 (LTS) 向け )
※注意:手順として記載するコマンドはユーザー権限のターミナル上($ で始まるプロンプト)で実行する前提で記載しています。誤って root 権限のターミナル(# で始まるプロンプト)を使用しないように注意してください。
以下のコマンドを実行して、ビルドに必要なパッケージの更新および追加を行ってください。これらのパッケージはイメージをビルドするために最低限必要なパッケージとなっています。
sudo apt update
sudo apt upgrade
sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev python3-subunit mesa-common-dev zstd liblz4-tool file locales libacl1
sudo locale-gen en_US.UTF-8
さらに、以下のパッケージもインストールしてください。最後の「 g++-multilib 」は公式ドキュメントには記載されておりません。過去に dunfell (Yocto 3.1.7) を使用してビルドした場合に発生したエラーの対策として手順に加えました。その他は Yocto の公式手順で指定されているパッケージです。
sudo apt install make python3-pip inkscape texlive-latex-extra
sudo pip3 install sphinx sphinx_rtd_theme pyyaml
sudo apt install g++-multilib
Ubuntu 20.04/22.04 (LTS) の場合は、ここまでの手順でホストマシンの準備が完了します。
その他のディストリビューションを使用される場合は、公式ドキュメントに記載の必要パッケージを確認してください。
yoctoproject.org 『Required Packages for the Build Host』
また、以下の各パッケージのバージョンにも注意してください。各パッケージが要件を満たしていることも確認してください。
・ Git 1.8.3.1 or greater
・ tar 1.28 or greater
・ Python 3.6.0 or greater (※Yocto バージョン 4.2 (mickledore) 以降は Python 3.8.0 or grater に要件が変わります)
・ GNU make 4.0 or greater (※Yocto バージョン 4.1 (langdale) から追加された要件です)
・ gcc 7.5 or greater (※Yocto バージョン 4.2 (mickledore) 以降は gcc 8.0 or grater に要件が変わります)
※公式ドキュメントでは、上記を満たさないディストリビューションを使用するユーザー向けに要件に合ったバージョンのツール類を含む buildtools をインストールする手順も紹介されているので、必要に応じて参照してください。
yoctoproject.org 『Required Git, tar, Python and gcc Versions』
2. Yocto 環境のセットアップ - レシピの取得(初回のみ)
以下のコマンドを実行することで、Yocto パッケージ(ビルドツール類)とビルド手順の指示が記載されたレシピファイル(.bbclass .bb など)を含む meta レイヤー構造が、作業ディレクトリー "poky-socfpga" 直下の layers ディレクトリー以下に展開されます。(作業ディレクトリー "poky-socfpga" は任意の名前で構いません)
以下、Yocto 4.3 (nanbield) の例です。
export YOCTO_VER=nanbield
rm -rf ~/poky-socfpga && mkdir ~/poky-socfpga && cd ~/poky-socfpga
git clone -b $YOCTO_VER https://git.yoctoproject.org/git/poky.git
mkdir layers && cd layers
ln -s ./../poky/meta meta
ln -s ./../poky/meta-poky meta-poky
ln -s ./../poky/meta-yocto-bsp meta-yocto-bsp
git clone -b $YOCTO_VER https://git.openembedded.org/meta-openembedded
git clone -b $YOCTO_VER https://git.yoctoproject.org/git/meta-intel-fpga
git clone -b $YOCTO_VER https://github.com/altera-opensource/meta-intel-fpga-refdes.git
cd ..
※ git clone コマンドの -b オプションに指定するブランチ名には Yocto バージョンの名称(nanbield、kirkstone、dunfell など)を指定します。最新版を指定したい場合には -b master を指定してください。(上の例では、export で設定している環境変数 YOCTO_VER の指定変更にて対応できます。)
※ポイント: レシピが格納される meta-xxxx という名前のフォルダーは meta レイヤーと呼ばれます。各レイヤーには該当のレイヤーの情報を含む conf/layer.conf という設定ファイルが格納されています。layer.conf の中には LAYERSERIES_COMPAT_meta-xxxx という書式で該当のレイヤーが対応する Yocto バージョンが規定されているので、異なる Yocto バージョンを使用する場合には layer.conf の内容にも注意が必要になります。
例えば、meta-intel-fpga の場合は『 LAYERSERIES_COMPAT_meta-intel-fpga = "master honister" 』のような設定が記述されており、master (最新版) と honister (Yocto 3.4) に対応している事を意味します。複数の Yocto バージョンに対応しているレイヤーであれば、『 LAYERSERIES_COMPAT_meta-intel-fpga = "dunfell gatesgarth hardknott" 』のように異なる複数のバージョンを記述しているケースも存在します。
3. スクリプト実行および環境設定(初回のみ)
3-1. Linux ビルド用の設定(全デバイス・ファミリー共通)
以下のコマンドを実行することで、ビルド環境のセットアップをおこないます。
最初に poky 直下に格納されている oe-init-build-env というセットアップ・スクリプトを実行します。このスクリプトを実行すると、ビルドに必要な環境変数のセットアップなどがおこなわれ、カレント・ディレクトリーが poky-socfpga/build へ移動します。build/conf ディレクトリー以下には、bblayers.conf, local.conf と呼ばれる設定ファイルが生成されます。
cd ~/poky-socfpga
# Run script to initialize the build environment for bitbake
# Note: You will be redirect to "build" folder once you execute the command below
source poky/oe-init-build-env
以下のコマンドにて、build/conf/bblayers.conf の設定を書き換えます。
ここでは、poky 以外に取得したレイヤー構造( meta-intel-fpga, meta-intel-fpga-refdes, meta-openembedded/meta-xxxx )をビルド対象に加えるための設定を追記しています。
# Settings for bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-intel-fpga "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-intel-fpga-refdes "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-oe "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-networking "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-python "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-gnome "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-xfce "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-initramfs "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-multimedia "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-webserver "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-filesystems "' >> conf/bblayers.conf
echo 'BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-perl "' >> conf/bblayers.conf
以下のコマンドにて、build/conf/local.conf の設定を書き換えます。
local.conf には、ビルドに関する様々なオプションを指定するための各種変数が記述されています。
この手順に限り Yoct 3.4 (honister) 以降と Yocto 3.3.x (hardknott) 以前のバージョンで別々の内容を記載しています。これは、レシピや .conf ファイルへの設定書式の一部に変更が入ったためです。詳細は Yocto 3.4 のリリース内容をご確認ください。
yoctoproject.org 『 Release 3.4 (honister) — The Yocto Project ® 3.4 documentation 』
※注意点:以降、Yocto 3.4 (honister) 以降向けの手順は、Yocto 4.3 (nanbield) をターゲットとした内容で記載しています。指定する Yocto バージョン(Branch)により meta-intel-fpga に含まれるレシピが異なるため、Linux やブートローダーの指定可能なバージョンに違いがあります。
3-1-1. 新しい環境向け:Yocto 3.4 (honister) 以降のバージョン
# Set the MACHINE from "stratix10", "arria10", "cyclone5", "agilex7_xxx (ex. agilex7_dk_si_agf014ea)", or "agilex5"
sed -i 's/^MACHINE .*=.*$/MACHINE = "arria10"/g' conf/local.conf
# Set the Path for download directory
sed -i 's/#DL_DIR ?= "${TOPDIR}\/downloads"/DL_DIR = "${TOPDIR}\/..\/downloads"/g' conf/local.conf
# Use the LTS kernel and set version
echo 'PREFERRED_PROVIDER_virtual/kernel = "linux-socfpga-lts"' >> conf/local.conf
echo 'PREFERRED_VERSION_linux-socfpga-lts = "6.1.%"' >> conf/local.conf
# Use systemd
echo 'DISTRO_FEATURES:append = " systemd usrmerge"' >> conf/local.conf
echo 'VIRTUAL-RUNTIME_init_manager = "systemd"' >> conf/local.conf
# Build additional rootfs type
echo 'IMAGE_FSTYPES += "jffs2 tar.gz"' >> conf/local.conf
# Ensure we build in all kernel-modules
echo "MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += \"kernel-modules\"" >> conf/local.conf
# Other settings
echo 'INHERIT += "rm_work"' >> conf/local.conf
echo 'DEPLOY_DIR = "${TOPDIR}/../deploy"' >> conf/local.conf
echo 'BB_GENERATE_MIRROR_TARBALLS = "1"' >> conf/local.conf
echo 'BB_DANGLINGAPPENDS_WARNONLY = "1"' >> conf/local.conf
echo 'DISTRO_FEATURES:remove = "ptest"' >> conf/local.conf
echo 'IMAGE_FSTYPES:remove = "multiubi"' >> conf/local.conf
echo 'INHERIT += "archiver"' >> conf/local.conf
echo 'ARCHIVER_MODE[src] = "original"' >> conf/local.conf
echo 'COPY_LIC_MANIFEST = "1"' >> conf/local.conf
echo 'COPY_LIC_DIRS = "1"' >> conf/local.conf
echo 'LICENSE_CREATE_PACKAGE = "1"' >> conf/local.conf
3-1-2. 古い環境向け:Yocto 3.3.x (hardknott) 以前のバージョン
# Set the MACHINE from agilex, stratix10, arria10, or cyclone5"
sed -i 's/^MACHINE .*=.*$/MACHINE = "arria10"/g' conf/local.conf
# Set the Path for download directory
sed -i 's/#DL_DIR ?= "${TOPDIR}\/downloads"/DL_DIR = "${TOPDIR}\/..\/downloads"/g' conf/local.conf
# Use the LTS kernel and set version
echo 'PREFERRED_PROVIDER_virtual/kernel = "linux-socfpga-lts"' >> conf/local.conf
echo 'PREFERRED_VERSION_linux-socfpga-lts = "5.4.104%"' >> conf/local.conf
# Use systemd
echo 'DISTRO_FEATURES_append = " systemd"' >> conf/local.conf
echo 'VIRTUAL-RUNTIME_init_manager = "systemd"' >> conf/local.conf
# Build additional rootfs type
echo 'IMAGE_FSTYPES += "jffs2 tar.gz"' >> conf/local.conf
# Ensure we build in all kernel-modules
echo "MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += \"kernel-modules\"" >> conf/local.conf
# Other settings
echo 'INHERIT += "rm_work"' >> conf/local.conf
echo 'DEPLOY_DIR = "${TOPDIR}/../deploy"' >> conf/local.conf
echo 'BB_GENERATE_MIRROR_TARBALLS = "1"' >> conf/local.conf
echo 'BB_DANGLINGAPPENDS_WARNONLY = "1"' >> conf/local.conf
echo 'DISTRO_FEATURES_remove = "ptest"' >> conf/local.conf
echo 'INHERIT += "archiver"' >> conf/local.conf
echo 'ARCHIVER_MODE[src] = "original"' >> conf/local.conf
echo 'COPY_LIC_MANIFEST = "1"' >> conf/local.conf
echo 'COPY_LIC_DIRS = "1"' >> conf/local.conf
echo 'LICENSE_CREATE_PACKAGE = "1"' >> conf/local.conf
ここでは、主に以下の指定をおこなっています。
・MACHINE : ビルドターゲットとする機種を指定。
(SoC FPGA の場合は、cyclone5 / arria5 / arria10 / stratix10 / agilex から選択します)
※バージョン 4.1 (langdale) 以降で agilex をターゲットとする場合は、複数の選択肢から機種を選んで指定する必要があります。
【バージョン 4.1 (langdale) 向け】
- agilex_fm61 ... Intel Agilex® 7 FPGA F-Series Transceiver-SoC Development Kit (P-Tile and E-Tile)
- agilex_fm86 ... Intel Agilex® 7 FPGA F-Series Development Kit (2x F-Tile)
- agilex_fm87 ... Intel Agilex® 7 FPGA I-Series Transceiver-SoC Development Kit (4x F-Tile)
【バージョン 4.2 (mickledore) 以降向け】
- agilex7_dk_si_agf014ea/agf014eb ... Intel Agilex® 7 FPGA F-Series Transceiver-SoC Development Kit (P-Tile and E-Tile)
- agilex7_dk_si_agi027fa/agi027fb ... Intel Agilex® 7 FPGA I-Series Transceiver-SoC Development Kit (4x F-Tile)
- agilex7_dk_dev_agf027f1es ... Intel Agilex® 7 FPGA F-Series Development Kit (2x F-Tile)
- agilex7_dv_dev_agm039fes ... Intel Agilex® 7 FPGA M-Series Development Kit - HBM2e Edition (3x F-Tile & 1x R-Tile)
MACHINE に指定可能な文字列は meta-intel-fpga レイヤーの conf/machine 以下に格納されているファイル名で決まります。
実際の内容は以下のリンク先を参照ください。ページ右上のプルダウンおよび switch ボタンより Yocto バージョンも選択できます。
machine « conf - meta-intel-fpga - Layer containing Intel SoCFPGA hardware support metadata (yoctoproject.org)
・PREFERRED_PROVIDER_virtual/kernel, PREFERRED_VERSION_linux-socfpga-lts : Linux カーネルバージョンの指定。
( meta-intel-fpga/recipes-kernel 以下のレシピからビルド対象のカーネルバージョンを選択します)
・DISTRO_FEATURES:append, VIRTUAL-RUNTIME_init_manager : Linux の起動・システム管理に "systemd" を使用するための指定。
・IMAGE_FSTYPES : 生成するファイルシステムの形式を指定。
※補足: 3-1-1. 新しい環境向けの手順では local.conf に「IMAGE_FSTYPES:remove = "multiubi"」を指定することで UBIFS を生成しないように変更しています。
生成されるイメージサイズが大きい場合に UBIFS のサイズ超過によるエラーが発生することを抑止する目的で変更しているため、UBIFS を生成したい場合には該当の記述を削除してください。
以下のオプションは、作業ディレクトリー以下の構成を整理するために指定しているものです。(任意)
・DL_DIR : ビルド実行時に Fetch (ダウンロード)されるファイルの格納先を指定。
・DEPLOY_DIR : ビルド実行の結果、生成されるイメージの格納先を指定。
その他のオプションについても必須の内容ではないので、気になる場合は Yocto 公式ドキュメントを調べてみてください。
3-2. 拡張設定:ブートローダービルド用の設定(Vシリーズはオプション、他のファミリーは必須)
インテル® Arria® 10 / インテル® Stratix® 10 / Intel Agilex® 7 をターゲットとする場合には以下の設定も必要となります。V シリーズをターゲットにする場合でブートローダーのビルドも Yocto で実施したい場合にもこの設定をおこないます。
必要となる設定項目は、ブートフローにより異なります。V シリーズや インテル® Arria® 10 をターゲットする場合は、U-Boot 向けの設定のみ。インテル® Stratix® 10 / Intel Agilex® 7 の場合は、U-Boot 向けの設定に加えて Arm Trusted Firmware (ATF) のバージョン指定も必要となります。ここでは、全てのファミリー共通で U-Boot と ATF の両方に対してバージョンの指定をおこないます。
なお、'require conf/machine/arria10-*.conf' など、コマンド内にデバイスファミリーの指定がある箇所は、使用するターゲットに応じて arria10 や agilex に置き換えて実行してください。
3-2-1. 新しい環境向け:Yocto 3.4 (honister) 以降のバージョン( U-Boot および ATF の設定)
echo 'PREFERRED_PROVIDER_virtual/bootloader = "u-boot-socfpga"' >> conf/local.conf
echo 'PREFERRED_VERSION_u-boot-socfpga = "v2023.04%"' >> conf/local.conf
echo 'PREFERRED_VERSION_arm-trusted-firmware = "v2.9"' >> conf/local.conf
echo 'require conf/machine/arria10-gsrd.conf' >> conf/local.conf
# Set the UBOOT_CONFIG:xx from MACHINE-socdk-atf (ex. "stratix10-socdk-atf") or MACHINE-socdk (ex. "cyclone5-socdk").
# xx is MACHINE Name (ex. "agilex7_dk_si_agf014ea").
echo 'UBOOT_CONFIG:arria10 = "arria10-socdk"' >> conf/local.conf
echo 'IMAGE_TYPE:arria10 = "gsrd"' >> conf/local.conf
2024年2月現在、Yocto 4.3 (nanbield) を使用して Arria® 10 もしくは Stratix® 10 をターゲットにする場合は以下の設定もおこなってください。
echo 'EXTRA_IMAGEDEPENDS:remove:arria10 = "u-boot-socfpga-env"' >> conf/local.conf
echo 'EXTRA_IMAGEDEPENDS:remove:stratix10 = "u-boot-socfpga-env"' >> conf/local.conf
Yocto 4.1 (langdale) もしくは Yocto 4.2 (mickledore) を使用して Cyclone® V をターゲットにする場合には以下の設定もおこなってください。
この設定(RBO_RELEASE_VER)では、Rocketboards.org の Release サイトにある rbf-source フォルダーの所在を指定しています。"2022.10" の指定により Index of /2022.10/rbf-source/ (rocketboards.org) にある FPGA コンフィギュレーションデータ(.rbf) を使用します。※Yocto 4.3 (nanbield) ではこの設定は不要です。
echo 'RBO_RELEASE_VER:cyclone5 = "2022.10"' >> conf/local.conf
3-2-2. 古い環境向け:Yocto 3.3.x (hardknott) 以前のバージョン( U-Boot および ATF の設定)
echo 'PREFERRED_PROVIDER_virtual/bootloader = "u-boot-socfpga"' >> conf/local.conf
echo 'PREFERRED_VERSION_u-boot-socfpga = "v2021.01%"' >> conf/local.conf
echo 'PREFERRED_VERSION_arm-trusted-firmware = "v2.4%"' >> conf/local.conf
echo 'require conf/machine/arria10-extra.conf' >> conf/local.conf
# Set the UBOOT_CONFIG from "agilex-socdk-atf", "stratix10-socdk-atf", "arria10-socdk", or "cyclone5-socdk"
echo 'UBOOT_CONFIG = "arria10-socdk"' >> conf/local.conf
echo 'IMAGE_TYPE = "gsrd"' >> conf/local.conf
ここでは、主に以下の指定をおこなっています。
・PREFERRED_PROVIDER_virtual/bootloader, PREFERRED_VERSION_u-boot-socfpga : U-Boot バージョンの指定。
( meta-intel-fpga/recipes-bsp/u-boot 以下のレシピからビルド対象の U-Boot バージョンを選択します)
・PREFERRED_VERSION_arm-trusted-firmware : ATF バージョンの指定。
( meta-intel-fpga/recipes-bsp/arm-trusted-firmware 以下のレシピからビルド対象の ATF バージョンを選択します)
・require conf/machine/xxxx-extra.conf (xxxx-gsrd.conf) : ブートローダー関連の設定を含む拡張コンフィグファイルを指定。
・UBOOT_CONFIG : U-Boot ビルド時の defconfig の選択などに使用されます。
( "agilex7_dk_si_agf014ea-socdk-atf", "stratix10-socdk-atf", "arria10-socdk", "cyclone5-socdk" から選択します。その他の選択肢はレシピの記述を参照ください。)
・IMAGE_TYPE : 評価ボード用のリファレンスデザイン(Golden System Reference Design)向けには "gsrd" を指定。
( 通常は "gsrd" を指定してください。その他のデザインをターゲットにする場合に "gsrd" 以外を指定する場合があります。)
4. ビルド(bitbake)実行
Yocto によるビルド実行は、bitbake というツールを利用します。前の手順でセットアップ・スクリプトを実行したターミナル上で、bitbake コマンドを実行することでビルド作業が開始します。新規でターミナルを起動し、以前に構築した Yocto 環境下で再度ビルドを実行する場合には、事前にセットアップ・スクリプト( poky/oe-init-build-env )を実行してください。
なお、オプションやレシピの変更をおこなう場合には、セットアップ・スクリプト実行の後、bitbake 実行前に build/conf/local.conf や layers 以下のファイルをテキストエディターにて編集してください。
cd ~/poky-socfpga
source poky/oe-init-build-env
bitbake <ターゲットイメージの指定>
<ターゲットイメージの指定>の部分には、ビルド対象に応じて以下の通りに指定してください。
・ U-Boot ....................... virtual/bootloader
・ Linux Kernel ................ virtual/kernel
・ Linux Root Filesystem ... gsrd-console-image、console-image-minimal など(recipes-images 以下のレシピより選択)
以下のように複数指定することも可能です。
bitbake virtual/bootloader gsrd-console-image
Linux Root Filesystem をビルドする場合には、 Linux Kernel も必要となるため、virtual/kernel を指定する必要はありません。(自動的に Linux Kernel もビルドされます)
あとは、ビルド完了を待ちます。マシンスペックとネットワーク速度に依りますが、Linux Root Filesystem を含む GSRD 環境一式のビルド作業が完了するまでには、3 時間以上を要します。
なお、エラーが発生した場合は、ターミナルのメッセージとログファイルを手がかりに原因を取り除きます。
(メッセージに参照すべきログファイルが示されます。)原因を修正したら再度、bitbake を実行します。
最後までビルド成功した場合には、以下のように "NOTE: Tasks Summary: " から始まるメッセージに "all succeeded." と表示されます。
5. ビルド結果の確認
ビルドが成功した場合は、以下の場所に各イメージファイルが生成されます。(以下、arria10 の部分はターゲットデバイスに応じて arria5 や cyclone5 に読み替えてください)
~/poky-socfpga/deploy/images/arria10/
必要となるファイルを以下に示します。
Root Filesystem
gsrd-console-image-arria10.tar.gz ... 他に jffs2 形式のファイルも生成されます。
gsrd-console-image-arria10.manifest ... Root Filesystem に含まれるパッケージリスト
Linux Kernel
zImage ... 他のデバイスファミリーでは Image, kernel.itb など、異なる形式を使用する場合があります。
Linux Module 形式のドライバー(.ko)は、以下の名前にアーカイブされて出力されます。
modules-arria10.tgz
Linux デバイスツリー(.dtb)
socfpga_arria10_socdk.dtb など
Linux 起動オプション・ファイル(extlinux 対応のブートローダーを使用する場合に限り必要)
extlinux.conf
あとは、上記のイメージファイルを元にブート用 SD カードイメージを作成すれば完了です。SD カードイメージの生成については下記のページを参照ください。
RocketBoards.org 『Creating and Updating SD Card』
アルティマカンパニー 技術コンテンツ『SoC FPGA ブート用 SD カードイメージの作り方』
6. まとめ
GSRD 相当の Linux イメージの作成までは、この記事に記載した手順をなぞることで実施可能です。オリジナルの環境を構築する際には、Yocto 環境のカスタマイズ方法を理解することが鍵になるので、Yocto 公式ドキュメントの内容を参照してご対応ください。
yoctoproject.org 『Welcome to the Yocto Project Documentation — The Yocto Project ® dev documentation』
おすすめ記事/資料はこちら
SoC FPGA 関連の記事や資料 はこちら...
FPGA / CPLD の一般的な開発フロー/トップページ はこちら...