Zephyr 在 PHYTEC phyBOARD-Lyra AM62x A53 上的移植与实战指南
【免费下载链接】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
phyBOARD-Lyra AM62x 是 PHYTEC 基于 TI Sitara AM62x 处理器设计的评估套件,包含 phyCORE-AM62x 核心板与底板。本指南以 phyboard_lyra_am62xx_a53.rst 为核心,系统讲解 Zephyr RTOS 如何在四核 Cortex-A53 集群上运行,涵盖板级硬件特性、设备树与 Kconfig 配置、SD 卡镜像准备、west build构建流程,以及通过 U-Boot 加载并启动zephyr.bin的完整链路,帮助读者从零开始在真实硬件上跑通 Zephyr 应用。
板卡概览:AM62x 异构平台上的 A53 移植
AM62x 是 TI Sitara 系列应用处理器,片上集成了四核 Cortex-A53 集群与单核 Cortex-M4(位于 MCU 域)。Zephyr OS 在 phyBOARD-Lyra 上提供了两套相互独立的板级配置:
phyboard_lyra/am6234/a53:Zephyr 运行在Cortex-A53应用核上(本文主题);phyboard_lyra/am6234/m4:Zephyr 运行在Cortex-M4F核上(详见 phyboard_lyra_am62xx_m4.rst,由运行于 A53 的 Linux 通过 remoteproc 加载)。
板级核心硬件规格如下:
- RAM:2GB DDR4
- 存储:16GB eMMC、64MB OSPI NOR、4KB EEPROM
- 网络:板载 Ethernet
- 调试:XDS110 类 JTAG(M4 配置使用)
在仓库中,板级标识由 board.yml 声明:full_name为 "phyBOARD-Lyra AM62x A53 Core",所属 SoC 为am6234;Kconfig.phyboard_lyra 通过config BOARD_PHYBOARD_LYRA在 A53 配置下select SOC_AM6234_A53,将板级与 SoC 绑定。SoC 支持代码位于 soc/ti/k3/am62x(含Kconfig.soc、Kconfig.defconfig等),而 dts/arm64/ti/ti_am6234_a53.dtsi 在通用ti_am62x_a53.dtsi基础上补充了cpu@1~cpu@3的 Cortex-A53 节点定义。
支持的硬件特性
根据板卡文档,phyboard_lyra/am6234/a53配置支持以下硬件特性:
| 接口 | 控制器 | 驱动/组件 |
|---|---|---|
| GIC-v3 | on-chip | 中断控制器(interrupt controller) |
| ARM TIMER | on-chip | 系统时钟(system clock) |
| PINCTRL | on-chip | pinctrl 引脚复用 |
| UART | on-chip | 串口(serial port) |
| Mailbox | on-chip | IPC Mailbox 核间通信 |
从设备树 phyboard_lyra_am6234_a53.dts 可以看到,该移植仅启用了 A53 集群中的CPU0(cpu@1~cpu@3均被status = "disabled"),并以compatible = "phytec,phyboard-lyra-am62xx-a53", "ti,am625"标识整板。Mailbox 的存在为 A53 与 M4 之间的核间通信(如 rpmsg)预留了通道,这也与 M4 配置通过 remoteproc 加载的方式相互呼应。
板级资源分配详解
系统时钟:200 MHz
本板配置的系统时钟频率为200 MHz,由片上 ARM TIMER 驱动。与 M4 配置(400 MHz,见 M4 文档)不同,A53 配置的时钟域和定时器路径由 ARMv8-A 架构层提供支持。
DDR RAM:2GB 物理内存,Zephyr 占用 1MB
板卡实际具备 2GB DDR4,但 Zephyr 的 A53 配置只向内核分配了1MB RAM,地址范围0x82000000~0x82100000。这一分配在设备树中明确体现:
ddr0: memory@82000000 { /* Note: This board actually has 2GB DRAM available */ reg = <0x82000000 DT_SIZE_M(1)>; };同时chosen节点将zephyr,sram指向&ddr0,即 Zephyr 的静态内存区域(SRAM 区)直接落在 DDR 起始地址0x82000000——这正是后续 U-Boot 加载内核镜像的目标地址。板级 YAML 元数据 phyboard_lyra_am6234_a53.yaml 中的ram: 1024(KB)也与该 1MB 分配保持一致。
串口:UART0 作为唯一串行通道
配置使用 CPU 域UART0(main_uart0)作为唯一串行通信通道,波特率 115200。设备树中完成了引脚复用与串口节点使能:
&pinctrl { uart0_rx_default: uart0_rx_default { pinmux = <K3_PINMUX(0x1c8, PIN_INPUT, MUX_MODE_0)>; }; uart0_tx_default: uart0_tx_default { pinmux = <K3_PINMUX(0x1cc, PIN_OUTPUT, MUX_MODE_0)>; }; }; &main_uart0 { current-speed = <115200>; pinctrl-0 = <&uart0_rx_default &uart0_tx_default>; pinctrl-names = "default"; status = "okay"; };chosen节点同时将zephyr,console与zephyr,shell-uart指向main_uart0,因此串口同时承载内核日志控制台与 Shell 输出。
defconfig 关键配置解读
phyboard_lyra_am6234_a53_defconfig 定义了该移植的 Kconfig 基线,几类关键项如下:
- ARM64 镜像与地址空间:
CONFIG_AARCH64_IMAGE_HEADER=y(生成 AArch64 启动镜像头)、CONFIG_ARMV8_A_NS=y(非安全世界)、CONFIG_ARM64_VA_BITS_36/CONFIG_ARM64_PA_BITS_36(36 位虚拟/物理地址空间); - Cache 管理:
CONFIG_CACHE_MANAGEMENT=y,配合CONFIG_DCACHE_LINE_SIZE_DETECT/CONFIG_ICACHE_LINE_SIZE_DETECT在运行时自动探测缓存行大小; - 执行模式:
CONFIG_XIP=n,镜像从 RAM 执行(由 U-Boot 加载到 DDR 后运行); - 串口与控制台:
CONFIG_SERIAL=y、CONFIG_UART_INTERRUPT_DRIVEN=y、CONFIG_CONSOLE=y、CONFIG_UART_CONSOLE=y,使能 UART 中断驱动模式与 UART 控制台。
注:
west build时若需调整,可通过-DEXTRA_CONF或prj.conf覆盖上述默认值,例如增大 RAM 分配或改用其他控制台后端。
准备 SD 卡启动镜像
A53 核的启动流程依赖一张预置 Linux 系统的 SD 卡(由 PHYTEC BSP 构建)。操作步骤如下:
- 从 PHYTEC 官方发布渠道下载
WIC镜像文件(如phytec-qt5demo-image-phyboard-lyra-am62xx-3.wic.xz)及其配套的bmap文件; - 使用
bmaptool(bmap-tools 工具包)将镜像快速烧写至 SD 卡:
bmaptool copy phytec-qt5demo-image-phyboard-lyra-am62xx-3.wic.xz /dev/sdX其中/dev/sdX请替换为实际 SD 卡设备节点。bmap 文件记录了镜像的块映射,可大幅缩短烧写时间并跳过空白区域。
烧写完成后,这张 SD 卡同时承担两层职责:其一,U-Boot 与 Linux 引导(A53 应用核);其二,承载编译出的zephyr.bin,供 U-Boot 直接加载。
构建 Zephyr 应用
A53 配置的构建方式与标准 Zephyr 流程完全一致。以官方hello_world示例为例,在 Zephyr 仓库根目录执行:
west build -p -b phyboard_lyra/am6234/a53 samples/hello_world-p:构建前执行 pristine 清理,保证干净构建;-b phyboard_lyra/am6234/a53:指定板级标识符;samples/hello_world:应用源码目录。
构建产物位于build/zephyr/目录,其中zephyr.bin是后续需要拷贝到 SD 卡的裸二进制镜像。该板默认使用zephyr(Zephyr SDK)或cross-compile工具链,详见 phyboard_lyra_am6234_a53.yaml 中的toolchain声明。
编程与 U-Boot 启动
拷贝镜像到 SD 卡
- 将编译出的
build/zephyr/zephyr.bin拷贝到 SD 卡第一个 FAT 分区; - 弹出 SD 卡并插入板卡;
- 上电,在 U-Boot 提示符出现时中断自动启动,进入 U-Boot 命令行。
U-Boot 加载并运行
在 U-Boot 提示符下执行如下命令序列:
fatload mmc 1:1 0x82000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x82000000命令逐步拆解:
fatload mmc 1:1 0x82000000 zephyr.bin:从 MMC 设备 1 分区 1(即第一个 FAT 分区)读取zephyr.bin到内存地址0x82000000;dcache flush; icache flush:将缓存中的内容刷回内存,保证加载的数据对 CPU 可见;dcache off; icache off:关闭数据/指令缓存,避免缓存一致性干扰直接跳转执行;go 0x82000000:跳转到0x82000000执行。
0x82000000正是设备树中ddr0的起始地址,与zephyr,sram指向一致,因此镜像被加载到 Zephyr 期望的内存基址上。
启动后的预期行为
启动成功后,串口(UART0,115200)将输出 Zephyr 启动日志及hello_world示例的打印信息。若需交互调试,可使用zephyr,shell-uart所指向的同一 UART 进入 Zephyr Shell。
调试与常见注意事项
- 构建/烧写差异:A53 配置通过 U-Boot 直接
go跳转运行,而 M4 配置则需由 A53 上的 Linux 通过 remoteproc 加载zephyr.elf(命名为am62-mcu-m4f0_0-fw放入/lib/firmware),两者加载路径完全不同,请勿混淆(参见 M4 文档); - Cache 一致性:U-Boot 命令中的 cache 开关序列是本板启动的关键步骤,省略会导致指令/数据不一致而无法启动;
- 资源预算:默认仅向 Zephyr 分配 1MB RAM,若应用需要更大内存,需同步修改设备树
ddr0的reg大小(注意DT_SIZE_M宏)并保证与 U-Boot 加载地址协调; - 多核策略:当前移植仅启用 CPU0,其余 A53 核处于 disabled 状态,SMP 支持未在本配置中启用。
小结
通过本指南,你已掌握在 PHYTEC phyBOARD-Lyra AM62x 的 Cortex-A53 核上运行 Zephyr 的完整流程:从板级硬件资源与支持特性,到设备树/Kconfig 的配置细节,再到 WIC 镜像烧写、west build构建、以及通过 U-Bootfatload+go的启动方法。若要进一步深入,可继续阅读 板级设备树、defconfig 及 SoC 层源码 soc/ti/k3/am62x,理解 K3 平台在 Zephyr 中的完整实现。
【免费下载链接】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),仅供参考