您的位置:首页 > 运维架构 > Linux

ZedBoard的启动流程(以运行linux操作系统为例)

2015-01-05 20:55 369 查看
ZedBoard启动需要的文件:
1、BOOT.bin (由fsbl.elf、system.bit、u-boot.elf 组成)
2、devicetree.dtb
3、uImage
4、uramdisk.image.gz
ZedBoard的启动流程通常可以分为三个步骤:
阶段0:在器件上电运行后,处理器会自动执行片内BootROM中的代码,BootROM中的代码是固化的,不可修改。BootROM中的代码将对zynq的NAND、NOR、SD等基本外设控制器进行初始化,使ARM核可以访问使用这些外设。而DDR等其他外设将在阶段1之后进行初始化。同时BootROM的代码还负责将阶段1的启动镜像(fsbl镜像)加载到OCM(zynq片上一个256K的RAM,但在fsbl运行前只能使用其中的192K,所以fsbl要小于192K),然后运行fsbl。
至于从哪个外部存储器中加载fsbl镜像,要看ZedBoard上MIO[5:3]引脚选择哪种启动方式。一般是选择从SD卡启动(这就是为什么BootROM要先对SD卡等基本外设控制器进行初始化的原因)。
阶段1:该阶段运行的是fsbl代码。完成的主要工作是

根据XPS中的配置,完成PS端的初始化(这一部分应该包括对DDR外设控制器的初始化)
使用比特流文件(Bitstream)对PL进行配置(如果不使用PL,就不需要这一步)
加载阶段2的代码(ssbl)到内存空间(DDR上),并运行ssbl代码

注:fsbl的代码可以直接使用xilinx的SDK软件自动生成(也可根据需要进行修改),步骤很简单。
阶段2:该阶段运行的是ssbl(u-boot.elf),ssbl会完成Linux内核启动之前所必需的硬件初始化,例如串口、USB设备等。并设置好启动参数,然后将Linux内核、设备树镜像从SD卡加载到内存中。之后将控制权交给内核。
当Linux内核拥有系统的控制权后,就会先进行初始化,建立内核的运行环境,如进行虚拟地址到物理地址的映射。还有一个主要的工作是通过设备树传递的信息,来初始化和挂载驱动设备。Linux内核将根据ssbl传递过来的参数信息,选择挂载文件系统的格式和挂载点。然后Linux内核运行init()函数,这是内核引导的终点,也是系统所有进程的起点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息