ZYNQ启动过程(转载)

本文详细介绍了Zynq启动过程中的关键步骤,包括BootROM、FSBL和SSBL的作用及执行流程。从硬件启动过程到BootROM初始化,再到FSBL加载及配置,最后到SSBL或裸机程序的执行,提供了深入的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:http://design.eccn.com/design_2016120213185392.htm

本文主要介绍zynq启动过程,主要包括BootROM和FSBL等的执行过程。

硬件启动过程
1、重新上电或POR复位后进行硬件启动过程
2、扫描“启动引脚”设置,并存入只读寄存器slcr.BOOT_MODE中
3、若使能pll,则等到pll输出时钟;若旁路pll,则直接使用ps_clk时钟

BootROM

BootROM在POR复位后经过硬件启动后自动运行,也可在非POR复位后直接运行(不经过硬件启动),其内容固化在内部ROM中,不能修改,主要初始化MMU和一些系统资源(以使其满足BootROM执行的要求)以及加载FSBL程序段等。BootROM在CPU 0执行,而CPU 1执行WFE指令

主要过程如下:
1、硬件启动后BootROM将初始化MMU、NAND、NOR、QSPI、SD和PCAP等基本外设
2、判断启动设备(决定于硬件启动过程时扫描的“启动模式”引脚,即寄存器slcr.BOOT_MODE)并搜索boot镜像头信息,各启动模式搜索范围:

  • Quad-SPI,头16 MB空间搜索
  • NAND,头128MB空间搜索
  • NOR,头32MB
  • SD卡中只加载一次,不会搜索

    3、BootROM会根据启动模式配置MIO,还会根据读取的boot镜像头信息的“寄存器初始化参数”部分配置时间优化寄存器
    4、从指定启动设备中加载SFBL到OCM(加载时也会读取头部信息确定加密状态,文件长度等,若加密则还需解密后加载到OCM,BootROM头信息都不会加密),另外还支持直接在QSPI或NOR中执行(从头部信息中文件长度为0时,这时就不用加载到OCM了)
    5、跳转到SFBL中执行,BootROM关闭

    其它说明:

  • 如果已经为加密模式,经过非POR复位后,读取BootROM头信息检测到一个非加密的boot,系统将会被锁定
  • 如果检测到BootROM中有错误,系统也会被锁定
  • 如果为加密模式则需要等待PL上电才能继续加载,因为解密验证模块(AES and HMAC)在PL部分;而无论时加密模式还是非加密模式再配置.bit文件时都要等待PL部分准备好(通过检查寄存器devcfg.STATUS [PCFG_INIT])

    FSBL

    FSBL主要初始化更多的外设(如DDR)、初始化PL部分和加载SSBL或裸机程序等。

    主要过程如下:
    1.初始化MIO、PLL、CLK等,ps7_init()中所做
    2.根据vivado(或XPS)中设置完成PS端初始化
    3.判断启动设备(决定于寄存器slcr.BOOT_MODE)并从中扫描并加载.bit和SSBL或裸机程序
    4.用.bit配置PL部分(FSBL通过PCAP控制器配置PL部分)
    5.加载SSBL或裸机程序到DDR中
    6.跳转到SSBL或裸机程序中执行

    对于FSBL程序通常使用SDK中自带模板,但是不同于BootROM不可改变,FSBL可以手动修改实现一些自定义的内容。而且可以像裸机程序一样调试排错(在fsbl_debug.h中定义宏FSBL_DEBUG_INFO(#define FSBL_DEBUG_INFO)可以查看FSBL打印的调试信息)

    注意:由于OCM大小为256KB,而在BootROM阶段OCM高64KB(OCM 从0x0000_0000开始192KB,从0xffff_0000开始64KB)用于存储BootROM头信息和变量,在BootROM执行完成后才可用于FSBL,所以FSBL大小要小于192KB。

    其它说明:

  • 当从外部器件中启动为非加密模式时,才能使用JTAG进入调试模式
  • 直接在NOR or Quad-SPI中运行的FSBL必须为非加密模式
  • FSBL大小要小于192KB,但是直接在flash器件(NOR or Quad-SPI)中直接运行的情况没有这个限制
  • AES一次只能解密1Byte,所以PCAP在4个时钟周期内只能发送一个32bit数据(加密配置时)

    SSBL
    通常SSBL就是裸机程序,对于Linux启动来说就是u-boot之类的bootloader。

    对于没有使用PL部分的设计,即只把zynq当做普通ARM来使用,则完全可以不用FSBL,而通过BootROM直接加载裸机程序并运行(使用方式和注意事项请看“zynq的三种启动方式(JTAG,SD,QSPI)”)。

### Zynq-7045 启动流程详解 Zynq-7045 是 Xilinx Zynq UltraScale+ MPSoC 系列中的一个型号,它集成了双核 ARM Cortex-A53 处理系统(PS)和可编程逻辑(PL),支持多种启动方式,包括从 QSPI Flash、NAND Flash、SD 卡以及 JTAG 模式等启动启动流程主要由 BootROMFSBL(First Stage Boot Loader)、SSBL(Second Stage Boot Loader)和操作系统组成。 #### BootROM 阶段 Zynq-7045 上电后,首先执行的是固化在芯片内部的 BootROM 代码。BootROM 会根据启动模式引脚(如 MIO 引脚)的状态决定从哪个设备加载下一阶段的引导代码。常见的启动模式包括: - **JTAG 模式**:用于调试,启动方式选择拨码开关设置为 `00`(1~2 位)[^2]。 - **QSPI 模式**:从外部 QSPI Flash 加载 FSBL。 - **SD 模式**:从 SD 卡加载引导镜像。 - **NAND 模式**:从 NAND Flash 启动。 #### FSBL 阶段 BootROM 加载 FSBL(通常是 `fsbl.elf`)到 OCM(On-Chip Memory)并执行。FSBL 主要完成以下任务: - 初始化 PS 系统(包括时钟、DDR 控制器等)。 - 加载 PL 的比特流(bitstream)以配置 FPGA 逻辑。 - 加载 SSBL(如 U-Boot 或 Baremetal 应用程序)到 DDR 中并跳转执行。 FSBL 的构建通常在 Xilinx SDK 中完成,需要根据硬件设计(HDF 文件)生成相应的引导代码[^1]。 #### SSBL 阶段 SSBL(Second Stage Boot Loader)负责进一步初始化系统环境并加载操作系统镜像(如 Linux 内核)。常见的 SSBL 有: - **U-Boot**:用于加载 Linux 内核和设备树。 - **Baremetal 应用**:用于裸机运行的简单程序。 在 U-Boot 模式下,U-Boot 会从指定的存储介质(如 SD 卡、QSPI Flash)中加载 Linux 内核镜像(zImage)和设备树(.dtb)到内存中,并启动内核。 #### 操作系统启动阶段 当 U-Boot 将 Linux 内核加载到内存后,会跳转到内核入口点,开始执行 Linux 启动流程。内核初始化硬件、挂载根文件系统,并最终启动用户空间程序(如 init 或 systemd)。 --- ### 启动镜像的构建流程 构建 Zynq-7045 的启动镜像通常包括以下步骤: 1. 使用 Vivado 创建硬件设计并生成 HDF 文件。 2. 在 Xilinx SDK 中创建 FSBL 工程并编译生成 `fsbl.elf`。 3. 如果使用 PL,生成比特流文件(.bit)。 4. 创建 BOOT.bin 文件,包含 BootROM 所需的元数据、FSBL 和比特流。 5. 构建 Linux 内核镜像(zImage)、设备树(.dtb)和根文件系统。 6. 将 BOOT.bin、zImage、.dtb 和 rootfs 放入启动介质(如 SD 卡或 QSPI Flash)。 --- ### 启动过程中的调试方法 - **串口调试**:通过 UART 接口连接调试终,查看启动过程中的打印信息。评估板 PL 调试串口 `CON19(RS232)` 可用于查看 PL 初始化日志[^2]。 - **JTAG 调试**:使用 JTAG 连接器连接 Xilinx SDK 或 Vivado Hardware Manager,进行硬件调试和烧录。 - **QSPI Flash 烧录**:使用 Vivado 或 SDK 的 Flash Programmer 工具将 BOOT.bin 烧录到 QSPI Flash 中。 --- ### 启动配置示例(QSPI 模式) ```bash # 在 U-Boot 中加载内核和设备树 setenv bootargs console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait fatload mmc 0 0x3000000 zImage fatload mmc 0 0x2A00000 system.dtb bootz 0x3000000 - 0x2A00000 ``` 该脚本用于从 SD 卡加载 Linux 内核和设备树并启动系统。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值