数年前に買って以来、部品箱に埋もれていたDE0-Nano-SoCを動かそうと思い立った。
いざやってみるといくつかハマった点があるので、本記事を備忘録として残しておく。
基本的には以下のサイトの手順に沿って実施した。
1.と2.の手順は特に問題なかったので、3.以降について記載する。
なお、yoctoのバージョンは5.0.12(scarthgap)を使用した。
3. スクリプト実行および環境設定
bblayers.confとlocal.confに設定を追記する必要がある。
上記手順では一行ずつ追記しておりわかりづらかったので、以下に追加分を記載する。
BBLAYERS ?= " \
${TOPDIR}/../poky/meta \
${TOPDIR}/../poky/meta-poky \
${TOPDIR}/../poky/meta-yocto-bsp \
${TOPDIR}/../layers/meta-intel-fpga \
${TOPDIR}/../layers/meta-intel-fpga-refdes \
${TOPDIR}/../layers/meta-openembedded/meta-oe \
${TOPDIR}/../layers/meta-openembedded/meta-networking \
${TOPDIR}/../layers/meta-openembedded/meta-python \
${TOPDIR}/../layers/meta-openembedded/meta-gnome \
${TOPDIR}/../layers/meta-openembedded/meta-xfce \
${TOPDIR}/../layers/meta-openembedded/meta-initramfs \
${TOPDIR}/../layers/meta-openembedded/meta-multimedia \
${TOPDIR}/../layers/meta-openembedded/meta-webserver \
${TOPDIR}/../layers/meta-openembedded/meta-filesystems \
${TOPDIR}/../layers/meta-openembedded/meta-perl \
"
MACHINE = "cyclone5"
DL_DIR = "${TOPDIR}/../downloads"
PREFERRED_PROVIDER_virtual/kernel = "linux-socfpga-lts"
PREFERRED_VERSION_linux-socfpga-lts = "6.6.%"
DISTRO_FEATURES:append = " systemd usrmerge"
VIRTUAL-RUNTIME_init_manager = "systemd"
IMAGE_FSTYPES += "jffs2 tar.gz"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
INHERIT += "rm_work"
DEPLOY_DIR = "${TOPDIR}/../deploy"
BB_GENERATE_MIRROR_TARBALLS = "1"
BB_DANGLINGAPPENDS_WARNONLY = "1"
DISTRO_FEATURES:remove = "ptest"
IMAGE_FSTYPES:remove = "multiubi"
INHERIT += "archiver"
ARCHIVER_MODE[src] = "original"
COPY_LIC_MANIFEST = "1"
COPY_LIC_DIRS = "1"
LICENSE_CREATE_PACKAGE = "1"
PREFERRED_PROVIDER_virtual/bootloader = "u-boot-socfpga"
PREFERRED_VERSION_u-boot-socfpga = "v2024.04%"
PREFERRED_VERSION_arm-trusted-firmware = "v2.11"
require conf/machine/cyclone5-gsrd.conf
UBOOT_CONFIG:cyclone5 = "de0-nano-soc"
IMAGE_TYPE:cyclone5 = "gsrd"
DE0-Nano-SoC向けには必要ない設定もおそらく含まれているが、精査はしていない。
4. ビルド(bitbake)実行
ビルドは以下のコマンドで実施。
$ bitbake core-image-minimal
hw-ref-design.bbのビルド時にエラーが発生した。
DEBUG: Mirror fetch failure for url https://mirrors.kernel.org/yocto-sources/cyclone5_gsrd_soc_system.rbf;name=cyclone5_gsrd_core (original url: https://releases.rocketboards.org/release/2024.11/rbf-source/cyclone5_gsrd_soc_system.rbf;name=cyclone5_gsrd_core)
DEBUG: Fetcher failure: Fetch command export PSEUDO_DISABLED=1; export PATH="/home/yocto/intel-fpga-yocto/build/tmp/sysroots-uninative/x86_64-linux/usr/bin:/home/yocto/intel-fpga-yocto/poky/scripts:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/usr/bin/arm-poky-linux-gnueabi:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot/usr/bin/crossscripts:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/usr/sbin:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/usr/bin:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/sbin:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/bin:/home/yocto/intel-fpga-yocto/poky/bitbake/bin:/home/yocto/intel-fpga-yocto/build/tmp/hosttools"; export HOME="/home/agepan"; /usr/bin/env wget -t 2 -T 100 -O /home/yocto/intel-fpga-yocto/downloads/cyclone5_gsrd_soc_system.rbf.tmp -P /home/yocto/intel-fpga-yocto/downloads 'https://mirrors.kernel.org/yocto-sources/cyclone5_gsrd_soc_system.rbf' --progress=dot -v failed with exit code 8, see logfile for output
ERROR: Fetcher failure: Fetch command export PSEUDO_DISABLED=1; export PATH="/home/yocto/intel-fpga-yocto/build/tmp/sysroots-uninative/x86_64-linux/usr/bin:/home/yocto/intel-fpga-yocto/poky/scripts:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/usr/bin/arm-poky-linux-gnueabi:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot/usr/bin/crossscripts:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/usr/sbin:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/usr/bin:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/sbin:/home/yocto/intel-fpga-yocto/build/tmp/work/cyclone5-poky-linux-gnueabi/hw-ref-design/1.0/recipe-sysroot-native/bin:/home/yocto/intel-fpga-yocto/poky/bitbake/bin:/home/yocto/intel-fpga-yocto/build/tmp/hosttools"; export HOME="/home/agepan"; /usr/bin/env wget -t 2 -T 100 -O /home/yocto/intel-fpga-yocto/downloads/cyclone5_gsrd_soc_system.rbf.tmp -P /home/yocto/intel-fpga-yocto/downloads 'https://releases.rocketboards.org/release/2024.11/rbf-source/cyclone5_gsrd_soc_system.rbf' --progress=dot -v failed with exit code 8, see logfile for output
ERROR: Bitbake Fetcher Error: FetchError('Unable to fetch URL from any source.', 'https://releases.rocketboards.org/release/2024.11/rbf-source/cyclone5_gsrd_soc_system.rbf;name=cyclone5_gsrd_core')
DEBUG: Python function base_do_fetch finished
DEBUG: Python function do_fetch finished
cycloneVのコンフィグレーションファイル(cyclone5_gsrd_soc_system.rbf)が見つからず、fetchに失敗している。
fetch元のURL( "https://releases.rocketboards.org/release/" )を確認すると、確かにレシピで指定されているバージョン"2024.11"のディレクトリに該当ファイルは無かった。
過去のバージョンを確認すると"2022.10"にはファイルが存在していた為、レシピを以下の通り修正した。
RBO_RELEASE_VER ?= "2022.10"
SRC_URI[cyclone5_gsrd_core.sha256sum] = "66aba3b771153b63e54373bbc526b86236a07e0bef84d4a0cc3b5559c1b0af55"
5. ビルド結果の確認
正常にビルドが完了すると以下にイメージファイルが生成される。
deploy/images/cyclone5/core-image-minimal-cyclone5.rootfs.wic
上記イメージファイルをddコマンドでSDカードに書き込み、
ボードにSDカードとUART用のUSBケーブル及びACアダプタを接続し電源を投入する。
...が、シリアルコンソールにログは出力されず、ボードはうんともすんとも言わなかった。
シリアルにログが出ないとすると、ブートローダの起動に失敗していると思われる。
DE0-Nano-SoC付属のSDカード(起動確認済)があったので、まずはSDカードのパーティション構成や配置しているファイルに問題が無いかを確認した。
root@socfpga:~# ls /dev/mmcblk0
mmcblk0 mmcblk0p1 mmcblk0p2 mmcblk0p3
root@socfpga:~# mount /dev/mmcblk0p1 /tmp/sd/
root@socfpga:~# ls /tmp/sd/
de0_nano_soc.rbf socfpga.dtb u-boot.scr zImage
root@cyclone5:~# ls /dev/mmcblk0p
mmcblk0p1 mmcblk0p2 mmcblk0p3
root@cyclone5:~# mount /dev/mmcblk0p1 /tmp/sd/
root@cyclone5:~# ls /tmp/sd/
soc_system.rbf extlinux socfpga_cyclone5_socdk.dtb u-boot.scr zImage
比較すると、rbfファイルの名前が異なっている。
rbfファイル名は特定の名称に合わせておく必要があると思われるので、ファイル名を「soc_system.rbf」 → 「de0_nano_soc.rbf」に修正したところ起動した。
U-Boot SPL 2024.04 (Oct 16 2024 - 02:54:45 +0000)
Trying to boot from MMC1
U-Boot 2024.04 (Oct 16 2024 - 02:54:45 +0000)
CPU: Altera SoCFPGA Platform
FPGA: Altera Cyclone V, SE/A4 or SX/C4, version 0x0
BOOT: SD/MMC Internal Transceiver (3.0V)
DRAM: 1 GiB
Core: 29 devices, 16 uclasses, devicetree: separate
MMC: dwmmc0@ff704000: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Model: Terasic DE-0(Atlas)
Net:
Error: ethernet@ff702000 No valid MAC address found.
No ethernet found.
=>
rbfファイルのリネームは、先ほどのhw-ref-design.bb内で行っている。
C5_GHRD_CORE_RBF = "soc_system.rbf"
do_deploy () {
~略~
if ${@bb.utils.contains("MACHINE", "cyclone5", "true", "false", d)} ; then
install -D -m 0644 ${WORKDIR}/${MACHINE}_${IMAGE_TYPE}_${C5_GHRD_CORE_RBF} ${DEPLOYDIR}/${MACHINE}_${IMAGE_TYPE}_ghrd/${C5_GHRD_CORE_RBF}
fi
rbfファイルをブート用パーティションに配置する際、C5_GHRD_CORE_RBFに設定した名称へ変更するが、リネーム先の名称がDE0-Nano-SoC向けではなかったことが原因だった。
C5_GHRD_CORE_RBFの設定を直接編集1すれば次回以降問題は発生しない。
Linuxのブート
デフォルトではu-bootの起動後コンソールの入力待ちとなる。
以下のコマンドを入力することでLinuxが起動する。
=> run mmc_boot
Poky (Yocto Project Reference Distro) 5.0.12 cyclone5 ttyS0
cyclone5 login: root
WARNING: Poky is a reference Yocto Project distribution that should be used for
testing and development purposes only. It is recommended that you create your
own distribution for production use.
root@cyclone5:~#
おわり
DE0-Nano-SoC向けのYoctoビルド方法は他にも解説いただいているサイトがあったが、情報が古くなっているようだった。なので同じようにDE0-Nano-SoCをYoctoで使いたい人(居るかわからないけど)の参考になれば幸い。
-
この名称はボード固有のものであると思われるので、レシピで固有の名前を設定するよりはlocal.confから指定できるようにした方が良いのではないかと思う。まぁ別のボードを使う予定はないので、今回は気にしないことにした。 ↩