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代码


目录
相关文章
|
7月前
|
存储 Linux
Linux环境下删除大文件后磁盘空间未释放问题诊断流程。
以上诊断流程涉及Linux底层机制与高级管理技能结合之处,并需要管理员根据实际环境灵活调整诊断策略与解决方案。
544 8
|
12月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
3357 77
|
10月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
464 32
|
12月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
735 15
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
645 13
|
监控 安全 Java
linux服务器上启动framework应用程序流程
【10月更文挑战第17天】在Linux服务器上启动Framework应用程序需经过准备工作、部署、启动、监控及访问五个步骤。首先确保服务器满足系统要求并安装依赖项;接着上传应用文件,编译构建,配置参数;然后通过脚本、命令行或系统服务启动应用;启动后检查日志,监控性能;最后确认访问地址,验证应用运行状态。具体操作应参照应用文档。
241 2
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
693 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
监控 Java Linux
linux服务器上启动framework应用程序流程
【10月更文挑战第18天】在 Linux 服务器上启动框架应用程序的流程包括:准备工作(确保访问权限、上传部署文件、了解启动要求)、检查依赖项、配置环境变量、切换到应用程序目录、启动应用程序、监控启动过程以及验证应用程序是否正常运行。具体步骤可能因应用程序类型和框架而异。
182 0