- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
导读
本文以 Zephyr RTOS 仓库中 m2gl025_miv 板级支持包 为线索,系统讲解如何基于 Microchip IGLOO2 FPGA(M2GL025)开发板上的 Mi-V RISC-V 软核 CPU 构建、烧录与调试 Zephyr 应用程序。读完本文,你将掌握该开发板的软硬件架构、工程构建命令、基于 OpenOCD + GDB 的二进制上传流程,以及使用 Renode 进行无硬件仿真验证的方法,可直接复用到基于 Zephyr 的 RISC-V FPGA 原型开发工作中。
板级概览:FPGA 上的 RISC-V 软核
Microchip M2GL025 是一款基于 IGLOO2 架构的 FPGA 开发板。其独特之处在于,板上的处理器并非硬核 ARM 或 RISC-V IP,而是可以部署到 FPGA 逻辑资源中的Mi-V RISC-V 软核 CPU。这种"FPGA + 软核"的组合使得开发者可以灵活定制处理器外设、调整内存映射,甚至在同一片 FPGA 上迭代多种 SoC 配置,非常适合嵌入式系统原型验证与教学实验。
在 Zephyr 仓库中,该板级支持包由以下文件构成:
- m2gl025_miv.dts:板级设备树,描述 SoC 外设与 chosen 节点;
- m2gl025_miv_defconfig:板级默认 Kconfig 配置;
- board.cmake 与 board.yml:构建与仿真集成元数据;
- support/:Renode 仿真脚本(
.resc与.repl)。
从 board.yml 可以看到,该板的核心标识为m2gl025_miv,全称 "M2GL025 Mi-V",所属 SoC 为miv,供应商为microchip;Kconfig.m2gl025_miv 中通过select SOC_MIV将板级配置与 Mi-V SoC 绑定。而在 m2gl025_miv.yaml 中明确了架构为riscv、工具链为 Zephyr 官方 RISC-V 工具链、RAM 为 64 KB,并声明支持 Renode 仿真。
硬件资源与设备树配置
m2gl025_miv.dts 是整个板级支持的核心,它基于microchip/microchip-miv.dtsi(位于 dts/ 目录的 microchip 系列描述中)展开,并完成板级定制:
- 模型与兼容性:
model = "Microchip M2GL025 with MiV target",compatible = "microchip,m2gl025-miv",这是 Zephyr 驱动与设备树匹配的关键标识; - chosen 节点:将控制台、Shell 串口绑定到
uart0,并将 Flash 与 SRAM 分别指向flash0、sram0; - 串口外设:
uart0使能(status = "okay"),波特率 115200,时钟频率 66 MHz; - 机器定时器:
mtimer时钟频率 4 MHz,作为系统节拍与定时基准。
板级默认配置 m2gl025_miv_defconfig 中:
- 开启
CONFIG_CONSOLE、CONFIG_SERIAL、CONFIG_UART_CONSOLE,保证串口控制台输出可用; - 关闭
CONFIG_GPIO,最小化驱动占用; - 开启
CONFIG_XIP,支持就地执行(execute in place); - 注释说明因 Mi-V 的
SYS_CLOCK_HW_CYCLES_PER_SEC存在不准确问题,将CONFIG_SYS_CLOCK_TICKS_PER_SEC设为 100 作为规避方案——这提醒我们在该软核平台上应以软件节拍配置为准。
构建应用程序
在 Zephyr 中,m2gl025_miv已作为标准板名注册,应用构建方式与其他目标板完全一致(参考 构建应用指南)。以仓库内任意应用为例,构建命令如下:
west build -b m2gl025_miv <path_to_application>构建产物中会生成 Zephyr 的可执行二进制(ELF),该文件即后续烧录与调试的对象。若未使用 west,也可直接通过 CMake 指定-DBOARD=m2gl025_miv完成等价构建。
烧录流程:OpenOCD + GDB
由于 Mi-V 是 FPGA 上的软核,其烧录与调试走的是 JTAG + GDB 通道。官方文档要求准备两样工具:
- OpenOCD:负责通过调试器连接 FPGA 上的 RISC-V 核;
- 支持 RISC-V 的 GDB:用于加载二进制并执行调试指令。
这两者均可随 Microchip SoftConsole SDK 一并获得,安装后按以下两步操作。
第一步:启动 OpenOCD 连接
在终端中启动 OpenOCD,使用 SoftConsole 自带脚本microsemi-riscv.cfg连接板卡(注意通过LD_LIBRARY_PATH指定 OpenOCD 依赖库路径):
sudo LD_LIBRARY_PATH=<softconsole_path>/openocd/bin \ <softconsole_path>/opencocd/bin/openocd --file \ <softconsole_path>/openocd/share/openocd/scripts/board/microsemi-riscv.cfg请将
<softconsole_path>替换为本地 SoftConsole SDK 的实际安装路径。OpenOCD 成功连接后会保持运行,监听本地 3333 端口等待 GDB 接入。
第二步:使用 GDB 上传二进制
保持 OpenOCD 运行,另开一个终端,使用 SoftConsole 提供的riscv64-unknown-elf-gdb连接设备并加载固件:
<softconsole_path>/riscv-unknown-elf-gcc/bin/riscv64-unknown-elf-gdb \ -ex "target extended-remote localhost:3333" \ -ex "set mem inaccessible-by-default off" \ -ex "set arch riscv:rv32" \ -ex "set riscv use_compressed_breakpoints no" \ -ex "load" <path_to_executable>逐条解释上述 GDB 命令的作用:
| GDB 命令 | 作用 |
|---|---|
target extended-remote localhost:3333 | 连接本机 OpenOCD 提供的远程调试端口 |
set mem inaccessible-by-default off | 允许访问默认标记为不可访问的内存区域,避免软核地址空间加载失败 |
set arch riscv:rv32 | 显式指定 RISC-V 32 位架构(Mi-V 为 RV32 内核) |
set riscv use_compressed_breakpoints no | 禁用压缩断点(C 扩展),适配 OpenOCD 对该核的断点支持 |
load <path_to_executable> | 将 ELF 固件下载到目标板内存中 |
load成功完成后,即可在 GDB 中执行continue或monitor reset让固件在板上运行。
调试
烧录成功后,可继续借助 GDB 完成断点设置、单步、变量查看等标准调试操作。Zephyr 官方文档中提供了完整的应用调试指南(参见 应用调试),涵盖:
- 使用
west debug/west debugserver等命令统一管理调试会话; - OpenOCD、JLink、QEMU 等多种调试后端的接入方式;
- 内核对象与线程的调试技巧。
对于 Mi-V 软核平台,建议遵循上文手动 GDB 会话的方式,以便在 FPGA 原型阶段精确控制连接参数。
无硬件验证:Renode 仿真支持
该板级支持包的一个亮点是内置了Renode仿真支持,可在没有实体 FPGA 板卡的情况下先行验证 Zephyr 固件逻辑。
board.cmake 声明了仿真平台renode,并指向 m2gl025_miv.resc 仿真脚本与sysbus.uart串口终端;m2gl025_miv.yaml 进一步将该板标记为testing.default = true,即 Zephyr 测试体系默认会针对该板运行支持范围内的测试用例(网络与蓝牙相关标签被忽略)。
仿真脚本 m2gl025_miv.resc 的核心逻辑:
using sysbus mach create $name machine LoadPlatformDescription $ORIGIN/m2gl025_miv.repl showAnalyzer uart cpu PerformanceInMips 4- 通过 m2gl025_miv.repl 加载 Mi-V 平台描述(UART 与 CLINT 定时器频率均配置为 4 MHz);
showAnalyzer uart打开 UART 分析窗口,可直接观察 Zephyr 串口控制台输出;- 复位宏通过
LoadELF $elf加载待测固件。
使用 Renode 运行固件的典型命令:
west build -b m2gl025_miv <path_to_application> west build -t runwest build -t run会借助 board.cmake 中配置的renode仿真器自动加载构建产物并启动仿真,从而在开发机上完成从构建到运行验证的完整闭环。
小结与资源索引
通过本文,我们完整梳理了在 Microchip M2GL025 IGLOO2 FPGA 的 Mi-V RISC-V 软核上运行 Zephyr 的路径:理解板级设备树与默认配置 → 使用标准 west 命令构建 → 通过 OpenOCD + GDB 完成固件加载 → 借助 GDB 调试 → 利用 Renode 无硬件验证。这套流程对基于 FPGA 软核的 Zephyr 原型开发具有直接参考价值。
进一步探索可参考以下仓库资源:
- 板级文档:板级支持包的官方说明;
- 板级设备树 与 默认配置:硬件抽象与实际外设配置;
- Renode 仿真脚本:无硬件运行固件的入口;
- 应用调试指南:Zephyr 通用调试方法论。
- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
相关推荐
Zephyr 移植实战:在 Digilent Genesys 2 FPGA 上运行 64 位 CVA6 RISC-V 软核(cv64a6_genesys_2 板级支持详解)
Zephyr 移植实战:在 Digilent Genesys 2 FPGA 上运行 64 位 CVA6 RISC V 软核(cv64a6_genesys_2 板
操作系统嵌入式RTOS物联网Zephyr 在 OpenISA VEGAboard(RV32M1)上的开发实战:RI5CY 与 ZERO-RISCY 双核 RISC-V 移植指南
Zephyr 在 OpenISA VEGAboard(RV32M1)上的开发实战:RI5CY 与 ZERO RISCY 双核 RISC V 移植指南 本指南以
操作系统嵌入式RTOS物联网Zephyr 移植指南:MuseLab nanoCH57x 开发板(CH570/CH572 RISC-V SoC)的构建、烧录与调试
Zephyr 移植指南:MuseLab nanoCH57x 开发板(CH570/CH572 RISC V SoC)的构建、烧录与调试 导读 本文以 Zephyr
操作系统嵌入式RTOS物联网
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考