6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 12

【Nerves】ElixirからFPGAをゴリゴリ使える環境を作ろう。EBAZ4205への移植

Last updated at Posted at 2024-11-28

関連記事

始めに

petalinuxをBuildrootでビルドする に引き続き、Zynqを使ったボードでNervesを動作させることを目指してみます。

Nervesのポーティング

Nervesのポーティングは、以前、M5Stack Core MP135へのポーティングを行ったことがあります。

これで作成したnerves_system_m5stack_core_mp135を元に、Zynqのボードに合わせた設定を作成してみます。

ターゲットにするボードは、EBAZ4205とします。

nerves_system_ebaz4205という名前で、新しいNervesのシステムを作成してみます。
EBAZ4205は、Zynq-7000搭載のボードです。マイニングマシーンに使われていたコントローラの中古販売品でaliexpress等で、低価格で販売されてます。評価boardと違い、開発環境を自分で環境を構築する必要がありますが、見方を変えると、このボードで動作できれば、自分でボードを開発した場合でも、同様の手順でNervesを動作させることができると思います。

変更点

変更点は、大きく分けて以下の2点です。

nerves_defconfigの変更

BR2_LINUX_KERNELとBR2_TARGET_UBOOTをこの記事で動作確認しているものに変更しました。

BR2_arm=y
BR2_cortex_a9=y
BR2_ARM_ENABLE_NEON=y
BR2_ARM_ENABLE_VFP=y
BR2_TARGET_GENERIC_GETTY_PORT="ttyPS0"
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/nerves-project/toolchains/releases/download/v13.2.0/nerves_toolchain_armv7_nerves_linux_gnueabihf-linux_${shell uname -m}-13.2.0-BE3EA83.tar.xz"
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="armv7-nerves-linux-gnueabihf"
BR2_TOOLCHAIN_EXTERNAL_GCC_13=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
# BR2_TOOLCHAIN_EXTERNAL_INET_RPC is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_TOOLCHAIN_EXTERNAL_FORTRAN=y
BR2_TOOLCHAIN_EXTERNAL_OPENMP=y
BR2_TAR_OPTIONS="--no-same-owner"
BR2_BACKUP_SITE="http://dl.nerves-project.org"
BR2_ENABLE_DEBUG=y
BR2_GLOBAL_PATCH_DIR="${BR2_EXTERNAL_NERVES_PATH}/patches"
BR2_REPRODUCIBLE=y
BR2_ROOTFS_SKELETON_CUSTOM=y
BR2_ROOTFS_SKELETON_CUSTOM_PATH="${BR2_EXTERNAL_NERVES_PATH}/board/nerves-common/skeleton"
BR2_INIT_NONE=y
BR2_ROOTFS_DEVICE_TABLE="${BR2_EXTERNAL_NERVES_PATH}/board/nerves-common/device_table.txt"
BR2_ENABLE_LOCALE_WHITELIST="locale-archive"
BR2_GENERATE_LOCALE="en_US.UTF-8"
BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_NERVES_PATH}/board/nerves-common/rootfs_overlay ${NERVES_DEFCONFIG_DIR}/rootfs_overlay"
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_NERVES_PATH}/board/nerves-common/post-build.sh ${NERVES_DEFCONFIG_DIR}/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="${NERVES_DEFCONFIG_DIR}/post-createfs.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/Xilinx/linux-xlnx.git"
BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="xlnx_rebase_v5.15_LTS"
BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x8000"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="${NERVES_DEFCONFIG_DIR}/ebaz4205/dts/ebaz4205-zynq7.dts ${NERVES_DEFCONFIG_DIR}/ebaz4205/dts/ebaz4205-board.dtsi ${NERVES_DEFCONFIG_DIR}/ebaz4205/dts/ebaz4205-pl.dtsi"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${NERVES_DEFCONFIG_DIR}/ebaz4205/linux/linux.config"
BR2_PACKAGE_BUSYBOX_CONFIG="${BR2_EXTERNAL_NERVES_PATH}/board/nerves-common/busybox.config"
BR2_PACKAGE_F2FS_TOOLS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT2XX=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y
# BR2_PACKAGE_RNG_TOOLS_JITTERENTROPY_LIBRARY is not set
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBP11=y
BR2_PACKAGE_UNIXODBC=y
BR2_PACKAGE_LIBMNL=y
BR2_PACKAGE_WIRELESS_REGDB=y
BR2_PACKAGE_WPA_SUPPLICANT=y
BR2_PACKAGE_WPA_SUPPLICANT_WIRED=y
BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y
BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT=y
BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG=y
BR2_PACKAGE_WPA_SUPPLICANT_WPA3=y
BR2_PACKAGE_WPA_SUPPLICANT_CTRL_IFACE=y
# BR2_TARGET_ROOTFS_TAR is not set
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_GIT=y
BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/embed-me/u-boot.git"
BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="v2019.07-ebaz4205"
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="zynq_ebaz4205"
BR2_TARGET_UBOOT_NEEDS_DTC=y
BR2_TARGET_UBOOT_NEEDS_OPENSSL=y
BR2_TARGET_UBOOT_FORMAT_IMG=y
BR2_TARGET_UBOOT_SPL=y
BR2_TARGET_UBOOT_SPL_NAME="spl/boot.bin"
BR2_NERVES_SYSTEM_NAME="nerves_system_stm32mp135d"
BR2_PACKAGE_NBTTY=y
BR2_PACKAGE_NERVES_CONFIG=y

fwup.confの変更

U-Bootのイメージを保存するパーティションがCore MP135と異なるので、fwup.confを変更しました。

この変更は、NervesのZybo Z7-10へのポーティングを参考にしました。

build

nerves_system_ebaz4205を使用するテストプロジェクトを作成してビルドしてみます。

Build成功したら、SDカードに書き込んで、EBAZ4205で起動してみます。

起動結果

U-Boot関係でいくつかの問題点があったのですが、修正して、起動することができました。

image.png

Nervesが動作することを確認できました。

まとめ

NervesをEBAZ4205で動作させることができました。
Buildrootでの構築の実績があったのと、fwup.confの記述方法については、以前のポーティング作業での経験が活かせたので、それほど難しい作業ではありませんでした。

しかし、以下の問題点があります。

  • FPGAのプログラムの書き込みができておらず、EthernetのPHYが認識されていません。
  • U-Bootの環境変数が、uEnv.txtに保存する形になっていて、Nervesのfwup.confで指定している環境変数と共用できていません。

U-Boot周りを見直す必要がありそうです。
このあたりを見直して、EBAZ4205でNervesを動作させることができるようにしたいと思います。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?