EBAZ4205_NOTE
FSBL介绍
- FSBL的作用
FSBL是ZYNQ 7000启动过程中的第一阶段,其主要作用是初始化硬件资源、加载FPGA bit文件、配置DDR等。在FSBL执行完毕后,系统会进入第二阶段——uboot。
- FSBL的代码结构
fsbl.h:定义了FSBL的全局变量和函数原型。
fsbl_config.h:定义了FSBL的配置信息,如DDR的大小和地址、FPGA bit文件的地址等。
fsbl_hooks.c:定义了FSBL的钩子函数,如FSBL的初始化函数、DDR的初始化函数等。
fsbl_main.c:FSBL的主函数,包含了FSBL的启动过程。
- FSBL的启动过程
FSBL的启动过程主要包括以下几个步骤:
初始化硬件资源:包括初始化PS和PL的时钟、GPIO、UART等。
加载FPGA bit文件:从SD卡或QSPI Flash中读取FPGA bit文件,并将其加载到PL中。
配置DDR:初始化DDR控制器,并配置DDR的大小和地址。
初始化FSBL的全局变量:包括FSBL的启动模式、DDR的大小和地址、FPGA bit文件的地址等。
执行FSBL的钩子函数:包括FSBL的初始化函数、DDR的初始化函数等。
跳转到uboot:将控制权转交给uboot,进入第二阶段的启动过程。
- FSBL的钩子函数
FSBL的钩子函数包括:
- FSBL的初始化函数:初始化FSBL的全局变量。
- DDR的初始化函数:初始化DDR控制器,并配置DDR的大小和地址。
- FSBL的打印函数:用于在启动过程中输出调试信息。
- FSBL的生成方式
- vitis工具生成,New project选择Zynq FSBL模板生成fsbl.elf。
- petalinux命令行生成。
zynq启动流程
xilinx zynq 7000系列的芯片中包括两个部分,PS和PL,也就是FPGA的逻辑编程的部分跟嵌入式ARM的部分,ARM部分是双核的A9处理器。关于FPGA的部分在这里就不说了。其实说的简单点,可以吧这个芯片看成一个带有FPGA外设的ARM处理器,下面详细分析一下启动流程。
所有的芯片都是从0地址启动的,所以首先找到0地址的代码在..xxxx.sdk\standalone_bsp_0\ps7_cortexa9_0\libsrc\standalone_v5_1\src\asm_vectors.S中的开头也就是0地址的地方有这样得一段代码:
BOOT.bin
standalone BOOT.bin包含:
fsbl.elf文件
vivado生成的fpga的bit文件
app工程的elf文件(这里为led工程的elf)
linux BOOT.bin包含:
fsbl.elf文件
vivado生成的fpga的bit文件
u-boot.elf文件
system.dtb设备树文件
注:linux的内核镜像 文件系统在BOOT.bin之外。
ubuntu 16.04
1 | |
PetaLinux 2017.2
1 | |
1 | |
1 | |
配置参考正点原子文档
1 | |
1 | |
参考:
petalinux 2017.2安装指南
https://blog.csdn.net/u013457167/article/details/77914069
EBAZ4205矿板petalinux开发 LINUX工程
https://blog.csdn.net/qq_36322990/article/details/107845484
zynq-7000系列板卡
https://www.fpgadeveloper.com/list-of-zynq-7000-dev-boards/
boot.scr、script.bin文件介绍
https://blog.csdn.net/qq_28877125/article/details/124724089
the PetaLinux Tools Documentation: Reference Guide (UG1144)
Zynq-7000 SoC Technical Reference Manual (UG585)