ZYNQ启动
时间: 2025-07-10 10:09:06 浏览: 7
### ZYNQ 启动流程概述
ZYNQ 系列芯片由 Xilinx 推出,是一款将 ARM 处理系统(Processing System, PS)与可编程逻辑(Programmable Logic, PL)紧密结合的 SoC(System on Chip),其启动过程具有高度的灵活性和复杂性。ZYNQ 的启动流程主要分为以下几个阶段:
#### 1. **BootROM 阶段**
ZYNQ 启动的第一步是执行固化在芯片内部的 BootROM 代码。该代码负责根据启动模式选择器(如拨码开关或配置引脚)确定启动设备(如 SD 卡、QSPI Flash、NAND Flash 或 JTAG)。BootROM 还会加载第一阶段引导程序 FSBL(First Stage Boot Loader)到片上内存 OCM(On-Chip Memory)中并执行它。
FSBL 是用户编写的第一个可执行镜像,通常使用 Xilinx SDK 工具创建。它负责初始化 PS 端的基本硬件环境,例如时钟、DDR 控制器等,并为后续阶段准备运行条件[^2]。
#### 2. **FSBL 阶段**
FSBL 主要完成以下任务:
- 初始化 PS 端的时钟、GPIO、串口等基本外设。
- 初始化 DDR 控制器以访问外部内存。
- 加载比特流文件(bitstream)到 PL 端,实现 FPGA 的配置。
- 加载第二阶段引导程序 SSBL(Second Stage Boot Loader),通常是 U-Boot 或裸机应用程序。
在某些应用场景下,FSBL 还可以加载 Linux 内核镜像或 RTOS 到内存中,直接跳转执行[^4]。
#### 3. **SSBL 阶段**
如果系统需要运行操作系统(如 Linux),则通常在此阶段引入 U-Boot 作为 SSBL。U-Boot 负责进一步初始化硬件环境、加载内核镜像(Image)、设备树(Device Tree Blob)以及根文件系统(rootfs),最终启动 Linux 内核。
对于裸机应用,SSBL 可能是一个简单的应用程序或测试代码,用于验证系统功能[^3]。
#### 4. **操作系统启动阶段**
当使用 Linux 操作系统时,在 U-Boot 完成加载后,Linux 内核开始接管系统控制权。内核初始化 CPU、内存管理子系统、调度器等核心组件,并挂载根文件系统,启动 init 进程,进入用户空间[^4]。
---
### 常见 ZYNQ 启动问题及解决方法
#### 1. **无法从指定设备启动**
可能原因包括启动模式设置错误、启动设备未正确插入或格式化不当。建议检查拨码开关状态是否匹配预期启动模式,确认 SD 卡或 QSPI Flash 中存在有效的启动镜像(BOOT.bin)[^2]。
#### 2. **FSBL 执行失败**
FSBL 未能正确初始化 DDR 或加载比特流可能导致启动失败。可通过串口输出查看调试信息,确认具体出错位置。此外,确保生成的 FSBL 与硬件设计一致(如 MIO 设置、时钟配置等)[^4]。
#### 3. **PL 配置失败**
若比特流加载失败,可能是由于 PL 电源未正确上电、配置引脚异常或比特流版本不兼容。建议使用 Vivado 查看 PL 配置日志,检查是否有错误提示。同时确保 FSBL 中启用了 PL 初始化流程[^1]。
#### 4. **U-Boot 无法启动**
U-Boot 启动失败常见于设备树配置错误、内核镜像损坏或内存地址设置不当。应检查 U-Boot 的加载地址是否与设备树和内核镜像的链接脚本一致。此外,使用 TFTP 或 NFS 启动可快速定位问题来源[^3]。
---
### 开发指南中的相关资源
《启明星ZYNQ之FPGA开发指南-V2.0》详细介绍了 ZYNQ 平台的启动流程,包括如何构建 FSBL、加载比特流及配置 U-Boot。该指南还提供了多个实验案例,帮助开发者逐步掌握 ZYNQ 启动过程的关键步骤[^2]。
对于希望深入了解 Linux 启动流程的开发者,《zynq Linux程序开发》文档提供了从生成 HDL 文件到最终启动 Linux 内核的完整流程说明[^4]。
---
### 示例:生成 BOOT.bin 文件
以下是使用 Xilinx SDK 生成 BOOT.bin 文件的基本步骤:
```bash
# 假设已经生成了 fsbl.elf、system.bit 和 uImage
bootgen -arch zynq -image boot.bif -o BOOT.bin
```
其中 `boot.bif` 文件内容如下:
```
the_ROM_image:
{
[bootloader]fsbl.elf
system.bit
uImage
}
```
此命令将 FSBL、比特流和 Linux 内核打包成一个完整的启动镜像文件 `BOOT.bin`,可用于烧写到 SD 卡或 QSPI Flash 中[^4]。
---
阅读全文
相关推荐

















