ZYNQ有多种启动模式,每种模式对应的SDK生成文件有所不同。以下是主要启动模式及其SDK文件区别:
1. JTAG模式
- 用途:调试和开发
- 生成文件 :
FSBL.elf(First Stage Bootloader)xxx.bit(FPGA比特流文件)应用程序.elf(用户应用程序)
- 启动过程:通过JTAG直接加载到内存执行
2. QSPI Flash启动
-
生成的关键文件 :
BOOT.bin -
文件组成 :
- Boot Header(引导头,包含配置信息)
- FSBL.elf(第一阶段引导程序)
- bitstream.bit(可选,FPGA配置)
- 应用程序.elf(用户程序)
-
SDK操作 :
bashCreate Boot Image → 生成 BOOT.bin
3. SD卡启动
- 生成文件 :
BOOT.bin - 文件结构 :
-
SD卡FAT32分区只需包含:
BOOT.bin [可选] system.bit (如果未集成到BOOT.bin中) [可选] uImage (Linux内核) [可选] devicetree.dtb (设备树) [可选] uramdisk.image.gz (根文件系统)
-
4. NAND Flash启动
- 生成文件 :
BOOT.bin - 额外考虑 :
- NAND需要坏块管理
- FSBL需支持NAND控制器
- 可能生成
.mcs文件用于烧录
5. NOR Flash启动
- 生成文件 :
BOOT.bin - 特点 :
- 支持XIP(eXecute In Place)
- 启动速度较快
SDK中创建启动镜像的区别
通用步骤:
bash
1. 编译FSBL.elf
2. 导出硬件bit文件
3. 编译应用程序.elf
4. 使用"Create Boot Image"工具打包
模式特定的差异:
| 启动模式 | 输出文件 | FSBL配置差异 | 烧录工具 |
|---|---|---|---|
| QSPI | BOOT.bin | 配置QSPI控制器 | Vivado/SDK Flash Programmer |
| SD卡 | BOOT.bin | 配置SD/eMMC控制器 | 直接复制到SD卡 |
| NAND | BOOT.bin | 配置NAND控制器,支持坏块处理 | Flash Programmer |
| NOR | BOOT.bin | 配置NOR控制器,支持XIP | Flash Programmer |
| JTAG | 无需打包 | 直接调试 | JTAG下载器 |
关键配置区别
FSBL配置:
c
// bsp设置中的差异
#define FSBL_DEBUG_INFO // 调试信息
#define QSPI_BOOT // QSPI启动配置
#define SD_BOOT // SD卡启动配置
BIF文件示例:
bash
// QSPI启动的BIF文件
the_ROM_image:
{
[bootloader] fsbl.elf
system.bit
application.elf
}
实用建议
- SD卡模式最适合开发和原型验证
- QSPI模式适合产品部署(成本低)
- JTAG模式仅用于调试
- 生产时考虑:
- QSPI:小容量,低成本
- eMMC/SD:大容量,易更新
- NAND:大容量,需坏块管理
文件生成命令示例
bash
# 生成BOOT.bin
bootgen -image bootimage.bif -arch zynq -o BOOT.bin -w on
# 生成QSPI烧录文件
bootgen -image bootimage.bif -arch zynq -format mcs -o output.mcs
不同启动模式主要影响FSBL的配置和最终镜像的打包方式,但用户应用程序代码通常无需修改。