zynq-7000 器件有效的利用了CPU来帮助配置,在没有外部JTAG的情况下,处理器系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。
zynq有两种启动模式:1 从BootROM主动启动,2 从JTAG被动启动;通常我们使用从BootROM模式启动。
启动过程如下:
1 BootROM:也称启动存储区,是一块有ARM上电启动时执行的静态存储区,控制着整个芯片的初始化过程。放在BootROM里面的代码是固化的,不可更改的,处理器在上电时自动执行这部分代码。
上电复位后,ps端开始配置,ARM芯片执行bootROM代码。bootROM代码对Qual-SPI FLASH, SD卡 与 NAND Flash, NOR Flash 的基本外设进行初始化,究竟选择哪一种取决于MIO2-8的片选模块。同时BootROM代码还负责加载下一阶段(FSBL)的启动镜像。当bootROM将控制权交给FSBL后,用户代码拥有整个系统的控制权。
2 FSBL(first stage boot loader)
这个过程是在BootROM之后启动的引导程序,FSBL主要完成以下几项工作:
1) 根据XPS中的配置,完成PS端的初始化
2) 使用比特流(bitstream)文件对PL进行配置
3) 加载第二阶段(Second Stage Boot Loader , SSBL)or 裸跑程序(直接在ARM运行无操作系统)到内存空间
4) 跳转执行SSBL或者裸跑程序
xillinx提供了简单的FSBL启动代码,帮助我们完成PS当中必要外设的初始化工作,我们也可以查看与修改FSBL。
![](https://img-blog.csdn.net/20140929194958485?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2Fud2FuZG91amlhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图1 FSBL启动流程
3 SSBL(second stage boot loader)
通常这一部分是为操作系统的运行做初始化工作的。也称bootloader,初始化CPU,将操作系统加载到内存中,对于运行在zynq平台的linux系统而言,U-Boot就是SSBL。通常FSBL将U-Boot加载到ARM上运行,U-boot完成linux内核启动之前所必须的硬件初始化,例如串口,DDR控制器等并且支持从本地网络中加载linux内核,设备镜像树到内存中。之后U-Boot将控制权交给linux内核。
4 linux启动过程
嵌入式linux启动可分为四个部分:1)引导程序(bootloader) 2) linux内核 3)文件系统 4) 应用程序。 这里就不细讲了。
以上只是本人对zedboard的初步理解,有错误地方请指正。
本人微博:http://weibo.com/u/2729471010/home?wvr=5 微信号:yuansanwan 欢迎关注。