ZYNQ - 嵌入式Linux开发 -11- ZYNQ7系列FSBL执行流程分析

简介: ZYNQ - 嵌入式Linux开发 -11- ZYNQ7系列FSBL执行流程分析

写在前面


本文主要是对FSBL工程的main函数进行分析。

FSBL代码启动步骤


在SDK新建一个FSBL工程,然后打开src文件夹中的main.c文件,找到maian函数进行分析,FSBL的启动过程。

1.对 PCW进行初始化


image.png

调用ps7_init函数,主要是对PS端配置信息进行初始化操作,包括MIO,PLL.CLK and DDR。在vivado软件中可以通过图形化的方式对ZYNQ PS端外设进行相关配置,那么这些配置信息会写入到hdf文件,SDK(或petalinux)会对hdf文件进行解析并生成对应的寄存器配置表,然后FSBL工程中会通过ps7_init函数将寄存器配置表写入到对应的寄存器中,完成对MIO/PLL/CLK/DDR等外设的硬件配置。

2.解锁SLCR


image.png

解锁SLCR,用于SLCR寄存器的写入。

3.刷DCache缓存、禁用DCache缓存


image.png

先调用Xil_DCacheFlush,函数完成刷DCache,缓存的操作,然后再调用Xil_DCacheDisable禁用DCache缓存。

4.注册异常处理函数


image.png

调用RegisterHandlers函数,进行异常处理函数的注册。

5.DDR读写测试


调用DDRInitCheck函数,用于DDR读写测试。

image.png

6.PCAP的初始化


image.png

调用InitPcap函数处理器配置访问端口。

7.读取芯片版本


image.png

8.获得PCAP控制器设置检查AES秘钥


image.png

9.存储FSBL复位状态寄存器、读取bootmode寄存器


image.png

10.读取BOOT_MODE寄存器


这个寄存器记录ZYNQ的启动方式(QSPI、SD、NAND、Nor、JTAG),可以通过MIO3、MIO4、MIO5这三个引脚去配置ZYNQ的启动方式

ZYNQ上电复位的时候,会将这三个引脚的电平状态保存在BDOT_MODE寄存器当中,下图为NOR Flash模式下的配置代码。

image.png

这部分代码逐个比较BOOT_MODE寄存器值,确定ZYNQ当前的启动方式每一种启动方式会有不同的处理方式。

  1. 先初始化对应的flash设备
  2. 再将Movelmage.函数指针指向Flash设备的读写函数实体

11.加载启动镜像


image.png

调用LoadBootlmage函数。

FSBL的主要工作是启动U-Boot,也要将bitstream文件加载到PL端。找到U-Boot、bitstream,在读取U-Boot 拷贝 DDR中对应的加载地址,读取bitstream 加载到PL端。然后跳转到U-Boot运行地址启动U-Boot。

12.调用FsblHandoff


image.png

调用FsblHandoff(HandoffAddress),启动完U-Boot之后,FSBL的使命的就完成了。

references


  1. UG585
  2. FSBL代码


目录
相关文章
|
1天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
29 15
|
6天前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
24 7
|
15天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
79 13
|
9天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
2月前
|
缓存 算法 Linux
Linux内核中的调度策略优化分析####
本文深入探讨了Linux操作系统内核中调度策略的工作原理,分析了不同调度算法(如CFS、实时调度)在多核处理器环境下的性能表现,并提出了针对高并发场景下调度策略的优化建议。通过对比测试数据,展示了调度策略调整对于系统响应时间及吞吐量的影响,为系统管理员和开发者提供了性能调优的参考方向。 ####
|
4月前
|
存储 传感器 Linux
STM32微控制器为何不适合运行Linux系统的分析
总的来说,虽然技术上可能存在某些特殊情况下将Linux移植到高端STM32微控制器上的可能性,但从资源、性能、成本和应用场景等多个方面考虑,STM32微控制器不适合运行Linux系统。对于需要运行Linux的应用,更适合选择ARM Cortex-A系列处理器的开发平台。
305 0
|
消息中间件 缓存 Unix
[面试必备]嵌入式Linux内核开发必须了解的三十道题
[面试必备]嵌入式Linux内核开发必须了解的三十道题
|
Linux
嵌入式Linux QT开发之如何实现获取磁盘空间大小的应用逻辑
嵌入式Linux QT开发之如何实现获取磁盘空间大小的应用逻辑
255 0
|
Linux Go 人机交互
嵌入式linux之go语言开发(十三)LittlevGL,漂亮的嵌入式GUI的go语言绑定
嵌入式linux之go语言开发(十三)LittlevGL,漂亮的嵌入式GUI的go语言绑定
|
存储 XML JSON
嵌入式linux之go语言开发(十二)参数配置文件存储模块开发
嵌入式linux之go语言开发(十二)参数配置文件存储模块开发