Zephyr 在 BeagleV-Fire(Microchip PolarFire MPFS025T)上的构建、调试与烧录实战指南
2026/9/16 17:37:25 网站建设 项目流程

Zephyr 在 BeagleV-Fire(Microchip PolarFire MPFS025T)上的构建、调试与烧录实战指南

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

BeagleV®-Fire 是 BeagleBoard 推出的一款基于 Microchip PolarFire® MPFS025T 5 核 RISC-V SoC(内含 FPGA fabric)的单板计算机(SBC)。本文以 Zephyr 仓库中 boards/beagle/beaglev_fire/doc/index.rst 为骨架,结合该板卡的设备树、defconfig 与 SoC Kconfig 源码,完整讲解 BeagleV-Fire 的三种 Zephyr 板卡配置、west build构建流程、OpenOCD + GDB 调试、以及基于 Hart Software Services(HSS)的镜像生成与usbdmsc烧录全流程。读完本文,你将能够独立完成从源码构建到上板运行的全链路操作。

硬件概览:RISC-V 五核 + FPGA 的融合平台

BeagleV-Fire 的核心是 Microchip 的 PolarFire MPFS025T SoC,包含 5 个 RISC-V 核心(1 个 E51 监控核 + 4 个 U54 应用核),并集成了可编程 FPGA fabric。它在 Zephyr 中被定义为 arch 为riscv、type 为mcu的板卡(见 beaglev_fire_polarfire_u54.yaml),vendor 为beagle

这块板子继承了 BeagleBone Black 的 P8/P9 cape 排针引脚定义,可以直接叠放 BeagleBone 生态的 cape 扩展板,加上 RISC-V ISA 与 FPGA 的可重构能力,非常适合嵌入式开发者、开源硬件爱好者和研究者做异构计算、自定义外设与低功耗原型验证。

从 beaglev_fire_common.dtsi 可以看到板级的核心设备树配置:

  • compatible = "beagle,beaglev-fire", "microchip,mpfs",并 include 了 SoC 级设备树microchip/mpfs.dtsi
  • 控制台与 shell 均指向uart0chosen节点),波特率 115200,时钟 150 MHz;
  • 定义了 2GB 的高位 DDR 内存区ddr_cached_high(地址0x1000000000,大小0x80000000),并作为zephyr,sram使用;
  • 默认使能了gpio2

支持的板卡配置与三种运行形态

BeagleV-Fire 在 Zephyr 中提供了三个 board configuration,分别对应 PolarFire SoC 上不同 hart(核心)的使用策略:

配置标识用途对应 defconfig
beaglev_fire/polarfire/e51仅使用 E51 监控核心beaglev_fire_polarfire_e51_defconfig
beaglev_fire/polarfire/u54使用 U54 应用核心beaglev_fire_polarfire_u54_defconfig
beaglev_fire/polarfire/u54/smp使用 U54 核心并开启CONFIG_SMP=ybeaglev_fire_polarfire_u54_smp_defconfig

这些配置在 Kconfig.beaglev_fire 中通过BOARD_BEAGLEV_FIRE统一入口,按所选变体分别select SOC_POLARFIRE_U54SOC_POLARFIRE_E51,对应的 SoC 定义位于 soc/microchip/miv/polarfire/Kconfig.soc。

设备树层面,三种配置通过禁用/启用 CPU 节点来体现核心差异:

  • E51 形态(beaglev_fire_polarfire_e51.dts):禁用cpu@1cpu@4(4 个 U54),只保留 E51;
  • U54 形态(beaglev_fire_polarfire_u54.dts):禁用cpu@0(E51),仅启用 4 个 U54;
  • U54 SMP 形态(beaglev_fire_polarfire_u54_smp.dts):直接 include U54 的设备树,并在 defconfig 中追加CONFIG_SMP=y启用多核调度。

三种 defconfig 的共同基础配置包括:

CONFIG_MPFS_HAL=n CONFIG_BASE64=y CONFIG_INCLUDE_RESET_VECTOR=y CONFIG_CONSOLE=y CONFIG_SERIAL=y CONFIG_UART_CONSOLE=y CONFIG_XIP=n CONFIG_INIT_STACKS=y CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000

差异点值得注意:

  • U54 与 U54 SMP 额外设置了CONFIG_RV_BOOT_HART=1(指定 U54_1 为启动 hart,与后续 HSS payload 中的owner-hart: u54_1对应)、CONFIG_RISCV_CMODEL_MEDANY=y(RISC-V 中等任意代码模型,适配高位 DDR 地址空间);
  • U54 单核形态显式设置CONFIG_MP_MAX_NUM_CPUS=1
  • U54 SMP 形态开启CONFIG_SMP=y,由 Zephyr 调度器接管 4 个 U54 核心。

构建应用

使用west build构建 BeagleV-Fire 的应用与 Zephyr 其他板卡完全一致,只需指定对应的 board 标识。例如构建samples/hello_world到 U54 配置:

west build -b beaglev_fire/polarfire/u54 samples/hello_world

-b后面的板卡标识替换为beaglev_fire/polarfire/e51beaglev_fire/polarfire/u54/smp,即可切换三种形态。构建产物(ELF 文件)后续既用于 GDB 加载调试,也用于 HSS payload 镜像生成。

调试:OpenOCD + GDB 完整流程

在把应用真正烧进板卡之前,通常先通过调试器加载运行。官方推荐的调试链路是OpenOCD(带 RISC-V 支持) + RISC-V GDB + Microchip FlashPro5/6 调试器

1. 准备调试工具

  • OpenOCD 与 RISC-V GDB:可以随 Microchip SoftConsole SDK 一起获取,安装后通常位于<softconsole_path>/openocd/下;
  • 调试器:Microchip FlashPro5/6;
  • 串口:使用 3.3V USB 转 UART 桥接器连接 BeagleV-Fire 的 UART 调试口。

2. 连接 UART 并中断 HSS 启动

在终端中打开 UART 调试口:

tio <port>

连接成功后按下板卡上的 Reset 按钮,终端会显示一个启动进度条(见下图)。看到进度条后,立刻按下任意键(0-9 或 a-z),即可中断 Hart Software Services(HSS)加载 payload 的过程,进入 HSS CLI。

3. 启动 OpenOCD

在另一个终端中,使用 SoftConsole 自带的 OpenOCD 连接板卡:

<softconsole_path>/openocd/bin/openocd --command "set DEVICE MPFS" --file \ <softconsole_path>/openocd/share/openocd/scripts/board/microsemi-riscv.cfg

set DEVICE MPFS指定目标设备为 PolarFire MPFS 系列,microsemi-riscv.cfg是该 SoC 的 OpenOCD 板级脚本。保持此终端持续运行。

4. 用 GDB 上传并调试

推荐使用 Zephyr SDK 自带的 RISC-V GDB。启动 GDB:

<path_to_zephyr_sdk>/riscv64-zephyr-elf/bin/riscv64-zephyr-elf-gdb

然后在 GDB 命令行中依次执行以下命令连接设备并加载二进制:

set arch riscv:rv64 set mem inaccessible-by-default off file <path_to_zephyr.elf> target extended-remote localhost:3333 load break main continue

要点说明:

  • set arch riscv:rv64:显式指定 64 位 RISC-V 架构;
  • set mem inaccessible-by-default off:避免 GDB 因访问不可达内存而中断,适配 PolarFire 的内存映射;
  • target extended-remote localhost:3333:连接本地 OpenOCD 的 GDB 服务端口(默认 3333);
  • load将 ELF 加载到板卡内存,随后break main+continue即可在main处停下调试。

烧录:HSS payload 生成与 usbdmsc 方式

当 Zephyr 与 PolarFire 的 Hart Software Services(HSS)配合使用时,不能直接把 ELF 当作启动镜像,而需要用 HSS 提供的hss-payload-generator工具生成 HSS 可以引导的 payload 镜像。

1. 编写 payload 配置文件

创建一个 YAML 配置文件,描述每个 hart 的入口地址与要加载的 payload:

set-name: 'ZephyrImage' # Define the entry point address for each hart (U54 cores) hart-entry-points: u54_1: '0x1000000000' # Define the payloads (ELF binaries or raw blobs) payloads: <path_to_zephyr.elf>: exec-addr: '0x1000000000' # Where Zephyr should be loaded owner-hart: u54_1 # Primary hart that runs Zephyr priv-mode: prv_m # Start in Machine mode skip-opensbi: true # Boot directly without OpenSBI

关键字段含义:

  • exec-addr: '0x1000000000':Zephyr 的加载地址,即上文设备树中ddr_cached_high2GB DDR 的起始地址;
  • owner-hart: u54_1:指定由 U54_1 核心运行 Zephyr,与 defconfig 中的CONFIG_RV_BOOT_HART=1保持一致;
  • priv-mode: prv_m:以 Machine 模式启动(不经过 S 态/OS 层);
  • skip-opensbi: true:直接引导,不经过 OpenSBI。

2. 进入 HSS CLI 并切换 boot source

生成镜像后,重启通过 USB 与 UART 连接的板卡,在 HSS 引导时按键中断,然后依次执行mmcusbdmsc命令。典型交互输出如下:

Press a key to enter CLI, ESC to skip Timeout in 1 second .[6.304162] Character 100 pressed [6.308415] Type HELP for list of commands [6.313276] >> mmc [10.450867] Selecting SDCARD/MMC (fallback) as boot source ... [10.457550] Attempting to select eMMC ... Passed [10.712708] >> usbdmsc [14.732841] initialize MMC [14.736400] Attempting to select eMMC ... Passed [15.168707] MMC - 512 byte pages, 512 byte blocks, 30621696 pages Waiting for USB Host to connect... (CTRL-C to quit) . 0 bytes written, 0 bytes read USB Host connected. Waiting for disconnect... (CTRL-C to quit) / 0 bytes written, 219136 bytes read
  • mmc:将 eMMC/SD 卡设为 boot source;
  • usbdmsc:把板卡的 eMMC 以 USB 大容量存储(Mass Storage)设备的形式暴露给主机,此时主机端会看到一个新的磁盘设备。

3. 用 dd 写入镜像

当板卡以 USB 存储设备出现后,即可用dd(或 BalenaEtcher 等工具)将生成的镜像写入对应磁盘:

dd if=<path_to_zephyr.elf> of=/dev/sdXD bs=4M status=progress oflag=sync

注意of=/dev/sdXD中的sdXD需要替换为板卡在主机上实际映射的设备节点,写入前务必确认,避免误写其他磁盘。oflag=sync确保数据落盘后再断开。

小结

BeagleV-Fire 是 Zephyr 官方支持的一块集 RISC-V 多核与 FPGA 于一体的开发板,仓库内提供了 E51、U54、U54 SMP 三种板卡配置,分别通过设备树中 CPU 节点的启停与 defconfig 中的CONFIG_SMPCONFIG_RV_BOOT_HART等开关来切换运行形态。调试与烧录链路清晰:OpenOCD + GDB 负责在线调试,HSS +hss-payload-generator负责生成可引导镜像,mmc+usbdmsc+dd负责写入 eMMC。开发者可结合 设备树 与 defconfig 按需裁剪,快速在 RISC-V + FPGA 平台上开展原型开发。

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询