1、用于创建BOOT.bin需要的文件
(1)u-boot.elf:在Linux下编译后生成u-boot文件,再强制改名为u-boot.elf文件,得到之。
(2)zynq_fsbl_0.elf:在EDk下创建得到之。
(3)system.bit::在PlanAhead中生成的bit文件;该文件不是必须的,没有该文件时,相当于把Zynq只当ARM来用。
2、创建BOOT.bin文件
(1)只含有PS部分的设计
在SDk下,Xilinx Tools ->Craete Boot
Image得到如下图所示:
(2)同时包含有PS和PL设计
在(1)中所述生成的BOOT.bin文件不含有给PL部分配置的*.bit文件,即只是ARM部分的运行代码。要使PL部分也能运行,需要在创建BOOT.bin文件时,加入PL部分的设计生成system.bit文件
相比而言,由于(1)中生成的BOOT.bin文件没有PL部分的设计,也就无需对PL进行配置,所以启动时会快一些,而(2)中的BOOT.bin文件启动要慢一些,大概有30s~40s不等(依赖于system.bit文件的大小)。
存放在ZYNQ芯片内部ROM不可更改,用于找到FSBL并启动它(从SD或者QSPI或者NAND),ug585第六章
用于引导U-Boot
用于引导Linux Kernel
petalinux工具可以构建2和3还有内核
BOOT.BIN包括fsbl,bitstream,用户程序(uboot)
image.ub包括了kernel(devicetree DTB和rootfs通过设置可选包不包含在ub内)
主要是分析下FSBL工程的main函数
调用ps7_init函数
主要是对PS端配置信息进行初始化 *** 作,包括MIO,PLL,CLK and DDR
我们在vivado软件中可以通过图形化的方式对ZYNQ PS端外设进行相关配置,那么这些配置信息会写入到hdf文件,SDK(或petalinux)会对hdf文件进行解析并生成对应的寄存器配置表,然后FSBL工程中会通过ps7_init函数将寄存器配置表写入到对应的寄存器中,完成对MIO/PLL/CLK/DDR等外设的硬件配置。
先调用Xil_DCacheFlush函数完成刷DCache缓存的 *** 作,然后再调用Xil_DCacheDisable禁用DCache缓存。
调用RegisterHandlers函数
调用DDRInitCheck函数
调用InitPcap函数
处理器配置访问端口
这个寄存器记录ZYNQ的启动方式(QSPI、SD、NAND、Nor、JTAG)
可以通过MIO3 MIO4 MIO5这三个引脚去配置ZYNQ的启动方式
ZYNQ上电复位的时候,会将这三个引脚的电平状态保存在BOOT_MODE寄存器当中。
每一种启动方式会有不同的处理方式。
第一、先初始化对应的flash设备
第二、再将MoveImage函数指针指向Flash设备的读写函数实体
调用LoadBootImage函数
FSBL的主要工作是启动U-Boot(终极目标),也要将bitstream文件加载到PL端。
找到U-Boot、bitstream
在读取U-Boot拷贝DDR中对应的加载地址,读取bitstream加载到PL端
调用FsblHandoff(HandoffAddress)
启动完U-Boot之后,FSBL的使命的就完成了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)