
Zephyr 在 Arm MPS3 平台上的开发指南Corstone-300/Corstone-310 与 AN536 的构建、烧录与仿真【免费下载链接】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导读本文围绕 Zephyr RTOS 官方仓库中boards/arm/mps3的板级支持文档展开系统讲解在 Arm MPS3 FPGA 原型验证板与 Corstone 系列 Fixed Virtual PlatformFVP上开发 Zephyr 应用的完整流程。你将掌握mps3/corstone300/*、mps3/corstone310/*、mps3/an536/*各板级目标BOARD qualifier的适用场景、Secure/Non-Secure 固件构建差异、FPGA 通过 Micro SD 卡上传固件的方法以及如何借助 QEMU 与 FVP 在无硬件的情况下完成开发验证。MPS3 平台概览MPS3Arm MPS3 FPGA Prototyping Board板卡配置由 Zephyr 官方仓库的 boards/arm/mps3 目录提供被 Zephyr 应用用于运行在 MPS3 硬件上。它同时支持多种 Arm FPGA 镜像FPGA image与仿真模型AN536支持 Arm Cortex-R52 CPUCortex-R52x2 双核子系统示例AN547 与 AN552支持 Arm Cortex-M55 CPUSSE-300 子系统 Soft Macro ModelSMMAN555支持 Arm Cortex-M85 CPUSSE-310 子系统Corstone-300 与 Corstone-310 FVPFixed Virtual Platform固定虚拟平台支持所选的 Cortex-M 配置根据所选板级目标的不同Zephyr 提供以下设备支持Nested Vectored Interrupt ControllerNVICSystem Tick System ClockSYSTICKGeneric Interrupt Controller v3GICv3用于 AN536Arm architectural timer架构定时器Cortex-M System Design Kit GPIOCMSDK GPIOCortex-M System Design Kit UARTCMSDK UARTEthos-U55 NPU神经网络处理单元Corstone-300 / Corstone-310 FVP 是对 Arm 系统的完整仿真包括处理器、内存与外围设备免费提供给 Linux 与 Windows 主机使用。Zephyr 选择 FVP 作为仿真手段是因为它能访问 Ethos-U55 NPU——这是 QEMU 或其他仿真平台不具备的能力。而 AN536 的 Cortex-R52x2 子系统则可以通过 QEMU 的mps3-an536机器支持。板级目标BOARD options总览Zephyr 为 MPS3 提供了多个 board 目标其中corstone300、corstone310系列均区分Secure安全态与Non-Secure非安全态固件。board.yml中socs的层级结构印证了这一点corstone300之下有an547、an552、fvp三个变体且各自再派生ns变体corstone310之下有an555、fvp及对应ns变体an536则为独立 SoC 条目见 boards/arm/mps3/board.yml。MPS3 Corstone-300AN547MPS3 AN547 是 Cortex-M55 架构 SoCZephyr 同时支持构建 Secure 与 Non-Secure 固件BOARD说明mps3/corstone300/an547构建 Secure或仅 Secure固件mps3/corstone300/an547/ns构建 Non-Secure 固件FPGA 用法按照本文「编程与调试」章节的构建与烧录步骤执行。FVP 用法该变体不支持 FVP。QEMU 用法若希望用 QEMU 替代默认仿真器可在构建时通过-DEMU_PLATFORMqemu覆盖仿真平台选择$ west build -b mps3/corstone300/an547 samples/hello_world -DEMU_PLATFORMqemu -t runMPS3 Corstone-300AN552MPS3 AN552 同样是 Cortex-M55 架构 SoC支持 Secure 与 Non-Secure 固件构建BOARD说明mps3/corstone300/an552构建 Secure或仅 Secure固件mps3/corstone300/an552/ns构建 Non-Secure 固件FPGA 用法按「编程与调试」章节执行。FVP 用法该变体不支持 FVP。QEMU 用法该板级变体不支持 QEMU。MPS3 Corstone-300FVPMPS3 FVP 是 Cortex-M55 架构的仿真模型支持 Secure 与 Non-Secure 固件构建BOARD说明mps3/corstone300/fvp构建 Secure或仅 Secure固件mps3/corstone300/fvp/ns构建 Non-Secure 固件FPGA 用法不适用N/A。FVP 用法使用 FVP 前先设置环境变量ARMFVP_BIN_PATH然后通过west build -t run运行export ARMFVP_BIN_PATH/path/to/fvp/directory west build -b {BOARD qualifier from table above} samples/hello_world -t run要运行 Fixed Virtual Platform 仿真工具需从 Arm 下载并安装「FVP model for the Corstone-300 MPS3」。官方测试使用的版本为11.24.132024-01-04。QEMU 用法不适用N/A。MPS3 Corstone-310AN555MPS3 AN555 是 Cortex-M85 架构 SoC支持 Secure 与 Non-Secure 固件构建BOARD说明mps3/corstone310/an555构建 Secure或仅 Secure固件mps3/corstone310/an555/ns构建 Non-Secure 固件FPGA 用法按「编程与调试」章节执行。FVP 用法该变体不支持 FVP。QEMU 用法该板级变体不支持 QEMU。MPS3 Corstone-310FVPMPS3 FVP 是 Cortex-M85 架构的仿真模型支持 Secure 与 Non-Secure 固件构建BOARD说明mps3/corstone310/fvp构建 Secure或仅 Secure固件mps3/corstone310/fvp/ns构建 Non-Secure 固件FPGA 用法不适用N/A。FVP 用法同样先设置环境变量ARMFVP_BIN_PATH再用west build -t run运行export ARMFVP_BIN_PATH/path/to/fvp/directory west build -b {BOARD qualifier from table above} samples/hello_world -t run运行 Corstone-310 FVP 需下载并安装「FVP model for the Corstone-310 MPS3」官方测试版本同为11.24.132024-01-04。QEMU 用法不适用N/A。MPS3 AN536MPS3 AN536 是 Cortex-R52x2 双核子系统示例。Zephyr 目前支持为CPU0构建固件BOARD说明mps3/an536/cpu0为 R52 CPU0 构建固件FPGA 用法不适用N/A。FVP 用法不适用N/A。QEMU 用法通过 QEMU 运行west build -b mps3/an536/cpu0 samples/hello_world -t run注意板级限定符Board qualifier必须包含上述完整板名。仅写mps3/corstone300、mps3/corstone310或mps3/an536而不带完整限定符是无效的。仓库 boards/arm/mps3/board.cmake 中对此有硬性校验——若只指定到 SoC 层级构建系统会直接FATAL_ERROR并列出可用目标。硬件组成Arm MPS3 板卡提供以下硬件组件详见 boards/arm/mps3/doc/index.rstCPUAN547 / AN552Arm Cortex-M55 CPU SSE-300 子系统的 Soft Macro ModelSMM实现AN555Arm Cortex-M85 CPU SSE-310 子系统的 SMM 实现AN536Arm Cortex-R52 CPU Cortex-R52x2 子系统示例内存8MB BRAM4GB DDR4 SODIMM默认可升级至 8GB16GB eMMC8MB QSPI Flash调试P-JTAG、F-JTAG、SWD、4-bit trace、16-bit trace通过 USB 提供四个串口接口AHB GPIO、UART、SPI、I2C、I2SColor LCD 串行接口、Ethernet、VGA板载外设Color LCD、10 个 LED、8 个开关、2 个用户按键这些板载 LED 与按键在设备树中有完整的节点定义。从 boards/arm/mps3/mps3_common.dtsi 可以看到 10 个gpio-ledsled_0~led_7为 USERLED0~7led_8/led_9对应 PB1LED/PB2LED由gpio_led0驱动以及 2 个gpio-keys用户按键USERPB0/USERPB1由gpio_button驱动并提供了led0、led1、sw0、sw1别名方便应用通过gpio_dt_spec等 API 直接使用。支持的设备特性MPS3 板级支持的特性包括 CMSDK UART、CMSDK GPIO、NVIC、SYSTICK、Ethos-U55 NPU 等均由 Zephyr 板级文档中的zephyr:board-supported-hw指令自动汇总生成。以 AN547 的设备树 boards/arm/mps3/mps3_corstone300_an547.dts 为例兼容字符串为arm,mps3-an547CPU 为arm,cortex-m55MPU 采用arm,armv8.1m-mpuchosen节点将zephyr,console/zephyr,shell-uart指向uart0将zephyr,sram指向dtcm、zephyr,flash指向itcmEthos-U55以arm,ethos-u兼容字符串定义在0x48102000中断号为 56并启用secure-enable与privilege-enableNVIC 配置为arm,num-irq-priority-bits 3。内存布局Corstone-300 示例AN547 设备树中的内存区域定义Secure 地址减去0x10000000即得到 Non-Secure 别名区域地址大小说明ITCM0x10000000别名0x0512KBZephyr flash 区域SRAM0x11000000别名0x010000002MBFVP 为 1MB通用 SRAMDTCM0x30000000别名0x20000000512KBZephyr SRAM 区域ISRAM0x31000000别名0x210000004MBFVP 为 2MB额外 SRAMDDR40x60000000起2GB每 256MB 交替 Non-Secure/Secure外部内存此外Non-Secure 构建会引入 8MBsoc-nv-flash控制器基址0x28000000擦除块 64KB、写块 4 字节并定义 TF-M 多镜像启动所需的分区slot0_partition512KB 0x0、slot0_ns_partition3MB 0x80000、slot1_partition512KB 0x380000、slot1_ns_partition3MB 0x400000与scratch_partition512KB 0x700000详见 boards/arm/mps3/mps3_common_ns.dtsi。这些分区布局需要与 TF-M 工程在flash_layout.h中的定义保持一致。串口布局MPS3 共有6 个 UART。Zephyr 控制台输出默认使用UART0通过 Debug USB 接口J8对外暴露。Debug USB 接口上的串口映射如下Debug USB 串口连接Serial port 0MCC 板级控制控制台Serial port 1UART 0Zephyr 默认控制台Serial port 2UART 1Serial port 3UART 2对于AN536Cortex-R52x2 子系统提供 LLPP UART0 与 LLPP UART1 作为 CPU 私有 UART另有共享的 CMSDK UART。mps3/an536/cpu0目标使用LLPP UART0作为 Zephyr 控制台。从 boards/arm/mps3/mps3_an536_cpu0.dts 可以看到uart0位于0xe7c00000兼容arm,cmsdk-uart中断挂在 GIC 上GIC_PPI 2波特率115200。编程与调试MPS3 通过 USB 连接主机暴露Mass Storage大容量存储、CMSIS-DAP以及串口。使用 AN547 构建应用应用可以按常规方式构建。以hello_world示例 AN547 为例west build -b mps3/corstone300/an547 samples/hello_world打开串口终端minicom、putty 等使用以下设置波特率Speed115200数据位Data8 bits校验ParityNone停止位Stop bits1复位板卡后在对应串口上应看到如下输出Hello World! mps3上传应用到 MPS3 AN547应用固件可以是elf、hex 或 bin格式。二进制文件在板卡启动时从板载 Micro SD 卡上的文件加载烧录。Motherboard Configuration ControllerMCC负责加载 FPGA 镜像与二进制文件。将 MPS3 通过 USB 连接到主机后会出现一个大容量存储设备默认设备名为V2M-MPS3。更新固件共需3 步将应用文件复制到MPS3 device name/SOFTWARE/目录打开MPS3 device name/MB/HBI0309C/AN547/images.txt按下述内容更新images.txtTITLE: Versatile Express Images Configuration File [IMAGES] TOTALIMAGES: 1 ;Number of Images (Max: 32) IMAGE0ADDRESS: 0x01000000 ;Please select the required executable program IMAGE0FILE: \SOFTWARE\zephyr.elf复位板卡后即可在对应串口看到Hello World! mps3输出。这里IMAGE0ADDRESS: 0x01000000对应设备树中 SRAM 的 Non-Secure 别名地址0x11000000减去0x10000000与 boards/arm/mps3/mps3_corstone300_an547.dts 的 SRAM 定义一致。使用 AN536 构建并运行应用同样以hello_world为例构建 AN536 固件west build -b mps3/an536/cpu0 samples/hello_world使用 QEMU 运行west build -b mps3/an536/cpu0 samples/hello_world -t run运行后应看到Hello World! mps3/an536/cpu0源码级深入仿真平台的选择机制文档中提到的「AN547 默认 QEMU、FVP 变体默认 FVP」的机制实现在 boards/arm/mps3/board.cmake 中mps3/an536/cpu0与mps3/corstone300/an547SUPPORTED_EMU_PLATFORMS为qemuQEMU 分别使用-cpu cortex-r52 -machine mps3-an536与-cpu cortex-m55 -machine mps3-an547mps3/corstone300/fvp/_nsSUPPORTED_EMU_PLATFORMS为armfvp根据是否启用 Ethos-U65 选择FVP_Corstone_SSE-300_Ethos-U55或FVP_Corstone_SSE-300_Ethos-U65二进制mps3/corstone310/fvp/_ns使用FVP_Corstone_SSE-310并针对 Zephyr 的 MPU 测试需求设置-C cpu0.MPU_S16等参数启用 PAC/BTI 时追加-C cpu0.CFGPACBTI1所有 FVP 运行均配置-C mps3_board.uart0.out_file-等参数将 UART0~UART2 输出重定向到终端并关闭可视化与 telnet若以BUILD_WITH_TFM构建 Non-Secure 镜像QEMU/FVP 会加载合并后的tfm_merged.hexSecure TF-M Non-Secure Zephyr。Secure / Non-Secure 构建的默认配置从 boards/arm/mps3/Kconfig.defconfig 可以看出当目标为 Non-SecureTRUSTED_EXECUTION_NONSECURE时默认强制使用 TF-M 作为安全执行环境BUILD_WITH_TFMy并从设备树 flash 分区获取 NS 镜像配置USE_DT_CODE_PARTITIONy在 QEMU 目标下MPU 的空指针解引用检测无法生效0x0-0x400未映射但 QEMU 仍允许总线访问因此默认关闭NULL_POINTER_EXCEPTION_DETECTION启用串口时默认开启UART_INTERRUPT_DRIVEN对 AN555/FVP 且启用 ROM 重定位时ROMSTART 区域地址取自设备树itcm节点。在 defconfig 层面Secure 目标如 boards/arm/mps3/mps3_corstone300_an547_defconfig会显式设置CONFIG_ARM_TRUSTZONE_My、CONFIG_ARM_MPUy、CONFIG_RUNTIME_NMIy以及CONFIG_TRUSTED_EXECUTION_SECUREy配合QEMU_ICOUNT_SHIFT7Non-Secure 目标如 boards/arm/mps3/mps3_corstone300_an547_ns_defconfig则不再声明TRUSTED_EXECUTION_SECUREQEMU_ICOUNT_SHIFT6交由 TF-M 承担 Secure 侧职责。SOC 层级的选择逻辑SOC_CORSTONE300/SOC_CORSTONE310/SOC_AN536_CPU0位于 boards/arm/mps3/Kconfig.mps3。延伸参考如需更深入的信息可查阅以下官方资料均为 Arm 公开发布的文档需自行从 Arm 官网获取MPS3 AN536 Application Note、MPS3 AN547 / AN552 / AN555 Technical Reference ManualTRM、MPS3 FPGA Prototyping Board TRM、Cortex-R52 TRM、Cortex-M55 / Cortex-M85 Generic User Guide以及 CoreLink SSE-300 / SSE-310 Example Subsystem 文档。这些资料对理解 FPGA 镜像的加载流程、内存映射与外设寄存器细节很有帮助。小结在AN547 / AN552 / AN555 实体 FPGA 板上开发使用mps3/corstone300/an547或ns后缀变体等目标按「构建 → 拷贝到 Micro SD → 修改images.txt→ 复位」的流程烧录需要Ethos-U55 NPU仿真时使用mps3/corstone300/fvp或mps3/corstone310/fvp目标并安装对应 FVP 模型测试版本 11.24.13快速无硬件验证时mps3/corstone300/an547可直接用 QEMU 运行mps3/an536/cpu0Cortex-R52则必须通过 QEMU 的mps3-an536机器所有板级限定符必须写完整如mps3/corstone300/an547省略变体名会触发构建错误。通过本文你已经可以依据目标硬件形态FPGA 板 / FVP / QEMU和固件形态Secure / Non-Secure选择合适的 MPS3 板级目标并完成从编译到部署、调试的完整闭环。【免费下载链接】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),仅供参考