Article header library 126489  1

インテル® SoC FPGA 向け Linux ビルド方法

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

手順

本手順にて 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 Project の公式ドキュメントを参照してください。v17.1 向け GSRD のビルド環境では Yocto バージョンは 2.0.X を利用します。
 yoctoproject.org 『Yocto Project 2.0.3 - Jethro
 yoctoproject.org 『Yocto Project Complete Documentation Set 2.0.3

Article header library 126489 pic01  1

この記事の内容と GSRD ビルドフローの関係(rocketboards.orgから引用)

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

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

Rocketboards.org 『Compiling Linux』 の手順では、ホスト・マシンの OS は Ubuntu 14.04 LTS が推奨です。Ubuntu 14.04 LTS の場合は、以下のコマンドを実行して、ビルドに必要なパッケージの更新および追加を行ってください。
$ 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 を利用している場合は、下記の32bitパッケージもインストールする必要があります。
$ sudo apt-get install ia32-libs lib32stdc++6
Ubuntu 14.04 LTS の場合は、ここまでの手順でホスト・マシンの準備が完了します。

Ubuntu 14.04 LTS 以外を利用する場合は、Yocto のマニュアルに従ってください。
 yoctoproject.org 『Setting Up to Use the Yocto Project
 yoctoproject.org 『System Requirements

推奨以外の OS を利用する場合には、特に Git, tar, Python のバージョンにも注意してください。
  • Git 1.7.8 もしくは それ以上
  • tar 1.24 もしくは それ以上
  • Python 2.7.3 もしくは それ以上 (但し、Python 3.x は非対応)

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

以下のコマンドを実行することで、Yocto パッケージ(ビルド・ツール類)と設定ファイルがローカル・マシン上に展開されます。(コマンド中の作業ディレクトリ "yocto_angstrom-v2015.12" は任意の名前で構いません)
$ cd ~
$ mkdir yocto_angstrom-v2015.12
$ cd yocto_angstrom-v2015.12
$ wget http://releases.rocketboards.org/release/2017.10/gsrd/src/altera.xml
$ wget http://commondatastorage.googleapis.com/git-repo-downloads/repo
$ chmod 777 repo
$ export PATH=$PATH:~/yocto_angstrom-v2015.12
$ repo init -u git://github.com/Angstrom-distribution/angstrom-manifest -b angstrom-v2015.12-yocto2.0
$ mkdir -p .repo/local_manifests
$ mv altera.xml .repo/local_manifests/
$ repo sync
最後の repo sync を実行すると、作業ディレクトリ "yocto_angstrom-v2015.12" 直下の source ディレクトリ以下にビルド手順の指示が記載されたレシピ・ファイル(.bbclass .bb など)を含む meta レイヤー構造がダウンロードされます。

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

以下のコマンドを実行することで、ビルド環境のセットアップを行います。
$ cd ~/yocto_angstrom-v2015.12
$ export PATH=$PATH:~/yocto_angstrom-v2015.12
$ MACHINE=cyclone5 . ./setup-environment
$ sed -i '/meta-altera/a \ \ ${TOPDIR}\/sources\/meta-altera-refdes \\' conf/bblayers.conf
$ sed -i '/meta-atmel/d' conf/bblayers.conf
$ export KERNEL_PROVIDER=linux-altera-ltsi
$ export KERNEL_TAG=refs/tags/ACDS17.1_REL_GSRD_PR
$ export UBOOT_TAG=refs/tags/ACDS17.1_REL_GSRD_PR
$ export KBRANCH=socfpga-4.1.33-ltsi
$ BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE KBRANCH KERNEL_TAG UBOOT_TAG KERNEL_PROVIDER"
具体的には、セットアップ・スクリプト(setup-environment)の実行の他、ビルド対象(git リポジトリ上のタグ名)を指定するための環境変数を設定しています。
  • セットアップ・スクリプトに指定する「MACHINE=cyclone5」は、ターゲット・デバイスに応じて arria5 や arria10 に変更してください。
  • U-Boot のビルドを行わない場合は UBOOT_TAG の設定は不要です。

あと、v17.1 の GSRD では、Linux カーネル・バージョン 4.1.33-ltsi を使用する筈ですが、なぜか所定の場所に 4.1.33-ltsi 用のレシピが用意されていません。

本来は不要な手順となりますが、以下の添付ファイルをダウロードして、作業ディレクトリ以下 source/meta-altera/recipes-kernel/linux/linux-altera-ltsi_4.1.33.bb に格納してください。(ファイル名は、ダウンロード後にリネームしてください。)

linux-altera-ltsi_4.1.33__1.bb

kernel 4.1.33-ltsi 用のレシピ


※2018/3/9 更新(以下、kernel 4.9.78-ltsi を利用する手順を追加)

補足: 最新 LTSI カーネル 4.9.78-ltsi を利用する手順

現在、v17.1 のリファレンス環境に使用される 4.1.33-ltsi のカーネルソースツリーがダウンロードできなくなっているようなので、代わりに最新 LTSI カーネルを利用する方法をご紹介します。
まず、前述の linux-altera-ltsi_4.1.33.bb の代わりに linux-altera-ltsi_4.9.78.bb を同じ場所に格納します。
あとは、同じく前述のコマンドの「$ export KERNEL_PROVIDER=linux-altera-ltsi」以降を以下の内容に差し替えるのみで最新 LTSI カーネルでのビルドが可能です。(その他の手順は変更なし)
$ export KERNEL_PROVIDER=linux-altera-ltsi
$ export UBOOT_TAG=refs/tags/ACDS17.1_REL_GSRD_PR
$ export KBRANCH=socfpga-4.9.78-ltsi
$ BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE KBRANCH UBOOT_TAG KERNEL_PROVIDER"

linux-altera-ltsi_4.9.78__1.bb

kernel 4.9.78-ltsi 用のレシピ

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 を実行します。

5. ビルド結果の確認

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

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

 yoctoproject.org 『Yocto Project Complete Documentation Set 2.0.3


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

関連タグ