2. Kria硬件架构与启动链路

Kria SOM(System-on-Module)的核心是一颗Zynq UltraScale+ MPSoC。理解Kria平台工程,第一步不是写代码,而是把芯片内部的处理系统(PS)与可编程逻辑(PL)划分、各处理器核的职责,以及从上电到Linux内核的完整启动链路看清楚。只有建立了这张"硬件地图",后续的固件烧录、启动模式配置、设备树修改才有明确的落点。

PS与PL:一颗芯片里的两个世界

Zynq UltraScale+ MPSoC把处理系统(Processing System,PS)和可编程逻辑(Programmable Logic,PL)集成在同一硅片上。PS是"固定"的硬核部分,包含应用处理单元(APU)、实时处理单元(RPU)、平台管理单元(PMU)、内存控制器、外设控制器等;PL则是可用HDL或HLS描述的FPGA逻辑资源,包括可编程逻辑单元、DSP切片、Block RAM以及大量可编程IO。

两者并非彼此孤立。PS与PL之间通过AXI接口互联:PS可作为AXI主设备访问PL中的IP寄存器,PL也可作为主设备通过AXI HP/HPC端口直接读写DDR。这种双向通路是Kria上"软件控制硬件加速器"的物理基础。在Kria KV260等载板上,PL侧通常承载视觉流水线、AI推理加速器或自定义接口,而PS侧运行Ubuntu/Linux,负责调度、网络、存储与上层应用。

Cortex-A53与Cortex-R5F:分工明确的四加二

APU内部是四核Arm Cortex-A53,主频可达1.5GHz,支持64位、带MMU和NEON,是运行Linux应用处理器(APU)的主力。RPU则是双核Cortex-R5F,主频约600MHz,支持锁步(lockstep)或分离模式,具备确定性中断响应,适合实时控制、安全监控和低延迟任务。

在典型Kria Linux系统中,A53承担Linux内核、根文件系统、用户态服务;R5F往往运行裸机或RTOS固件,处理电机控制、传感器采集、安全关断等对时序敏感的工作。PMU是一个独立的微控制器,负责电源域、时钟和复位管理,并在启动早期参与固件加载。三者通过片上互联与共享内存协作,而不是简单地"谁替代谁"。

PS 处理系统(硬核) APU 4× Cortex-A53 Linux / 应用 / 网络 RPU 2× Cortex-R5F 实时 / 安全 / 裸机 PMU 电源/时钟/复位管理 DDR 控制器 LPDDR4 / 共享内存 外设控制器 QSPI · eMMC · SD · USB · GEM · UART · I2C PL 可编程逻辑(FPGA) 可编程逻辑单元 LUT / FF / BRAM DSP 切片 AI / 信号处理 自定义 IP / 加速器 视觉流水线 · 接口桥 · 硬件算法 可编程 IO LVDS · MIPI · GPIO · 载板接口 AXI AXI HP 启动链路:从上电到 Linux BootROM 片内固化代码 读启动模式引脚 FSBL 初始化 DDR/时钟 加载 PL 比特流 U-Boot 加载内核/设备树 传递启动参数 Linux 内核 解压/初始化驱动 挂载根文件系统 用户空间 systemd / 应用 Kria 应用启动 启动介质:QSPI(默认固件) · eMMC(量产) · SD(开发调试)

启动链路:BootROM → FSBL → U-Boot → Linux

Zynq MPSoC的启动是分阶段接力的。上电复位后,首先执行的是片内固化的BootROM。BootROM代码不可修改,它根据启动模式引脚(MODE[3:0])决定从哪个介质读取第一阶段引导程序。BootROM只做最少的事:配置基本时钟、读取启动头、把FSBL镜像搬入片上内存(OCM),然后跳转执行。

FSBL(First Stage Boot Loader)是用户可定制的第一阶段引导程序,通常由Vitis或PetaLinux工具生成。它承担关键初始化:配置DDR控制器、建立时钟树、加载PL比特流(bitstream)、根据分区表把U-Boot和PMU固件搬入DDR。FSBL执行完毕后跳转到U-Boot。

U-Boot是功能完整的引导加载器,负责加载Linux内核镜像(Image或fitImage)、设备树(DTB)和初始RAM盘,并向内核传递启动参数(bootargs)。在Kria上,U-Boot还负责从QSPI、eMMC或SD读取这些镜像。内核启动后初始化驱动、挂载根文件系统,最终由init进程拉起用户空间服务。

启动模式选择与拨码配置

Kria SOM通过MODE[3:0]引脚决定启动介质。以KV260为例,载板上通常有拨码开关或配置电阻。常见模式编码如下(具体以对应SOM的硬件手册为准):

MODE[3:0]启动介质典型用途
0000JTAG调试、裸机下载
0010QSPI默认固件启动
0101SD开发调试、快速迭代
0110eMMC量产部署

实际配置时,先确认载板拨码开关的ON方向对应逻辑1还是0,再按上表设置。例如要让KV260从SD卡启动,需将MODE[3:0]设为0101。若拨码与预期不符,BootROM会尝试从错误介质读取,表现为串口无输出或反复复位。此时应核对硬件手册中的拨码定义,而不是盲目修改软件。

启动模式引脚只在复位释放瞬间被BootROM采样。运行中改变拨码不会切换启动介质,必须断电重新上电或触发复位。

启动介质的选择策略

QSPI容量小但可靠,适合存放FSBL、U-Boot和恢复镜像;eMMC容量大、读写快,适合量产时存放完整系统;SD卡可插拔,适合开发阶段频繁更换镜像。工程实践中常见做法是:QSPI存放"引导固件+恢复系统",eMMC或SD存放"主系统"。这样即使主系统损坏,也能通过QSPI恢复。

在PetaLinux或Kria Ubuntu中,启动镜像通常打包为BOOT.BIN(含FSBL、PMU固件、U-Boot、bitstream)和image.ub(含内核、DTB、rootfs)。BOOT.BIN写入QSPI或eMMC的引导分区,image.ub写入对应介质的数据分区。理解这一分区关系,才能在启动失败时快速定位是引导固件问题还是内核/根文件系统问题。

修改启动模式或烧写BOOT.BIN前,务必确认当前拨码状态和介质内容。错误的BOOT.BIN可能导致设备无法进入U-Boot,只能通过JTAG恢复。