ZYNQ7000 启动流程解析

ZYNQ7000 启动流程解析,第1张

存放锋敏派在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的使命的就完成了。

Zynq-7000是一种全可编程FPGA SoC,它将ARM Cortex-A9处理器和Xilinx FPGA集成在一起。使用激局册Linux *** 作系统可以为Zynq-7000带来以下优点:

1.强大的软件支持:Linux是一种流行的开源 *** 作系统,具有广泛的软件支持和社区支持。使用Linux *** 作系统可以轻松地访问各种软件和工具,从而提高开发效率。

2.易于开发:使用Linux *** 作系统可以使用各种编程语言和开发工具进行开发,例如C/C++、Python、Java等。这使得开发人员可以使用他们熟悉的工具和语言进行开发。

3.可靠性和稳定性:Linux *** 作系统是一种稳定和可靠腊旁的 *** 作系统,具有良好的内存管理和错误处理机明宏制。这使得它成为一种可靠的 *** 作系统,适用于需要高可靠性的应用程序。

然而,使用Linux *** 作系统也存在一些难点:

1.硬件驱动程序:使用Linux *** 作系统需要编写适当的硬件驱动程序,以便 *** 作系统可以与硬件进行通信。这需要一定的硬件和软件知识。

2.系统配置:使用Linux *** 作系统需要进行系统配置,例如设置网络连接、安装软件包等。这需要一定的系统管理知识。

3.性能优化:使用Linux *** 作系统需要进行性能优化,以确保系统可以在给定的资源下运行。这需要一定的系统优化和调试知识。

总之,使用Linux *** 作系统可以为Zynq-7000带来许多优点,但也需要一定的硬件和软件知识来克服一些难点。

在Zynq-7000上编程PL大致有3种方法:1.用FSBL,将bitstream集成到boot.bin中2.用U-BOOT命令3.在Linux下用xdevcfg驱动。步骤:1.去掉bitstream的文件头用FSBL烧写PLImages没有什么好说的,用XilinxSDK的CreateBootImage工具即可完成,不再赘述。用后乎轮简两种方法需要把bitstream文件的文件头用bootgen工具去掉。一个典型的bif文件如下所示:the_ROM_image:{[bootloader].elf.bit.elf}bif文件可以用文本编辑器写,也可以用XilinxSDK的CreateBootImage工具生成。然后在桐或命令行下用以下命令即可去掉bitstream文件的文件头。bootgen-image.bif-splitbin-oiBOOT.BIN"-split”参数可以生成以下文件:.bit.bin2.在U-BOOT下烧写PLImage命令”fpgaload”和”fpgaloadb”都可以。区别是前一个命令接受去掉了文件头的bitstream文件,后一个命令接受含有文件头的bitstream文件。在OSL2014.2上,缺省编译就可以完整支持写入PLImage的功能。但是在Petalinux2013.10下,尽管可以在U-BOOT下看到命令”fpga”,还需要在文件/subsystems/linux/configs/u-boot/platform-top.h中增加以下内容后重新编译才可以支持具体的功能。/*EnablethePLtobedownloaded*/#defineCONFIG_FPGA#defineCONFIG_FPGA_XILINX#defineCONFIG_FPGA_ZYNQPL#defineCONFIG_CMD_FPGA#defineCONFIG_FPGA_LOADFS在OSL2014.2U-BOOT中,具体的功能是在zynqpl.c的zynq_load()中实现的。3.在Linux下烧写PLImageOSLLinux2014.2.01中已经含有xdevcfg驱动了(之前就有,不过本文是在这个版本上验证的),直接用以下命令就可以完成PLImage写入。cat/.bit.bin>/dev/xdevcfgLinux驱动的源代岁裤码在xilinx_devcfg.c中。因为驱动的编号是通过alloc_chrdev_region()动态分配的,所以不需要手工用mknod命令手动建立设备节点。在Linux驱动中,每次往DevCfg中写入4096字节,直到全部写完。4.在用户程序中烧写PLImage目前没有现成的源码来完成这个功能,不过可以用mmap()把DevCfg的寄存器映射到用户程序的虚地址中,然后参考一些现成的软件代码来完成这个功能:*FSBL中的pcap.c*U-BOOT中的zynqpl.c*Linux中的xilinx_devcfg.c*XilinxSDK中的例子。例子位于以下位置,随SDK的版本会有变化。C:\Xilinx\SDK\2014.1\data\embeddedsw\XilinxProcessorIPLib\drivers\devcfg_v3_0\examples\index.html小结:DevCfg外设内部有自己的DMA,只需要简单的配置PLImage的基地址和长度到DevCfg寄存器,就可以完成Zynq-7000PLImage的加载。Xilinx已经提供了灵活的解决方案,如果开发者要把这个功能集成在自己的应用程序中,也有很多的代码可以参考,并不是很困难的任务。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12500390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存