Zephyr 在 BeagleV-FireMicrochip 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/zephyrBeagleV®-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 ServicesHSS的镜像生成与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.yamlvendor 为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核心的使用策略配置标识用途对应 defconfigbeaglev_fire/polarfire/e51仅使用 E51 监控核心beaglev_fire_polarfire_e51_defconfigbeaglev_fire/polarfire/u54使用 U54 应用核心beaglev_fire_polarfire_u54_defconfigbeaglev_fire/polarfire/u54/smp使用 U54 核心并开启CONFIG_SMPybeaglev_fire_polarfire_u54_smp_defconfig这些配置在 Kconfig.beaglev_fire 中通过BOARD_BEAGLEV_FIRE统一入口按所选变体分别select SOC_POLARFIRE_U54或SOC_POLARFIRE_E51对应的 SoC 定义位于 soc/microchip/miv/polarfire/Kconfig.soc。设备树层面三种配置通过禁用/启用 CPU 节点来体现核心差异E51 形态beaglev_fire_polarfire_e51.dts禁用cpu1cpu44 个 U54只保留 E51U54 形态beaglev_fire_polarfire_u54.dts禁用cpu0E51仅启用 4 个 U54U54 SMP 形态beaglev_fire_polarfire_u54_smp.dts直接 include U54 的设备树并在 defconfig 中追加CONFIG_SMPy启用多核调度。三种 defconfig 的共同基础配置包括CONFIG_MPFS_HALn CONFIG_BASE64y CONFIG_INCLUDE_RESET_VECTORy CONFIG_CONSOLEy CONFIG_SERIALy CONFIG_UART_CONSOLEy CONFIG_XIPn CONFIG_INIT_STACKSy CONFIG_SYS_CLOCK_TICKS_PER_SEC1000差异点值得注意U54 与 U54 SMP 额外设置了CONFIG_RV_BOOT_HART1指定 U54_1 为启动 hart与后续 HSS payload 中的owner-hart: u54_1对应、CONFIG_RISCV_CMODEL_MEDANYyRISC-V 中等任意代码模型适配高位 DDR 地址空间U54 单核形态显式设置CONFIG_MP_MAX_NUM_CPUS1U54 SMP 形态开启CONFIG_SMPy由 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/e51或beaglev_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 ServicesHSS加载 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.cfgset DEVICE MPFS指定目标设备为 PolarFire MPFS 系列microsemi-riscv.cfg是该 SoC 的 OpenOCD 板级脚本。保持此终端持续运行。4. 用 GDB 上传并调试推荐使用 Zephyr SDK 自带的 RISC-V GDB。启动 GDBpath_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 服务端口默认 3333load将 ELF 加载到板卡内存随后break maincontinue即可在main处停下调试。烧录HSS payload 生成与 usbdmsc 方式当 Zephyr 与 PolarFire 的 Hart Software ServicesHSS配合使用时不能直接把 ELF 当作启动镜像而需要用 HSS 提供的hss-payload-generator工具生成 HSS 可以引导的 payload 镜像。1. 编写 payload 配置文件创建一个 YAML 配置文件描述每个 hart 的入口地址与要加载的 payloadset-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: 0x1000000000Zephyr 的加载地址即上文设备树中ddr_cached_high2GB DDR 的起始地址owner-hart: u54_1指定由 U54_1 核心运行 Zephyr与 defconfig 中的CONFIG_RV_BOOT_HART1保持一致priv-mode: prv_m以 Machine 模式启动不经过 S 态/OS 层skip-opensbi: true直接引导不经过 OpenSBI。2. 进入 HSS CLI 并切换 boot source生成镜像后重启通过 USB 与 UART 连接的板卡在 HSS 引导时按键中断然后依次执行mmc与usbdmsc命令。典型交互输出如下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 readmmc将 eMMC/SD 卡设为 boot sourceusbdmsc把板卡的 eMMC 以 USB 大容量存储Mass Storage设备的形式暴露给主机此时主机端会看到一个新的磁盘设备。3. 用 dd 写入镜像当板卡以 USB 存储设备出现后即可用dd或 BalenaEtcher 等工具将生成的镜像写入对应磁盘dd ifpath_to_zephyr.elf of/dev/sdXD bs4M statusprogress oflagsync注意of/dev/sdXD中的sdXD需要替换为板卡在主机上实际映射的设备节点写入前务必确认避免误写其他磁盘。oflagsync确保数据落盘后再断开。小结BeagleV-Fire 是 Zephyr 官方支持的一块集 RISC-V 多核与 FPGA 于一体的开发板仓库内提供了 E51、U54、U54 SMP 三种板卡配置分别通过设备树中 CPU 节点的启停与 defconfig 中的CONFIG_SMP、CONFIG_RV_BOOT_HART等开关来切换运行形态。调试与烧录链路清晰OpenOCD GDB 负责在线调试HSS hss-payload-generator负责生成可引导镜像mmcusbdmscdd负责写入 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),仅供参考