もくじ
はじめに
インテル® SoC FPGA エンベデッド開発スイート(以下、SoC EDS)の v19.1 スタンダード・エディション(以下、v19.1 Std) / v19.3 プロ・エディション(以下、v19.3 Pro)からブートローダーの生成フローが変更になりました。
- リリースノートにも記載されていますが、以前まで SoC EDS にバンドルされていたブートローダーのソースツリーが付属しなくなりました。
- 今後は、ユーザーが GitHub から取得する必要があります。
- 新しいブートローダーの生成フローは、以下の Rocketboards.org のページに掲載されています。
参考: Building Bootloader for Cyclone V and Arria 10
なお Building Bootloader for Cyclone V and Arria 10 ページの Introduction には次のように記載されています。
--------------------------------
Introduction
This page contains instructions on how to build U-Boot in the following configurations:
※ 2021/03/22 現在のデバイスとツールの対応表(リリース毎に内容はアップデートされます)
Starting with SoC EDS Pro version 19.3 and SoC EDS Standard version 19.1, the following changes were made:
- The bootloader source code was removed from SoC EDS. Instead, the user needs to clone the git trees from https://github.com/altera-opensource/u-boot-socfpga.
- The same U-Boot branch is used for all SoC FPGA devices: Cyclone V SoC, Arria V SoC, Arria 10 SoC, Stratix 10 SoC, Agilex.
- The bootloader generator (bsp-editor) still needs to be used for Cyclone V SoC, Arria V SoC and Arria 10 SoC, but:
- Does not support custom user settings anymore. Instead all custom user settings must be done directly in U-Boot (device tree, configuration and source code).
- Does not create a makefile which builds the bootloader. Instead the user is notified about this page, which contains instructions on how to build the bootloader.
Note that Arria V SoC flow is identical with the Cyclone V SoC one, so it is not presented separately.
The SoC EDS bsp-editor is not used for Stratix 10 SoC and Agilex. The SoC EDS changes are not impacting these devices.
Starting with Quartus Pro 20.3, the SoC EDS was discontinued, and the functionality of the tools which were previously part of SoC EDS are provided separately. For Arria 10, the bsp-editor functionality was incorporated in an U-Boot script, and the tool is not needed anymore.
--------------------------------
<< Google 翻訳 >>
前書き
このページには、次の構成でU-Bootを構築する方法の説明が含まれています。
【図 1】 デバイスとツールの対応表
※ 2021/03/22 現在のデバイスとツールの対応表(リリース毎に内容はアップデートされます)
SoC EDSProバージョン19.3およびSoCEDS Standardバージョン19.1以降、次の変更が行われました。
- ブートローダーのソースコードがSoCEDSから削除されました。 代わりに、ユーザーはhttps://github.com/altera-opensource/u-boot-socfpgaからgitツリーのクローンを作成する必要があります。
- 同じU-BootブランチがすべてのSoCFPGAデバイスに使用されます:Cyclone® V SoC、Arria® V SoC、Arria® 10 SoC、Stratix® 10 SoC、Agilex®。
- ブートローダージェネレーター(bsp-editor)は、Cyclone® V SoC、Arria® V SoC、およびArria® 10 SoCで引き続き使用する必要があります。
- カスタムユーザー設定はサポートされなくなりました。 代わりに、すべてのカスタムユーザー設定をU-Bootで直接行う必要があります(device tree, configuration、source code)。
- ブートローダーをビルドする Mikefile を作成しません。 代わりに、ブートローダーの構築方法についてこちらのページで紹介します。
--------------------------------
この記事では、Arria® 10 SoC の場合における新旧のブートローダー・ビルドフローの説明と、ブートローダーをビルドする手順を説明しています。
1. Arria® 10 SoC のビルドフロー
Arria® 10 SoC の場合、Quartus® のコンパイルによって作成されたハンドオフ情報は、C ソースコード、XML、バイナリファイル等の形式で提供されます。
BSP-Editor はこのハンドオフ情報を Uboot 構築に使用されるソースコードに変換します。
v20.3 Pro より古いバージョンの SoC EDS の場合、BSP Editor を使用することができました。
しかし、v20.3 Pro 以降では BSP Editor の使用しない新しい手順が紹介されています。
1-1. 以前のフロー(~v18.1)
v19.3 Pro 以前のバージョンでは、次のフローを使用して U-Boot をビルドできました:
【図 2】 SoC EDS v19.1 Std / v19.3 Pro 以前のブートローダー生成フロー
- 主要なユーザーオプション(ブートソース、ECC スクラビングの有効化、ウォッチドッグなど)は、bsp-editor GUI または同等のコマンドラインを介して設定されました。
- U-Boot ソースコードは SoC EDS に付属していました。
- bsp-editor によって作成された makefile により、1 つの「make」コマンドでブートローダーをビルドできました。
1-2. 新しいフロー(v19.1std/v19.3pro ~ v20.1)
SoC EDS v19.1 Std / v19.3 Pro 以降、ビルドフローは以下に示すように異なります:
【図 3】 SoC EDS v19.1 Std / v19.3 Pro 以降の新しいブートローダー生成フロー
主な違いは次のとおりです:
- bsp-editor で定義されたすべてのユーザーオプションは適用されなくなりました。これらは引き続き bsp-editor で設定できますが効果はありません。
- すべてのカスタムユーザー設定は、U-Boot で直接行う必要があります(デバイスツリー、コンフィグレーションおよびソースコード)。
- bsp-editor によって生成される Makefile では U-Boot はビルドできません。代わりに U-Boot のソースツリーに含まれる Makefile を使用して make します。
バイナリ変換やイメージファイルへの変換は Rocketboards.org の Building Bootloader for Cyclone V and Arria 10 ページの手順に従って行います。 - U-boot ソースコードは、ユーザーが GitHub から取得する必要があります。
1-3. 最新のフロー(SoC EDS廃止後 v20.3pro ~)
v20.3 Pro 以降は、下図のようなブートフローとなります。
v20.3 以降は SoC EDS が廃止となったこともあり、いくつか変更点があります。
【図 4】 SoC EDS v19.1 Std / v19.3 Pro 以降の新しいブートローダー生成フロー
主な違いは次のとおりです:
- SoC EDS の廃止に伴い bsp-editor(bsp-create-settings)がフローから無くなりました。代わりに、bsp-editor(bsp-create-settings)から U-boot ソースツリーに同梱されている qts-filter-a10.sh を使用することになりました。
- また、bsp-editor(bsp-create-settings)から qts-filter-a10.sh に変更となったことで、U-boot Generic Source Code に取り込まれるファイルが、Device Tree から Device Tree Handoff File(.h)へ変更となりました。
2. ビルドの実行方法
2-1. 前提条件
最新のフロー(SoC EDS廃止後 v20.3pro ~)を使用し、U-Boot 2020.07 をビルドする例を示します。
(より新しい U-Boot バージョンを使用する場合は、GitHub.org のブランチ名 "socfpga_v2020.07" を置き換えてご対応ください)
■ この記事では以下の環境を使用しています(ここで使用している環境はあくまで一例です):
- Linux を実行しているホストマシン。今回は VirtualBox + Ubuntu 18.04 を使用しました。
- ツールをダウンロードし、GitHub から U-Boot git ツリーをクローンするためのインターネット接続環境。ファイアウォールやプロキシがある場合は、システム管理者が git ツリーにアクセスできるようにする必要があります。
- 目的のデバイスを搭載した インテル® SoC FPGA 開発キット: Arria® 10 SoC
- 開発ツール(Arria® 10 SoC の場合)
- Quartus® Prime Pro v20.4 (GHRD をコンパイルするため)
■ 社内ネットワークなどでプロキシがある場合、次のようなプロキシの設定が必要です。
/etc/apt/apt.conf ファイルをテキストエディターで開き、以下のようなプロキシ設定を記述して
セーブします。
$ sudo gedit /etc/apt/apt.conf
Acquire::http::proxy "http://your.proxy.address:proxy.port";
Acquire::https::proxy "https://your.proxy.address:proxy.port";
Acquire::ftp::proxy "ftp://your.proxy.address:proxy.port";
※ 上記のプロキシ設定において、your.proxy.address はプロキシアドレス、proxy.port は
プロキシポート番号を意味します。
.bashrc ファイルをテキストエディターで開き、最終行に下記のようなプロキシを追記して
セーブします。
$ gedit ~/.bashrc
export http_proxy="http://your.proxy.address:proxy.port"
export https_proxy="https://your.proxy.address:proxy.port"
export ftp_proxy="ftp://your.proxy.address:proxy.port"
※ 上記のプロキシ設定において、your.proxy.address はプロキシアドレス、proxy.port は
プロキシポート番号を意味します。
端末を一旦終了してから、再度端末を起動します。
■ Ubuntu 18.04 の端末を開き、次のコマンドを入力して、パッケージ情報を更新しておきます。
$ sudo apt-get update
$ sudo apt-get upgrade
■ ツールチェーンをダウンロードしてセットアップしておきます。
※ 'pwd' が反映されているかコマンド実行後環境変数を確認してください。
env コマンドを使用することにより環境変数が確認できます。
$ mkdir ~/toolchains
$ cd ~/toolchains
$ wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz
$ tar xf gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz
$ export PATH=`pwd`/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin:$PATH
$ export ARCH=arm
$ export CROSS_COMPILE=arm-none-linux-gnueabihf-
■ この記事ではブートローダーから Linux を起動しています。Linux を起動するには、Linux カーネル、デバイスツリー および Root Filesystem(以下、RootFs) が必要です。
Linux バイナリーの作成手順については、別記事の
「SoC EDS v19.1 Std / v19.3 Pro から変更された新しいブートローダー生成フローの動作確認(付録: Linux バイナリーのビルド)」
をご参照ください。
※ この記事では上記記事でビルドした、Linux バイナリーが $LINUX_BIN フォルダー以下に生成済みである事を前提に説明しています。
2-2. Arria® 10 SoC ブートローダーのビルド(SD カードブート向け)
2-2-1. セットアップ
①
Top フォルダーを作成します:
※ 'pwd' が反映されているかコマンド実行後環境変数を確認してください。
env コマンドを使用することにより環境変数が確認できます。
$ mkdir ~/a10_example.sdmmc
$ cd ~/a10_example.sdmmc
$ export TOP_FOLDER=`pwd`
②
ハードウェア・デザインのコピーし rbf ファイルおよびハンドオフファイルを作成します:
$ cd $TOP_FOLDER
$ rm -rf a10_soc_devkit_ghrd ghrd-socfpga-ACDS-20.4pro-20.1std ACDS-20.4pro-20.1std.zip
$ wget https://github.com/altera-opensource/ghrd-socfpga/archive/ACDS-20.4pro-20.1std.zip
$ unzip ACDS-20.4pro-20.1std.zip
$ mv ghrd-socfpga-ACDS-20.4pro-20.1std/a10_soc_devkit_ghrd_pro a10_soc_devkit_ghrd
$ rm -rf ghrd-socfpga-ACDS-20.4pro-20.1std ACDS-20.4pro-20.1std.zip
$ cd a10_soc_devkit_ghrd
$ make clean && make scrub_clean && rm -rf software
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh make generate_from_tcl
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh make rbf
2-2-2. U-Boot をビルドする
①
git ツリーのクローンを作成し、使用できるブランチをチェックアウトします。
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/
$ mkdir -p software/bootloader
$ cd software/bootloader/
$ git clone https://github.com/altera-opensource/u-boot-socfpga
$ cd u-boot-socfpga
$ git checkout -b test-bootloader -t origin/socfpga_v2020.07
②
ハンドオフファイル(.xml)をデバイスツリーで使用できる形式へ変更:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ ./arch/arm/mach-socfpga/qts-filter-a10.sh ../../../hps_isw_handoff/hps.xml arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.h
③
U-boot のビルド:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ export CROSS_COMPILE=arm-none-linux-gnueabihf-
$ export ARCH=arm
$ make socfpga_arria10_defconfig
$ make -j 24
【表 1】 ビルドにより生成されたファイル
ファイル | 説明 |
spl/u-boot-splx4.sfp | SD へ格納する SPL バイナリ |
u-boot.img | U-Boot イメージ |
④
FPGA プログラミングファイルで構成された FIT イメージを作成
ここで作成した FIT イメージは SPL で FPGA をコンフィグレーションするために使用:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ ln -s ../../../output_files/ghrd_10as066n2.core.rbf .
$ ln -s ../../../output_files/ghrd_10as066n2.periph.rbf .
$ tools/mkimage -E -f board/altera/arria10-socdk/fit_spl_fpga.its fit_spl_fpga.itb
2-2-3. SD カードのイメージを準備する
ここでは、Linux が起動可能な SD カードを準備する方法を示します。Linux が必要ない場合はこのパートはとばしてください。
※ この手順を始める前に「SoC EDS v19.1 std / v19.3 pro から変更された新しいブートローダー生成フローの動作確認(付録: Linux バイナリーのビルド)」で説明している手順を実行して、下表 2 の Linux バイナリーが $LINUX_BIN フォルダーに事前にビルドされている必要があります。
【表 2】 $LINUX_BIN フォルダーに事前にビルドされている Linux バイナリーファイル
ファイル | 説明 |
zImage | 圧縮カーネルイメージ |
socfpga_arria10_socdk_sdmmc.dtb | Arria® 10 SoC 向け SD/MMC ブート用デバイスツリー blob |
console-image-minimal-arria10.tar.xz | Arria® 10 SoC 用 RootFs(tar アーカイブ形式) |
①
SD カードの Top フォルダーを作成し、SD カードのスクリプトを取得します:
$ cd $TOP_FOLDER/
$ sudo rm -rf sd_card && mkdir sd_card && cd sd_card
$ wget https://releases.rocketboards.org/release/2020.05/gsrd/tools/make_sdimage_p3.py
$ chmod +x make_sdimage_p3.py
②
FAT パーティションのフォルダーを作成し、ファイルを収集します:
$ cd $TOP_FOLDER/sd_card
$ mkdir sdfs && cd sdfs
$ export set LINUX_BIN=~/linux_bin ← LINUX_BIN のパスを export しておきます
$ cp $LINUX_BIN/zImage .
$ cp $LINUX_BIN/socfpga_arria10_socdk_sdmmc.dtb .
$ cp ../../a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga/fit_spl_fpga.itb .
$ cp ../../a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga/u-boot.img .
$ mkdir extlinux
$ echo "LABEL Arria10 SOCDK SDMMC" > extlinux/extlinux.conf
$ echo " KERNEL ../zImage" >> extlinux/extlinux.conf
$ echo " FDT ../socfpga_arria10_socdk_sdmmc.dtb" >> extlinux/extlinux.conf
$ echo " APPEND root=/dev/mmcblk0p2 rw rootwait earlyprintk console=ttyS0,115200n8" >> extlinux/extlinux.conf
③
RootFs パーティション用のフォルダーを作成します:
$ cd $TOP_FOLDER/sd_card
$ mkdir rootfs && cd rootfs
$ sudo tar Jxfv $LINUX_BIN/console-image-minimal-arria10.tar.xz
$ sudo rm -rf lib/modules/*
④
SPL バイナリーを用意します:
$ cd $TOP_FOLDER/sd_card
$ cp ../a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga/spl/u-boot-splx4.sfp .
⑤
SD カードのイメージを準備します:
$ cd $TOP_FOLDER/sd_card
$ sudo python3 ./make_sdimage_p3.py -f -P u-boot-splx4.sfp,num=3,format=raw,size=10M,type=A2 -P sdfs/*,num=1,format=fat32,size=100M -P rootfs/*,num=2,format=ext3,size=300M -s 512M -n sdcard_a10.img
2-2-4. SD カードからのブート
①
生成された SD カードイメージ sdcard_a10.img を SD カードに書き込みます(Win32DiskImager 等を使用)。
②
Arria® 10 SoC 開発キットに SD ドーターカードが搭載されていて、SD カードブートが可能であることを確認してください。その後、SD カードスロットにカードを挿入します:
③
Arria® 10 SoC 開発キットの電源を入れ直して Linux を起動します。 ユーザー名に 「root」 を使用して、パスワード無しでログインします:
U-Boot SPL 2020.07-08704-gba1c57e617-dirty (Feb 03 2021 - 11:06:14 +0900)
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program peripheral/full bitstream ...
FPGA: Early Release Succeeded.
U-Boot SPL 2020.07-08704-gba1c57e617-dirty (Feb 03 2021 - 11:06:14 +0900)
DDRCAL: Success
DDRCAL: Scrubbing ECC RAM (1024 MiB).
DDRCAL: SDRAM-ECC initialized success with 146 ms
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program core bitstream ...
Full Configuration Succeeded.
FPGA: Enter user mode.
WDT: Started with servicing (30s timeout)
Trying to boot from MMC1
U-Boot 2020.07-08704-gba1c57e617-dirty (Feb 03 2021 - 11:06:14 +0900)socfpga_ar0
CPU: Altera SoCFPGA Arria 10
BOOT: SD/MMC External Transceiver (1.8V)
Model: Altera SOCFPGA Arria 10
DRAM: 1 GiB
WDT: Started with servicing (30s timeout)
MMC: dwmmc0@ff808000: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environment
~ 途中省略 ~
.---O---.
| | .-. o o
| | |-----.-----.-----.| | .----..-----.-----.
| | | __ | ---'| '--.| .-'| | |
| | | | | |--- || --'| | | ' | | | |
'---'---'--'--'--. |-----''----''--' '-----'-'-'-'
-' |
'---'
The Angstrom Distribution arria10 ttyS0
Angstrom v2019.06 - Kernel 5.4.64-08224-gdf3f9f0f9982
arria10 login: root
root@arria10:~#
以上で、生成した SD カード向けブートローダーにより、Linux が起動することを確認できました。
2-3. Arria® 10 SoC ブートローダーのビルド(QSPI ブート向け)
2-3-1. セットアップ
①
Top フォルダーを作成します:
※ 'pwd' が反映されているかコマンド実行後環境変数を確認してください。
env コマンドを使用することにより環境変数が確認できます。
$ mkdir ~/a10_example.qspi
$ cd ~/a10_example.qspi
$ export TOP_FOLDER=`pwd`
②
ハードウェア・デザインのコピーを準備し、QSPI 用に更新してビルドします:
$ cd $TOP_FOLDER
$ wget https://github.com/altera-opensource/ghrd-socfpga/archive/ACDS-20.4pro-20.1std.zip
$ unzip ACDS-20.4pro-20.1std.zip
$ mv ghrd-socfpga-ACDS-20.4pro-20.1std/a10_soc_devkit_ghrd_pro a10_soc_devkit_ghrd
$ rm -rf ghrd-socfpga-ACDS-20.4pro-20.1std ACDS-20.4pro-20.1std.zip
$ cd a10_soc_devkit_ghrd
$ make clean && make scrub_clean && rm -rf software
$ sed -i 's/HPS_BOOT_DEVICE .= .*/HPS_BOOT_DEVICE := QSPI/g' Makefile
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh make generate_from_tcl
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh make rbf
2-3-2. U-Boot をビルドする
①
git ツリーのクローンを作成し、サポートされているブランチをチェックアウトして、U-Boot ソースコードを取得します:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/
$ mkdir -p software/bootloader
$ cd software/bootloader
$ git clone https://github.com/altera-opensource/u-boot-socfpga
$ cd u-boot-socfpga
$ git checkout -b test-bootloader -t origin/socfpga_v2020.07
②
ハンドオフデータをデバイスツリーで使用されるヘッダーファイルへ変換します:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ ./arch/arm/mach-socfpga/qts-filter-a10.sh ../../../hps_isw_handoff/hps.xml arch/arm/dts/socfpga_arria10_socdk_qspi_handoff.h
これにより、arch/arm/dts/socfpga_arria10_socdk_qspi_handoff.h が作成されます。
③
U-Boot のコンフィグとビルドを行います:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ export ARCH=arm
$ export CROSS_COMPILE=arm-none-linux-gnueabihf-
$ make socfpga_arria10_qspi_defconfig
$ make -j 24
④
次のファイルが $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga フォルダーにビルドされます:
【表 3】 ビルドにより生成されたファイル
ファイル | 説明 |
spl/u-boot-splx4.sfp | SD へ格納する SPL バイナリ |
u-boot.img | U-Boot イメージ |
⑤
FPGA プログラミングファイルで構成された FIT イメージを作成
ここで作成した FIT イメージは SPL で FPGA をコンフィグレーションするために使用:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ cp ../../../output_files/ghrd_10as066n2.core.rbf .
$ cp ../../../output_files/ghrd_10as066n2.periph.rbf .
$ tools/mkimage -E -f board/altera/arria10-socdk/fit_spl_fpga.its fit_spl_fpga.itb
これにより、fit_spl_fpga.itb ファイルが作成されます。
⑥
U-Boot の FIT イメージを作成します:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ tools/mkimage -E -f board/altera/arria10-socdk/fit_uboot.its fit_uboot.itb
これにより、fit_uboot.itb ファイルが生成されます。
⑦
カーネルとデバイスツリーの FIT イメージを作成します :
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ cp $LINUX_BIN/a9/Image .
$ cp $LINUX_BIN/a9/socfpga_arria10_socdk_qspi.dtb .
$ tools/mkimage -f board/altera/arria10-socdk/fit_kernel_qspi.its kernel.itb
これにより、kernel.itb ファイルが生成されます。
2-3-3. QSPI バイナリーを準備する
ここでは、QSPI から Linux でブートする方法を示します。 Linux が必要ない場合はこのパートはとばしてください。
※ この手順を始める前に「SoC EDS v19.1 std / v19.3 pro から変更された新しいブートローダー生成フローの動作確認(付録: Linux バイナリーのビルド)」で説明している手順を実行して、下表 4 の Linux バイナリーが $LINUX_BIN フォルダーに事前にビルドされている必要があります。
【表 4】 $LINUX_BIN フォルダーに事前にビルドされている Linux バイナリーファイル
ファイル | 説明 |
Image | 非圧縮カーネルイメージ |
socfpga_arria10_socdk_qspi.dtb | Arria® 10 SoC 向け QSPI ブート用デバイスツリー blob |
console-image-minimal-arria10.jffs2 | Arria® 10 SoC 用 RootFs(jffs2 形式) |
①
qspi_bin フォルダを作成しこれまでに作成したバイナリファイルを準備
$ cd $TOP_FOLDER/
$ rm -rf qspi_bin && mkdir qspi_bin && cd qspi_bin
$ cp ../a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga/spl/u-boot-splx4.sfp .
$ cp ../a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga/fit_uboot.itb .
$ cp ../a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga/fit_spl_fpga.itb .
$ cp ../a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga/kernel.itb .
②
QSPI から Linux をブートするために JFFS2 rootfs イメージを準備:
$ cd $TOP_FOLDER/qspi_bin/
$ sudo rm -rf core-image-minimal-arria10-rootfs
$ mkdir core-image-minimal-arria10-rootfs
$ cd core-image-minimal-arria10-rootfs
$ tar xf $LINUX_BIN/a9/core-image-minimal-arria10.tar.gz
$ sudo rm -rf lib/modules/*
$ cd ..
$ sudo mkfs.jffs2 -r core-image-minimal-arria10-rootfs -s 256 -e 64KiB --squash -o core-image-minimal-arria10-rootfs.jffs2
$ sudo chown $USER:$USER core-image-minimal-arria10-rootfs.jffs2
$ sudo rm -rf core-image-minimal-arria10-rootfs
③
この時点で、次のバイナリーが $TOP_FOLDER/qspi_bin に格納されています:
【表 5】 Linux のブートに使用するファイル
ファイル | 説明 |
spl_w_dtb-mkpimage.bin | 4 つの SPL バイナリー、BootROM ヘッダー付き |
fit_spl_uboot.itb | U-Boot イメージ |
fit_spl_fpga.itb | FPGA コンフィグレーション・ファイル |
kernel.itb | Linux カーネルおよびデバイスツリー |
console-image-minimal-arria10.jffs2 | Arria® 10 SoC 用 RootFs(jffs2 形式) |
2-3-4. QSPI からのブート
①
Arria® 10 SoC 開発キットに QSPI ブート・フラッシュ・ドーターカードが搭載されていて、QSPI ブートが可能であることを確認してください。
②
バイナリーを QSPI フラッシュに書き込みます:
【表 6】 QSPI フラッシュに書き込むファイルとアドレスの対応
アドレス | ファイル | 説明 |
0x0000000 | spl_w_dtb-mkpimage.bin | 4 つの SPL バイナリー、BootROM ヘッダー付き |
0x0100000 | fit_spl_uboot.itb | U-Boot イメージ |
0x0200000 | n/a | U-Boot 環境 |
0x0300000 | fit_spl_fpga.itb | FPGA コンフィグレーション・ファイル |
0x1200000 | kernel.itb | Linux カーネルおよびデバイスツリー |
0x2720000 | console-image-minimal-arria10.jffs2 | Arria® 10 SoC 用 RootFs(jffs2 形式) |
$ cd $TOP_FOLDER/qspi_bin
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh quartus_hps -c 1 -o e
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh quartus_hps -c 1 -o pv -a 0x0000000 u-boot-splx4.sfp
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh quartus_hps -c 1 -o pv -a 0x0100000 fit_uboot.itb
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh quartus_hps -c 1 -o pv -a 0x0300000 fit_spl_fpga.itb
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh quartus_hps -c 1 -o pv -a 0x1200000 kernel.itb
$ ~/intelFPGA_pro/20.4/nios2eds/nios2_command_shell.sh quartus_hps -c 1 -o pv -a 0x2720000 core-image-minimal-arria10-rootfs.jffs2
参考:
quartus_hps ツールは処理が遅いため、DS-5 デバッガーを介して U-Boot をロードし、TFTP または JTAG を介してファイルをダウンロードし、U-Boot コマンドを使用して書き込むことをお勧めします。
Arria® 10 SoC DevKit 向けの例は、以下を参照してください。
参考資料: Arria 10 Flash Programming Alternative
③
Arria® 10 SoC 開発キットの電源を入れ直して Linux を起動します。 ログインするには、ユーザー名に 「root」 を使用して、パスワード無しでログインします:
U-Boot SPL 2020.07-08704-gba1c57e617-dirty (Feb 24 2021 - 19:57:33 +0900)
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program peripheral/full bitstream ...
FPGA: Early Release Succeeded.
U-Boot SPL 2020.07-08704-gba1c57e617-dirty (Feb 24 2021 - 19:57:33 +0900)
DDRCAL: Success
DDRCAL: Scrubbing ECC RAM (1024 MiB).
DDRCAL: SDRAM-ECC initialized success with 147 ms
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program core bitstream ...
Full Configuration Succeeded.
FPGA: Enter user mode.
WDT: Started with servicing (30s timeout)
Trying to boot from SPI
U-Boot 2020.07-08704-gba1c57e617-dirty (Feb 24 2021 - 19:57:33 +0900)socfpga_ar0
CPU: Altera SoCFPGA Arria 10
BOOT: QSPI Flash (1.8V)
Model: Altera SOCFPGA Arria 10
DRAM: 1 GiB
WDT: Started with servicing (30s timeout)
Loading Environment from SPI Flash... SF: Detected n25q00a with page size 256 BB
*** Warning - bad CRC, using default environment
~ 途中省略 ~
.---O---.
| | .-. o o
| | |-----.-----.-----.| | .----..-----.-----.
| | | __ | ---'| '--.| .-'| | |
| | | | | |--- || --'| | | ' | | | |
'---'---'--'--'--. |-----''----''--' '-----'-'-'-'
-' |
'---'
The Angstrom Distribution arria10 ttyS0
Angstrom v2019.06 - Kernel 5.4.64-08224-gdf3f9f0f9982
arria10 login: root
root@arria10:~#
以上で、生成した QSPI 向けブートローダーにより、Linux が起動することを確認できました。
添付資料
この記事と同じ内容のドキュメントを添付しています。オフラインで作業する場合などにご利用ください。
コメント
0件のコメント
記事コメントは受け付けていません。