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

※ 本記事は、2020年1月に Linux Kernel 4.14.130-ltsi をターゲットとした手順へ改訂しました。

手順

  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 の公式ドキュメントを参照してください。現在 RocketBoards.org に公開されている手順では Yocto バージョンは 2.7 を利用します。
 yoctoproject.org 『Yocto Project
 yoctoproject.org 『Yocto Project Complete Documentation Set 2.7

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 パッケージ(ビルドツール類)と設定ファイルがローカルマシン上に展開されます。(コマンド中の作業ディレクトリー "yocto-angstrom-v2019.06" は任意の名前で構いません)

$ cd ~
$ mkdir angstrom-build-v2019.06
$ cd angstrom-build-v2019.06
$ 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-v2019.06
$ repo init -u git://github.com/Angstrom-distribution/angstrom-manifest -b angstrom-v2019.06-warrior
$ mkdir -p .repo/local_manifests
$ mv altera.xml .repo/local_manifests/
$ repo sync

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

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

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

$ cd ~/angstrom-build-v2019.06
$ export PATH=$PATH:~/angstrom-build-v2019.06
$ MACHINE=cyclone5 . ./setup-environment
$ sed -i '/meta-altera/a \ \ ${TOPDIR}\/layers\/meta-altera-refdes \\' conf/bblayers.conf
$ sed -i '/meta-atmel/d' conf/bblayers.conf
$ sed -i '/meta-freescale/d' conf/bblayers.conf
$ echo "DISTRO_FEATURES_remove = \" wayland \"" >> conf/local.conf
$ echo "DISTRO_FEATURES_remove = \" alsa \"" >> conf/local.conf
$ export KERNEL_PROVIDER=linux-altera-ltsi
$ export KERNEL_TAG=refs/tags/ACDS19.3_REL_GSRD_PR
$ export KBRANCH=socfpga-4.14.130-ltsi
$ export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE KBRANCH KERNEL_TAG UBOOT_TAG KERNEL_PROVIDER"

具体的には、セットアップ・スクリプト(setup-environment)の実行の他、ビルド対象(git リポジトリ上のタグ名)を指定するための環境変数を設定しています。

  • セットアップ・スクリプトに指定する「MACHINE=cyclone5」は、ターゲットデバイスに応じて arria5 や arria10 に変更してください。
  • 「$ sed -i '/meta ...」と「$ echo "DISTRO_FEATURES_remove ...」で始まる 5 行は毎回実行する必要はありません。(基本初回のみで OK)
  • KERNEL_TAG は適宜ビルド対象にするリビジョンに合わせて変更してください。(参照: https://github.com/altera-opensource/linux-socfpga/tags

 

4. ビルド(bitbake)実行

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

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

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

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


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

$ bitbake virtual/bootloader gsrd-console-image

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

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

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

 

※補足(2020年3月 追記):

2020年3月現在、手順通りに進めると bitbake 実行時に以下の ERROR メッセージが発生するようです。

❝ ERROR: Layer meta-altera-refdes is not compatible with the core layer which only supports these series: warrior (layer is compatible with zeus) ❞ 

 

この ERROR が発生する場合は「angstrom-build-v2019.06/layers/meta-altera-refdes/conf/layer.conf」の定義を以下のように変更してみてください。

【変更前】LAYERSERIES_COMPAT_meta-altera-refdes = "zeus"

【変更後】LAYERSERIES_COMPAT_meta-altera-refdes = "warrior"

 

5. ビルド結果の確認

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

~/yocto-angstrom-v2019.06/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

6. まとめ

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

 yoctoproject.org 『Yocto Project Complete Documentation Set 2.7


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

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

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