この記事では、インテル® SoC FPGA のソフトウェア・リファレンス環境(GSRD: Golden Software Reference Design)に採用されている Angstrom Linux のビルド手順を日本語で解説します。対応する SoC FPGA の開発環境は、インテル® SoC FPGA エンベデッド開発スイート (SoC EDS) のバージョン v18.1 Standard Edition のツールに対応した手順で記載します。

※2020年12月現在、GSRD に採用される Linux ディストリビューションが Angstrom から Yocto 標準の Poky リファレンス環境へ移行した関係で、従来のビルド手順が使用できなくなっております。

最新のビルド手順は Rocketboards.org の各デバイスファミリー向け GSRD のページを参照ください。

 RocketBoards.org 『Cyclone V SoC GSRD - Rebuilding the GSRD Binaries
 RocketBoards.org 『Arria 10 SoC GSRD ‐ Rebuilding the GSRD Binaries
 RocketBoards.org 『Stratix 10 SoC GSRD - Rebuilding the GSRD Binaries
 RocketBoards.org 『Agilex SoC GSRD - Rebuilding the GSRD Binaries


※2021年6月:本サイトにも Yocto Poky に対応したビルド手順の紹介記事を公開しました。新しい情報は以下のページを参照ください。
 『インテル® SoC FPGA 向け Linux ビルド方法(Yocto Poky 編)

 

以下、Angstrom 向けのビルド手順についてもエラー回避を盛り込んだ内容にメンテナンスしました。必要に応じて参照ください。(2020年12月)

手順

  1. ホストマシンの準備
  2. Yocto 環境のセットアップ(初回のみ)
  3. スクリプト実行および環境変数設定
  4. ビルド(bitbake)実行
  5. ビルド結果の確認

 

本手順にて Cyclone® V SoC / Arria® V SoC / Arria® 10 SoC 向けの Linux 環境構築が可能です。

公式な手順は、RocketBoards.org と呼ばれる SoC FPGA 関連の Linux コミュニティー・サイトで公開されています。以下のリンク先も併せて参照ください。
 RocketBoards.org 『Compiling Linux

RocketBoards.org 『Compiling Linux』 の冒頭では、以下の3種類のイメージ作成に対応している旨が紹介されています。

  • U-Boot
  • Linux Kernel
  • Linux Root Filesystem


ただし、U-Boot (ブートローダー) と Linux デバイスツリーについては、ボードや FPGA 側のデザインなど、ハードウェアの差分を考慮する必要があるため、別のフローで対応することをお勧めします。別のフローは以下のページに掲載されています。

【for Cyclone® V SoC / Arria® V SoC】
 RocketBoards.org 『Generating and Compiling the Preloader
 RocketBoards.org 『Generating the Device Tree

【for Arria® 10 SoC】
 RocketBoards.org 『Generating U-boot and device tree
 RocketBoards.org 『Generating the Linux Device Tree

ブートローダーの生成手順は、本サイトに日本語資料も用意があります。
SoC はじめてガイド - Preloader Generator の使用方法

尚、この記事で紹介している Linux ビルド手順では、 ビルドシステムに Yocto Project (以下 Yocto) が採用されています。Yocto を利用する際には、git プロトコルによる外部ネットワークへのアクセスが必要となるので、ご利用のネットワーク環境で git が利用可能であることをご確認の上でビルド手順をお試しください。

Yocto の詳細情報および環境のカスタマイズ方法については、Yocto の公式ドキュメントを参照してください。この記事に記載の手順では Yocto バージョンは 3.0.4 (zeus) を利用します。
 yoctoproject.org 『Yocto Project
 yoctoproject.org 『Yocto Project 3.0.4 Documentation

Article header library 126489 pic01  1
この記事の内容と GSRD ビルドフローの関係(RocketBoards.orgから引用)

1. ホスト・マシンの準備

Linux ベースのホスト・マシンを用意します。仮想マシンでの構築も可能ですが、50 GByte 以上の空きディスク容量が要件となっている点に注意が必要です。但し、実際のところは 100 GByte 以上は用意しておいた方が良いと思います。50 GByte では 1 種類のイメージをビルドするだけで空き容量に余裕がなくなります。メモリの要件は記載がありません。当方では 8 GByte で正常に動作しています。

RocketBoards.org 『Compiling Linux』 の手順では、ホストマシンの OS は Ubuntu 14.04 LTS が推奨とありますが、既に Ubuntu 14.04 LTS はメンテナンス期間を終えている状況なので 16.04 LTS や 18.04 LTS で対応する事をお勧めします。その他のディストリビューションは Yocto Project の公式ドキュメントを参照ください。

 yoctoproject.org 『21.1. Supported Linux Distributions

 
以下のコマンドを実行して、ビルドに必要なパッケージの更新および追加を行ってください。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install phablet-tools sed wget cvs subversion git-core coreutils unzip texi2html texinfo libsdl1.2-dev docbook-utils gawk python-pysqlite2 diffstat help2man make gcc build-essential g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff libtool xterm lib32z1

 

さらに、64bit OS を利用している場合は、下記の 32 bit パッケージもインストールする必要があります。

$ sudo apt-get install ia32-libs lib32stdc++6 lib32ncurses5 lib32tinfo5

Ubuntu 14.04 LTS の場合は、ここまでの手順でホストマシンの準備が完了します。

上記のパッケージは、Ubuntu 14.04 向けの内容となっているため、一部のパッケージについてはエラーになる可能性があります。

新しい Ubuntu や、その他のディストリビューションを使用される場合は、公式ドキュメントに記載の必要パッケージも確認してください。
 yoctoproject.org 『21.2. Required Packages for the Build Host


推奨以外の OS を利用する場合には、特に Git, tar, Python のバージョンにも注意してください。

  • Git 1.8.3.1 もしくは それ以上
  • tar 1.27 もしくは それ以上
  • Python 3.4.0 もしくは それ以上

※公式ドキュメントでは、上記を満たさないディストリビューションを使用するユーザー向けに要件に合ったバージョンのツール類を含む buildtools をインストールする手順も紹介されているので、必要に応じて参照してください。
 yoctoproject.org 『21.3. Required Git, tar, and Python Versions

2. Yocto 環境のセットアップ(初回のみ)

以下のコマンドを実行することで、Yocto パッケージ(ビルドツール類)と設定ファイルがローカルマシン上に展開されます。(コマンド中の作業ディレクトリー "angstrom-build" は任意の名前で構いません)

$ cd ~
$ mkdir angstrom-build
$ cd angstrom-build
$ wget http://releases.rocketboards.org/release/2019.10/src/altera.xml
$ wget http://commondatastorage.googleapis.com/git-repo-downloads/repo
$ chmod 777 repo
$ export PATH=$PATH:~/angstrom-build
$ python3 repo init -u git://github.com/Angstrom-distribution/angstrom-manifest -b angstrom-v2019.12-zeus
$ sed -i 's/name="altera-opensource\/meta-altera" path="layers\/meta-altera" revision="angstrom-v2019.06-yocto2.7"/name="kraj\/meta-altera" path="layers\/meta-altera" revision="d2b76ad9ff51e4c4db60d4d40f29cb846c3b2f16"/g' altera.xml
$ sed -i 's/path="layers\/meta-altera-refdes" revision="master"/path="layers\/meta-altera-refdes" revision="c41becaed98e0099e99dcba950c810d71397d18e"/g' altera.xml
$ mkdir -p .repo/local_manifests
$ mv altera.xml .repo/local_manifests/
$ python3 repo sync

途中、sed コマンドにて meta-altera と meta-altera-refdes の入手元の指定を変更しています。meta-altera はより新しい設定ファイルを使うように変更していますが、meta-altera-refdes は Angstrom を使用する前提の古いリビジョンに変更しています。

最後の python3 repo sync を実行すると、作業ディレクトリー "angstrom-build" 直下の layers ディレクトリー以下に、ビルド手順の指示が記載されたレシピファイル(.bbclass .bb など)を含む meta レイヤー構造がダウンロードされます。

 

続けて、以下のコマンドにて layers 以下のレシピの一部を書き換えます。この手順により bitbake 実行時にエラーの原因となる記述を変更します。

$ sed -i 's/LAYERSERIES_COMPAT_meta-maker = "warrior"/LAYERSERIES_COMPAT_meta-maker = "warrior zeus"/g' layers/meta-maker/conf/layer.conf
$ sed -i 's/ld-is-gold/ld-is-bfd/g' layers/meta-angstrom/conf/distro/include/angstrom-glibc.inc
$ sed -i 's/ld-is-gold/ld-is-bfd/g' layers/meta-angstrom/conf/distro/include/angstrom-eglibc.inc
$ sed -i '/meta-edison/d' .repo/manifests/conf/bblayers.conf

3. スクリプト実行および環境変数設定

以下のコマンドを実行することで、ビルド環境のセットアップを行います。

$ cd ~/angstrom-build
$ export PATH=$PATH:~/angstrom-build
$ MACHINE=cyclone5 . ./setup-environment
$ sed -i '/meta-altera/a \ \ ${TOPDIR}\/layers\/meta-altera-refdes \\' conf/bblayers.conf
$ echo "DISTRO_FEATURES_remove = \" wayland \"" >> conf/local.conf
$ echo "DISTRO_FEATURES_remove = \" alsa \"" >> conf/local.conf
$ echo "PREFERRED_PROVIDER_virtual/kernel = \"linux-altera-lts\"" >> conf/local.conf
$ echo "PREFERRED_VERSION_linux-altera = \"5.4%\"" >> conf/local.conf

具体的には、セットアップ・スクリプト(setup-environment)の実行の他、conf ディレクトリー以下の設定ファイルの編集を行っています。

  • セットアップ・スクリプトに指定する「MACHINE=cyclone5」は、ターゲットデバイスに応じて arria5 や arria10 に変更してください。
  • 「$ sed -i '/meta ...」と「$ echo "..." >> conf/local.conf」の 5 行は毎回実行する必要はありません。(基本初回のみで OK)
  • PREFERRED_PROVIDER_virtual/kernel と PREFERRED_VERSION_linux-altera の指定は、layers/meta-altera/recipes-kernel 以下に格納されている Linux カーネル用のレシピの中から、ビルド対象とするバージョンを選択するための記述となっています。

4. ビルド(bitbake)実行

Yocto によるビルド実行は、bitbake というツールを利用します。前の手順でセットアップ・スクリプトを実行したターミナル上で、bitbake コマンドを実行することでビルド作業が開始します。

$ bitbake <ターゲットイメージの指定>

<ターゲットイメージの指定>の部分には、ビルド対象に応じて以下の通りに指定してください。

  • U-Boot ......... $ bitbake virtual/bootloader
  • Linux Kernel ......... $ bitbake virtual/kernel
  • Linux Root Filesystem ......... $ bitbake gsrd-console-image、$ bitbake angstrom-image など


以下のように複数指定することも可能です。

$ bitbake virtual/bootloader gsrd-console-image

Linux Root Filesystem をビルドする場合には、 Linux Kernel も必要となるため、virtual/kernel を指定する必要はありません。(自動的に Linux Kernel もビルドされます)

あとは、ビルド完了を待ちます。マシンスペックとネットワーク速度に依りますが、Linux Root Filesystem を含む GSRD 環境一式のビルド作業が完了するまでには、3 時間以上を要します。

尚、エラーが発生した場合は、ターミナルのメッセージとログファイルを手がかりに原因を取り除きます。
(メッセージに参照すべきログファイルが示されます。)原因を修正したら再度、bitbake を実行します。

5. ビルド結果の確認

ビルドが成功した場合は、以下の場所に各イメージファイルが生成されます。(以下、cyclone5 の部分はターゲットデバイスに応じて arria5 や arria10 に読み替えてください)

~/angstrom-build/deploy/glibc/images/cyclone5/

必要となるファイルを以下に示します。
Root Filesystem
 gsrd-console-image-cyclone5.tar.xz ... 他に cpio, ext3, jffs2 形式のファイルも生成されます。
 gsrd-console-image-cyclone5.manifest ... Root Filesystem に含まれるパッケージリスト

Linux Kernel
 zImage

Linux Module 形式のドライバー(.ko)は、以下の名前にアーカイブされて出力されます。
 modules-cyclone5.tgz

あとは、上記のイメージファイルを元にブート用 SD カードイメージを作成すれば完了です。SD カードイメージの生成については下記のページを参照ください。
 RocketBoards.org 『Creating and Updating SD Card
 アルティマカンパニー 技術コンテンツ『SoC FPGA ブート用 SD カードイメージの作り方

6. まとめ

GSRD 相当の Linux イメージの作成までは、この記事に記載した手順をなぞることで実施可能です。オリジナルの環境を構築する際には、Yocto 環境のカスタマイズ方法を理解することが鍵になるので、前述の Yocto 公式ドキュメントの内容を参照してご対応ください。

 yoctoproject.org 『Yocto Project 3.0.4 Documentation

おすすめ記事/資料はこちら

SoC FPGA 関連の記事や資料 はこちら...

FPGA / CPLD の一般的な開発フロー/トップページ はこちら...