はじめに
SoC FPGA エンベデッド開発スイート(以下、SoC EDS)の v19.1 スタンダード・エディション(以下、v19.1 Std) / v19.3 プロ・エディション(以下、v19.3 Pro)からブートローダーの生成フローが変更になりました。
- リリースノートにも記載されていますが、SoC EDS v18.1 以前まで SoC EDS にバンドルされていたブートローダーのソースツリーが付属しなくなりました。
- SoC EDS v19.1 Std / v19.3 Pro からは、ユーザーが GitHub からブートローダーのソースツリーを
取得する必要があります。これにより最新のブートローダーを使用することができ、容易にアップデートに対応できるようになりました。 - 変更後のブートローダーの生成フローは、以下の Rocketboards.org のページに掲載されています。
参考:Building Bootloader for Cyclone V and Arria 10
この記事では、次の構成で U-Boot をビルドする方法を記載しています。
デバイス | Quartus® バージョン | U-Boot ブランチ | Linux ブランチ |
Arria® 10 SoC | 22.4 Pro | 2022.07 | 5.15.70-lts |
注記:
上記は 2023年 3月 1日 現在のデバイスとツールの対応表です(リリース毎に内容はアップデート
されます)。
この記事では、Arria® 10 SoC の場合における新旧のブートローダー・ビルドフローの説明と、ブートローダーをビルドする手順を説明しています。
参考:
公式の SoC FPGA U-Boot のリポジトリは、https://github.com/altera-opensource/u-boot-socfpga にあります。
※ "RC" というラベルの付いたブランチは、公式のカスタマーサポートなしで、内部のアクティブな
開発用および Customer Early Access 用です。
※ Intel 以外での開発および本番環境での使用には、最新の安定版ブランチ(RC ラベルなし)を
強くお勧めします。
※ Quartus® およびデバイスのサポートについては、doc/README.socfpga を参照してください。
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. SoC EDS v18.1 以前のフロー
SoC EDS v18.1 以前のバージョンでは、次のフローを使用して U-Boot をビルドできました:
【図 1】 SoC EDS v18.1 以前のバージョンでのブートローダー生成フロー
- 主要なユーザーオプション(ブートソース、ECC スクラビングの有効化、ウォッチドッグなど)は、bsp-editor GUI または同等のコマンドラインを介して設定されました。
- U-Boot ソースコードは SoC EDS に付属していました。
- bsp-editor によって作成された Makefile により、'make' コマンド 1 つでブートローダーをビルドできました。
1-2. SoC EDS v19.1 Std / v19.3 Pro ~ v20.1 のフロー
SoC EDS v19.1 Std / v19.3 Pro ~ v20.1 では、以下に示すようにビルドフローが異なります:
【図 2】 SoC EDS v19.1 Std / v19.3 Pro ~ v20.1 のブートローダー生成フロー
主な違いは次のとおりです:
- 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 から取得する必要があります。
- qts_filter(U-Boot の一部)と呼ばれるツールを呼び出して、ハンドオフファイルと bsp-editor で生成されたファイルを、新しい U-Boot バージョンで必要な形式に変換する必要があります。
1-3. SoC EDS 廃止後の v20.3 Pro 以降のフロー
v20.3 Pro 以降は下図のようなブートフローとなります。
SoC EDS が廃止となったこともあり、いくつか変更点があります:
【図 3】 v20.3 Pro 以降のブートローダー生成フロー
主な違いは次のとおりです:
- SoC EDS の廃止に伴い 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. 前提条件
■ この記事では以下の環境を使用しています(ここで使用している環境はあくまで一例です):
-
- Linux を実行しているホストマシン。この記事では VirtualBox + Ubuntu 20.04 LTS を使用しました。
- ツールをダウンロードし、GitHub から U-Boot git ツリーをクローンするためのインターネット接続環境。ファイアウォールやプロキシがある場合は、システム管理者が git ツリーにアクセスできるようにする必要があります。
- 目的のデバイスを搭載した SoC FPGA 開発キット: Arria® 10 SoC
- 開発ツール: Quartus® Prime v22.4 Pro (Arria® 10 SoC の場合)(GHRD をコンパイルするため)
■ 社内ネットワークなどでプロキシがある場合、次のようなプロキシの設定が必要です:
Linux ホストマシンで /etc/apt/apt.conf ファイルをテキストエディター(gedit など)で開き、
以下のようなプロキシ設定を記述してセーブします。
$ sudo gedit /etc/apt/apt.conf
Acquire::http::proxy "http://proxy.address:proxy.port";
Acquire::https::proxy "https://proxy.address:proxy.port";
Acquire::ftp::proxy "ftp://proxy.address:proxy.port";
※ 上記のプロキシ設定において、proxy.address はプロキシアドレス、proxy.port はプロキシポート番号を
意味します。ユーザーのネットワーク環境に合わせて適切な設定を行ってください。
Linux ホストマシンで .bashrc ファイルをテキストエディター(gedit など)で開き、
最終行に下記のようなプロキシを追記してセーブします。
$ gedit ~/.bashrc
export http_proxy="http://proxy.address:proxy.port"
export https_proxy="https://proxy.address:proxy.port"
export ftp_proxy="ftp://proxy.address:proxy.port"
※ 上記のプロキシ設定において、proxy.address はプロキシアドレス、proxy.port はプロキシポート番号を
意味します。ユーザーのネットワーク環境に合わせて適切な設定を行ってください。
Linux ホストマシンで ~/.curlrc ファイルをテキストエディター(gedit など)で開き、
最終行に下記のようなプロキシを追記してセーブします。
$ gedit ~/.curlrc
proxy=http://proxy.address:proxy.port
※ 上記のプロキシ設定において、proxy.address はプロキシアドレス、proxy.port はプロキシポート番号を
意味します。ユーザーのネットワーク環境に合わせて適切な設定を行ってください。
Linux ホストマシンの端末を一旦終了してから、再度端末を起動します。
■ 端末を開き、次のコマンドを入力して、パッケージ情報を更新しておきます:
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install curl ← make generate_from_tcl の実行に必要なパッケージをインストールしておきます
$ sudo apt install device-tree-compiler ← tools/mkimage の実行に必要なパッケージをインストールしておきます
$ sudo apt install mtd-utils ← mkfs.jffs2 の実行に必要なパッケージをインストールしておきます
■ 社内ネットワークなどでプロキシがある場合、以下のような git config --global コマンドにより
プロキシの設定を行っておくことが必要です(ネットワーク環境に合わせて適切な設定を行って
ください):
$ git config --global http.proxy http://proxy.address:proxy.port
$ git config --global https.proxy https://proxy.address:proxy.port
■ ツールチェーンをダウンロードしてセットアップします:
$ wget https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz
$ tar xf gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz
$ rm gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz
$ export PATH=`pwd`/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin:$PATH
$ export ARCH=arm
$ export CROSS_COMPILE=arm-none-linux-gnueabihf-
■ この記事ではブートローダーから Linux を起動しています。Linux を起動するためには、
Linux カーネル、Linux デバイスツリー および Root Filesystem(以下、RootFs)が必要です。
Linux バイナリーの作成手順については、下記の関連記事をご参照ください。
参考:
SoC EDS v19.1 std / v19.3 pro 以降のブートローダー生成フロー(付録:Linux バイナリーのビルド - Cyclone® V SoC / Arria® 10 SoC 編)
注記:
この記事では上記の関連記事でビルドした、下記の Linux バイナリーファイルが $LINUX_BIN/a9フォルダー下に生成済みであることを前提に説明しています。
【表 1】 $LINUX_BIN/a9 フォルダーに事前にビルドされている Linux バイナリーファイル
ファイル | 説明 |
zImage | 圧縮カーネルイメージ |
Image | 非圧縮カーネルイメージ |
socfpga_arria10_socdk_sdmmc.dtb | Arria® 10 SoC 向け SD/MMC ブート用デバイスツリー blob |
socfpga_arria10_socdk_qspi.dtb | Arria® 10 SoC 向け QSPI ブート用デバイスツリー blob |
socfpga_arria10_socdk_nand.dtb | Arria® 10 SoC 向け NAND ブート用デバイスツリー blob |
core-image-minimal-arria10.tar.gz |
Arria® 10 SoC 用 RootFs(tar アーカイブ形式) |
2-2. Arria® 10 SoC ブートローダーのビルド(SD カードブート向け)
2-2-1. セットアップ
① Top フォルダーを作成します:
$ sudo rm -rf a10_example.sdmmc
$ mkdir a10_example.sdmmc
$ cd a10_example.sdmmc
$ export TOP_FOLDER=`pwd`
② GitHub からハードウェア・デザインを取得してコンパイルします。
その中のすでにコンパイルされている software フォルダーを削除します:
$ cd $TOP_FOLDER
$ rm -rf ghrd-socfpga-QPDS22.4_REL_GSRD_PR QPDS22.4_REL_GSRD_PR.zip a10_soc_devkit_ghrd
$ wget https://github.com/altera-opensource/ghrd-socfpga/archive/refs/tags/QPDS22.4_REL_GSRD_PR.zip
$ unzip QPDS22.4_REL_GSRD_PR.zip
$ mv ghrd-socfpga-QPDS22.4_REL_GSRD_PR/a10_soc_devkit_ghrd_pro a10_soc_devkit_ghrd
$ rm -rf ghrd-socfpga-QPDS22.4_REL_GSRD_PR QPDS22.4_REL_GSRD_PR.zip
$ cd a10_soc_devkit_ghrd
$ make clean && make scrub_clean && rm -rf software
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
make generate_from_tcl
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
make rbf
2-2-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
# 最新の U-Boot ブランチを使用する場合は、次の行をコメントアウトします
# $ git checkout -b test -t origin/socfpga_v2022.07
② hps.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-
$ make socfpga_arria10_defconfig
$ make -j 48
【表 2】 ビルドにより生成されたファイル
ファイル | 説明 |
spl/u-boot-splx4.sfp | BootROM で必要な形式の 4 つの SPL バイナリを含む起動可能なイメージ |
u-boot.img | U-Boot イメージ |
④ SPL が FPGA をコンフィグレーションするために使用する FPGA プログラミング・ファイルを
含む FIT イメージを作成します。これにより fit_spl_fpga.itb ファイルが作成されます:
$ 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 カードのイメージを準備する
① sd_card フォルダを作成し、SD カードスクリプトを取得します:
$ cd $TOP_FOLDER/
$ sudo rm -rf sd_card && mkdir sd_card && cd sd_card
$ wget https://releases.rocketboards.org/2021.04/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/a9/zImage .
$ cp $LINUX_BIN/a9/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 xf $LINUX_BIN/a9/core-image-minimal-arria10.tar.gz
$ 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 カードのイメージを準備します。これにより、$TOP_FOLDER/sd_card/sdcard_a10.img
ファイルが作成されます:
$ 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=32M \
-P rootfs/*,num=2,format=ext3,size=32M \
-s 80M \
-n sdcard_a10.img
⑥ 生成された SD カードイメージ sdcard_cv.img を SD カードに書き込みます(Win32DiskImager
等を使用)。
2-2-4. SD カードからのブート
① Arria® 10 SoC 開発キットに SD ドーターカードが搭載されていて、SD カードブートが可能
であることを確認してください。その後、SD カードスロットにカードを挿入します。
② Arria® 10 SoC 開発キットの電源を入れ直して Linux を起動します。
ユーザー名に「root」を使用して、パスワード無しでログインします:
U-Boot SPL 2022.07-23045-g123cc7934a (Apr 03 2023 - 16:28:24 +0900)
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program peripheral/full bitstream ...
FPGA: Early Release Succeeded.
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program peripheral/full bitstream ...
FPGA: Early Release Succeeded.
U-Boot SPL 2022.07-23045-g123cc7934a (Apr 03 2023 - 16:28:24 +0900)
DDRCAL: Success
DDRCAL: Scrubbing ECC RAM (1024 MiB).
DDRCAL: SDRAM-ECC initialized success with 333 ms
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program core bitstream ...
Full Configuration Succeeded.
FPGA: Enter user mode.
WDT: Started watchdog@ffd00300 with servicing (10s timeout)
Trying to boot from MMC1
U-Boot 2022.07-23045-g123cc7934a (Apr 03 2023 - 16:28:24 +0900)socfpga_arria10
CPU: Altera SoCFPGA Arria 10
BOOT: SD/MMC Internal Transceiver (3.0V)
Model: Altera SOCFPGA Arria 10
DRAM: 1 GiB
Core: 77 devices, 20 uclasses, devicetree: separate
WDT: Started watchdog@ffd00300 with servicing (10s timeout)
MMC: dwmmc0@ff808000: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Model: Altera SOCFPGA Arria 10
Net:
Warning: ethernet@ff800000 (eth0) using random MAC address - 9e:a2:6b:5b:cf:c9
eth0: ethernet@ff800000
Hit any key to stop autoboot: 0
Failed to load 'u-boot.scr'
15000828 bytes read in 797 ms (17.9 MiB/s)
fpga - loadable FPGA image support
Usage:
fpga [operation type] [device number] [image address] [image size]
fpga operations:
dump [dev] [address] [size] Load device to memory buffer
info [dev] list known device information
load [dev] [address] [size] Load device from memory buffer
loadb [dev] [address] [size] Load device from bitstream buffer (Xilinx only)
loadmk [dev] [address] Load device generated with mkimage
For loadmk operating on FIT format uImage address must include
subimage unit name in the form of addr:<subimg_uname>
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found /extlinux/extlinux.conf
Retrieving file: /extlinux/extlinux.conf
1: Arria10 SOCDK SDMMC
Retrieving file: /extlinux/../zImage
append: root=/dev/mmcblk0p2 rw rootwait earlyprintk console=ttyS0,115200n8
Retrieving file: /extlinux/../socfpga_arria10_socdk_sdmmc.dtb
Kernel image @ 0x1000000 [ 0x000000 - 0x55cbc0 ]
## Flattened Device Tree blob at 02000000
Booting using the fdt blob at 0x2000000
Loading Device Tree to 09ff6000, end 09fff451 ... OK
Starting kernel ...
Deasserting all peripheral resets
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.15.70-153198-gf87aaa2c4d7c-dirty (ubuntu@ubuntu1804) (arm-none-linux-gnueabihf-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111, GNU ld (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 2.37.20220122) #1 SMP Tue Mar 14 09:48:08 JST 2023
[ 0.000000] CPU: ARMv7 Processor [414fc091] revision 1 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: Altera SOCFPGA Arria 10
~ 途中省略 ~
[ 17.902723] random: crng init done
[ 17.906132] random: 2 urandom warning(s) missed due to ratelimiting
Starting OpenBSD Secure Shell server: sshd
generating ssh RSA host key...
generating ssh ECDSA host key...
generating ssh ED25519 host key...
done.
Starting syslogd/klogd: done
Poky (Yocto Project Reference Distro) 4.0.8 arria10 /dev/ttyS0
arria10 login: root
root@arria10:~#
以上で生成した SD カード向けブートローダーにより、Linux が起動することを確認できました。
2-3. Arria® 10 SoC ブートローダーのビルド(QSPI ブート向け)
2-3-1. セットアップ
① Top フォルダーを作成します:
$ sudo rm -rf a10_example.qspi
$ mkdir a10_example.qspi
$ cd a10_example.qspi
$ export TOP_FOLDER=`pwd`
② GitHub からハードウェア・デザインを取得して QSPI 用に更新してビルドします。
その中のすでにコンパイルされている software フォルダーを削除します:
$ cd $TOP_FOLDER
$ rm -rf ghrd-socfpga-QPDS22.4_REL_GSRD_PR QPDS22.4_REL_GSRD_PR.zip a10_soc_devkit_ghrd
$ wget https://github.com/altera-opensource/ghrd-socfpga/archive/refs/tags/QPDS22.4_REL_GSRD_PR.zip
$ unzip QPDS22.4_REL_GSRD_PR.zip
$ mv ghrd-socfpga-QPDS22.4_REL_GSRD_PR/a10_soc_devkit_ghrd_pro a10_soc_devkit_ghrd
$ rm -rf ghrd-socfpga-QPDS22.4_REL_GSRD_PR QPDS22.4_REL_GSRD_PR.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/22.4/nios2eds/nios2_command_shell.sh \
make generate_from_tcl
$ ~/intelFPGA_pro/22.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
# 最新の U-Boot ブランチを使用する場合は、次の行をコメントアウトします
# $ git checkout -b test-bootloader -t origin/socfpga_v2022.07
② hps.xml ハンドオフファイルを、デバイスツリーで使用されるインクルード・ファイルに
変換します。これにより arch/arm/dts/socfpga_arria10_socdk_qspi_handoff.h ファイルが作成
されます:
$ 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
③ 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 48
これにより、$TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga フォルダーに次のファイルがビルドされます:
【表 3】 ビルドにより生成されたファイル
ファイル | 説明 |
spl/u-boot-splx4.sfp | BootROM で必要な形式の 4 つの SPL バイナリを含む起動可能なイメージ |
u-boot.img | U-Boot イメージ |
④ SPL が FPGA をコンフィグレーションするために使用する FPGA プログラミング・ファイルを
含む FIT イメージを作成します。これにより fit_spl_fpga.itb ファイルが作成されます:
$ 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
⑤ U-Boot の FIT イメージを作成します。これにより fit_uboot.itb ファイルが生成されます:
$ 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
⑥ Linux カーネルとデバイスツリーの FIT イメージを作成します。
これにより kernel.itb ファイルが生成されます:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ export LINUX_BIN=~/linux-bin ← LINUX_BIN のパスを export しておきます
$ 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
2-3-3. QSPI バイナリーを準備する
① 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 に格納されています:
【表 4】 Linux のブートに使用するファイル
ファイル | 説明 |
spl_w_dtb-mkpimage.bin | BootROM ヘッダー付きの 4 つの SPL バイナリー |
fit_spl_uboot.itb | U-Boot イメージ |
fit_spl_fpga.itb | FPGA コンフィグレーション・ファイル |
kernel.itb | Linux カーネルおよびデバイスツリー |
core-image-minimal-arria10-rootfs.jffs2 | Arria® 10 SoC 用 RootFs(jffs2 形式) |
2-3-4. QSPI からのブート
① Arria® 10 SoC 開発キットに QSPI ブート・フラッシュ・ドーターカードが搭載されていて、
QSPI ブートが可能であることを確認してください。
② バイナリーを QSPI フラッシュに書き込みます:
【表 5】 QSPI フラッシュに書き込むファイルとアドレスの対応
アドレス | ファイル | 説明 |
0x0000000 | u-boot-splx4.sfp | BootROM ヘッダー付きの 4 つの SPL バイナリー |
0x0100000 | fit_spl_uboot.itb | U-Boot イメージ |
0x0200000 | n/a | U-Boot 環境 |
0x0300000 | fit_spl_fpga.itb | FPGA コンフィグレーション・ファイル |
0x1200000 | kernel.itb | Linux カーネルおよびデバイスツリー |
0x2720000 | core-image-minimal-arria10-rootfs.jffs2 | Arria® 10 SoC 用 RootFs(jffs2 形式) |
$ cd $TOP_FOLDER/qspi_bin
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
quartus_hps -c 1 -o e
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
quartus_hps -c 1 -o pv -a 0x0000000 u-boot-splx4.sfp
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
quartus_hps -c 1 -o pv -a 0x0100000 fit_uboot.itb
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
quartus_hps -c 1 -o pv -a 0x0300000 fit_spl_fpga.itb
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
quartus_hps -c 1 -o pv -a 0x1200000 kernel.itb
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
quartus_hps -c 1 -o pv -a 0x2720000 core-image-minimal-arria10-rootfs.jffs2
参考:
quartus_hps ツールは処理が遅いため、Arm® DS(DS-5)デバッガーを介して U-Boot をロードし、TFTP を介してファイルをダウンロードし、U-Boot コマンドを使用して書き込むことをお勧めします。
-
- quartus_hps を使用して QSPI フラッシュを消去します:
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
quartus_hps -c 1 -o E
-
- バイナリーをホストマシンの TFTP フォルダにコピーします。
- Arria 10 SoC - Run U-Boot from Debugger に示すように、デバッガーから U-Boot を実行します。
- U-Boot をネットワークに接続し、ホストマシンの IP アドレスを指定します:
$ setenv autoload no
$ dhcp
$ setenv serverip <your_server_ip>
-
- U-Boot で TFTP 経由でバイナリーをダウンロードし、QSPI に書き込みます:
$ sf probe
$ tftp ${loadaddr} u-boot-splx4.sfp;sf write ${loadaddr} 0x0000000 ${filesize}
$ tftp ${loadaddr} fit_uboot.itb; sf write ${loadaddr} 0x0100000 ${filesize}
$ tftp ${loadaddr} fit_spl_fpga.itb; sf write ${loadaddr} 0x0300000 ${filesize}
$ tftp ${loadaddr} kernel.itb; sf write ${loadaddr} 0x1200000 ${filesize}
$ tftp ${loadaddr} core-image-minimal-arria10-rootfs.jffs2 ;sf write ${loadaddr} 0x2720000 ${filesize}
③ Arria® 10 SoC 開発キットの電源を入れ直して Linux を起動します。
ログインするには、ユーザー名に「root」を使用して、パスワード無しでログインします:
U-Boot SPL 2022.07 (Jan 06 2023 - 03:46:57 +0000)
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program peripheral/full bitstream ...
FPGA: Early Release Succeeded.
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program peripheral/full bitstream ...
FPGA: Early Release Succeeded.
U-Boot SPL 2022.07 (Jan 06 2023 - 03:46:57 +0000)
DDRCAL: Success
DDRCAL: Scrubbing ECC RAM (1024 MiB).
DDRCAL: SDRAM-ECC initialized success with 332 ms
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program core bitstream ...
Full Configuration Succeeded.
FPGA: Enter user mode.
WDT: Started watchdog@ffd00300 with servicing (10s timeout)
Trying to boot from SPI
U-Boot 2022.07 (Jan 06 2023 - 03:46:57 +0000)socfpga_arria10
CPU: Altera SoCFPGA Arria 10
BOOT: QSPI Flash (1.8V)
Model: Altera SOCFPGA Arria 10
DRAM: 1 GiB
Core: 73 devices, 19 uclasses, devicetree: separate
WDT: Started watchdog@ffd00300 with servicing (10s timeout)
Loading Environment from SPIFlash... SF: Detected n25q00a with page size 256 Bytes, erase size 4 KiB, total 128 MiB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Model: Altera SOCFPGA Arria 10
Net:
Warning: ethernet@ff800000 (eth0) using random MAC address - e2:6b:56:db:60:92
eth0: ethernet@ff800000
Hit any key to stop autoboot: 0
SF: Detected n25q00a with page size 256 Bytes, erase size 4 KiB, total 128 MiB
device 0 offset 0x1200000, size 0x6e00000
SF: 115343360 bytes @ 0x1200000 Read: OK
## Loading kernel from FIT Image at 02100000 ...
Using 'conf' configuration
Trying 'kernel' kernel subimage
Description: Linux Kernel
Type: Kernel Image
Compression: uncompressed
Data Start: 0x021000cc
Data Size: 14376840 Bytes = 13.7 MiB
Architecture: ARM
OS: Linux
Load Address: 0x00008000
Entry Point: 0x00008000
Verifying Hash Integrity ... OK
## Loading fdt from FIT Image at 02100000 ...
Using 'conf' configuration
Trying 'fdt' fdt subimage
Description: Linux DTB
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x02eb60f0
Data Size: 26032 Bytes = 25.4 KiB
Architecture: ARM
Verifying Hash Integrity ... OK
Booting using the fdt blob at 0x2eb60f0
Loading Kernel Image
Loading Device Tree to 09ff6000, end 09fff5af ... OK
Starting kernel ...
Deasserting all peripheral resets
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.15.70-153198-gf87aaa2c4d7c-dirty (ubuntu@ubuntu1804) (arm-none-linux-gnueabihf-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111, GNU ld (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 2.37.20220122) #1 SMP Thu Apr 13 18:02:02 JST 2023
[ 0.000000] CPU: ARMv7 Processor [414fc091] revision 1 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: Altera SOCFPGA Arria 10
~ 途中省略 ~
[ 5.201802] socfpga-dwmac ff800000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[ 5.222631] dwmac1000: Master AXI performs any burst length
[ 5.228199] socfpga-dwmac ff800000.ethernet eth0: No Safety Features support found
[ 5.235756] socfpga-dwmac ff800000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[ 5.244458] socfpga-dwmac ff800000.ethernet eth0: registered PTP clock
[ 5.254250] socfpga-dwmac ff800000.ethernet eth0: configuring for phy/rgmii link mode
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting discover
udhcpc: broadcasting discover
udhcpc: no lease, forking to background
done.
Starting OpenBSD Secure Shell server: sshd
done.
Starting syslogd/klogd: done
Poky (Yocto Project Reference Distro) 4.0.8 arria10 /dev/ttyS0
arria10 login: root
root@arria10:~#
以上で生成した QSPI 向けブートローダーにより、Linux が起動することを確認できました。
2-4. Arria® 10 SoC ブートローダーのビルド(NAND ブート向け)
注記:
※ この記事の手順では、標準の 1Gb NAND パーツ(パーツ番号: MT29F1G08ABBEAH4:E、
マーキング: NW360)が使用されていることを前提としています。
※ 新しい開発キットでは、8Gb の NAND パーツが使用されている場合があります(パーツ番号:
MT29F8G08ABBCAH4-IT:C、マーキング: NQ299)。
新しい 8Gb パーツ番号を使用する場合は、次の変更が必要になります:
-
- フラッシュ内のすべてのアイテムが新しい消去ブロックサイズ(256KB)に揃えられていることを確認します。
- JFFS2 イメージが新しいパラメーター(256KB ブロック消去サイズ、2048 ページサイズ)を使用していることを確認してください。
- 残りのフラッシュを使用するために、RootFs パーティションのサイズを増やします。
2-4-1. セットアップ
① Top フォルダーを作成します:
$ sudo rm -rf a10_example.nand
$ mkdir a10_example.nand
$ cd a10_example.nand
$ export TOP_FOLDER=`pwd`
② GitHub からハードウェア・デザインを取得して NAND 用に更新してビルドします。
その中のすでにコンパイルされている software フォルダーを削除します:
$ cd $TOP_FOLDER
$ rm -rf ghrd-socfpga-QPDS22.4_REL_GSRD_PR QPDS22.4_REL_GSRD_PR.zip a10_soc_devkit_ghrd
$ wget https://github.com/altera-opensource/ghrd-socfpga/archive/refs/tags/QPDS22.4_REL_GSRD_PR.zip
$ unzip QPDS22.4_REL_GSRD_PR.zip
$ mv ghrd-socfpga-QPDS22.4_REL_GSRD_PR/a10_soc_devkit_ghrd_pro a10_soc_devkit_ghrd
$ rm -rf ghrd-socfpga-QPDS22.4_REL_GSRD_PR QPDS22.4_REL_GSRD_PR.zip
$ cd a10_soc_devkit_ghrd
$ make clean && make scrub_clean && rm -rf software
$ sed -i 's/HPS_BOOT_DEVICE .= .*/HPS_BOOT_DEVICE := NAND/g' Makefile
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
make generate_from_tcl
$ ~/intelFPGA_pro/22.4/nios2eds/nios2_command_shell.sh \
make rbf
2-4-2. U-Boot をビルドする
① git ツリーのクローンを作成し、サポートされているブランチをチェックアウトして、
U-Boot ソースコードを取得します:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/
$ rm -rf software/bootloader
$ mkdir -p software/bootloader
$ cd software/bootloader
$ git clone https://github.com/altera-opensource/u-boot-socfpga
$ cd u-boot-socfpga
# 最新の U-Boot ブランチを使用する場合は、次の行をコメントアウトします
# $ git checkout -b test-bootloader -t origin/socfpga_v2022.07
② hps.xml ハンドオフファイルを、デバイスツリーで使用されるインクルード・ファイルに変換
します。これにより arch/arm/dts/socfpga_arria10_socdk_nand_handoff.h が作成されます:
$ 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_nand_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_nand_defconfig
$ make -j 48
これにより、$TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga フォルダーに次のファイルがビルドされます:
【表 6】 ビルドにより生成されたファイル
ファイル | 説明 |
spl/u-boot-splx4.sfp | BootROM で必要な形式の 4 つの SPL バイナリを含む起動可能なイメージ |
u-boot.img | U-Boot イメージ |
④ SPL が FPGA をコンフィグレーションするために使用する FPGA プログラミング・ファイルを
含む FIT イメージを作成します。これにより fit_spl_fpga.itb ファイルが作成されます:
$ 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
⑤ U-Boot の FIT イメージを作成します。これにより fit_uboot.itb ファイルが作成されます:
$ 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
⑥ Linux カーネルとデバイスツリーの FIT イメージを作成します。
これにより kernel.itb ファイルが作成されます:
$ cd $TOP_FOLDER/a10_soc_devkit_ghrd/software/bootloader/u-boot-socfpga
$ export LINUX_BIN=~/linux-bin ← LINUX_BIN のパスを export しておきます
$ ln -s $LINUX_BIN/a9/Image .
$ ln -s $LINUX_BIN/a9/socfpga_arria10_socdk_nand.dtb .
$ tools/mkimage -f board/altera/arria10-socdk/fit_kernel_nand.its kernel.itb
2-4-3. NAND バイナリーのビルド
① nand_bin フォルダーを作成し、すべてのファイルを取り込みます:
$ cd $TOP_FOLDER/
$ rm -rf nand_bin && mkdir nand_bin && cd nand_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 .
② NAND から Linux を起動するための JFFS2 rootfs イメージを準備します:
$ cd $TOP_FOLDER/nand_bin
$ rm -rf rootfs
$ mkdir rootfs
$ cd rootfs
$ tar xf $LINUX_BIN/a9/core-image-minimal-arria10.tar.gz
$ rm -rf lib/modules
$ cd ..
$ mkfs.jffs2 -r rootfs -n -p --faketime --output=rootfs.jffs2 --squash -s 2048 -e 128KiB
$ rm -rf rootfs
③ この時点で、次のバイナリーが $TOP_FOLDER/nand_bin に格納されています:
【表 7】 Linux のブートに使用するファイル
ファイル | 説明 |
u-boot-splx4.sfp | BootROM ヘッダー付きの 4 つの SPL バイナリー |
fit_uboot.itb | U-Boot イメージ |
fit_spl_fpga.itb | FPGA コンフィグレーション・ファイル |
kernel.itb | Linux カーネルおよびデバイスツリー |
rootfs.jffs2 | Linux RootFs(jffs2 形式) |
2-4-4. NAND からのブート
① Arria® 10 SoC 開発キットに NAND ブート・フラッシュ・ドーターカードが搭載されていて、
NAND ブートが可能であることを確認してください。
② バイナリーを NAND フラッシュに書き込みます:
【表 8】 NAND フラッシュに書き込むファイルとアドレスの対応
アドレス | サイズ | ファイル | 説明 |
0x0000000 | 0x00100000 | u-boot-splx4.sfp | BootROM ヘッダー付きの 4 つの SPL バイナリー |
0x0100000 | 0x00100000 | fit_uboot.itb | U-Boot イメージ |
0x0200000 | 0x00100000 | 該当なし | U-Boot 環境 |
0x0300000 | 0x00F00000 | fit_spl_fpga.itb | FPGA コンフィグレーション・ファイル |
0x1200000 | 0x00E00000 | kernel.itb | Linux カーネルおよびデバイスツリー |
0x0200000 | 0x06000000 | rootfs.jffs2 | Linux RootFs(jffs2 形式) |
次の手順に従って、すべてのバイナリーを使用して NAND フラッシュをプログラムします:
-
- バイナリーをホストマシンの TFTP フォルダーにコピーします。
- Arria 10 SoC - Run U-Boot from Debugger に示すように、デバッガーから U-Boot を実行します。
- U-Boot をネットワークに接続し、ホストマシンの IP アドレスを指定します:
$ setenv autoload no
$ dhcp
$ setenv serverip <your_server_ip>
-
- U-Boot で TFTP 経由でバイナリーをダウンロードし、NAND に書き込みます:
$ nand erase clean 0x02000000 0x06000000; tftp ${loadaddr} rootfs.jffs2; nand write.trimffs ${loadaddr} 0x02000000 ${filesize}
$ nand erase 0x01200000 0x00E00000; tftp ${loadaddr} kernel.itb; nand write ${loadaddr} 0x01200000 ${filesize}
$ nand erase 0x00300000 0x00F00000; tftp ${loadaddr} fit_spl_fpga.itb; nand write ${loadaddr} 0x00300000 ${filesize}
$ nand erase 0x00100000 0x00100000; tftp ${loadaddr} fit_uboot.itb; nand write ${loadaddr} 0x00100000 ${filesize}
$ nand erase 0x00000000 0x00100000; tftp ${loadaddr} u-boot-splx4.sfp; nand write ${loadaddr} 0x00000000 ${filesize}
③ Arria® 10 SoC 開発キットの電源を入れ直して Linux を起動します。
ログインするには、ユーザー名に「root」を使用して、パスワード無しでログインします:
FPGA: Early Release Succeeded.
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program peripheral/full bitstream ...
FPGA: Early Release Succeeded.
U-Boot SPL 2022.07-23045-g123cc7934a (Apr 04 2023 - 14:39:15 +0900)
DDRCAL: Success
DDRCAL: Scrubbing ECC RAM (1024 MiB).
DDRCAL: SDRAM-ECC initialized success with 333 ms
FPGA: Checking FPGA configuration setting ...
FPGA: Start to program core bitstream ...
Full Configuration Succeeded.
FPGA: Enter user mode.
WDT: Started watchdog@ffd00300 with servicing (10s timeout)
Trying to boot from NAND
U-Boot 2022.07-23045-g123cc7934a (Apr 04 2023 - 14:39:15 +0900)socfpga_arria10
CPU: Altera SoCFPGA Arria 10
BOOT: NAND Flash (1.8V)
Model: Altera SOCFPGA Arria 10
DRAM: 1 GiB
Core: 72 devices, 18 uclasses, devicetree: separate
WDT: Started watchdog@ffd00300 with servicing (10s timeout)
NAND: 128 MiB
Loading Environment from NAND... *** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Model: Altera SOCFPGA Arria 10
Net:
Warning: ethernet@ff800000 (eth0) using random MAC address - 5a:ce:2b:fe:65:4a
eth0: ethernet@ff800000
Hit any key to stop autoboot: 0
NAND read: device 0 offset 0x1200000, size 0x6e00000
size adjusted to 0x6d80000 (4 bad blocks)
114819072 bytes read: OK
## Loading kernel from FIT Image at 02100000 ...
Using 'conf' configuration
Trying 'kernel' kernel subimage
Description: Linux Kernel
Type: Kernel Image
Compression: uncompressed
Data Start: 0x021000cc
Data Size: 14376840 Bytes = 13.7 MiB
Architecture: ARM
OS: Linux
Load Address: 0x00008000
Entry Point: 0x00008000
Verifying Hash Integrity ... OK
## Loading fdt from FIT Image at 02100000 ...
Using 'conf' configuration
Trying 'fdt' fdt subimage
Description: Linux DTB
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x02eb60f0
Data Size: 25651 Bytes = 25 KiB
Architecture: ARM
Verifying Hash Integrity ... OK
Booting using the fdt blob at 0x2eb60f0
Loading Kernel Image
Loading Device Tree to 09ff6000, end 09fff432 ... OK
Starting kernel ...
Deasserting all peripheral resets
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.15.70-153198-gf87aaa2c4d7c-dirty (ubuntu@ubuntu1804) (arm-none-linux-gnueabihf-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111, GNU ld (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 2.37.20220122) #1 SMP Tue Mar 14 09:48:08 JST 2023
[ 0.000000] CPU: ARMv7 Processor [414fc091] revision 1 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: Altera SOCFPGA Arria 10
~ 途中省略 ~
[ 5.244458] socfpga-dwmac ff800000.ethernet eth0: registered PTP clock
[ 5.254250] socfpga-dwmac ff800000.ethernet eth0: configuring for phy/rgmii link mode
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting discover
udhcpc: broadcasting discover
udhcpc: no lease, forking to background
done.
Starting OpenBSD Secure Shell server: sshd
done.
Starting syslogd/klogd: done
Poky (Yocto Project Reference Distro) 4.0.8 arria10 /dev/ttyS0
arria10 login: root
root@arria10:~#
以上で生成した NAND 向けブートローダーにより、Linux が起動することを確認できました。
おわりに
この記事では、Arria® 10 SoC の場合における新旧のブートローダー・ビルドフローの説明と、
Arria® 10 SoC でのブートローダーをビルドする手順を説明しました。
ブートローダー生成の参考になれば幸いです。