Zynq 学习笔记(4)Linux FPGA Manager

                Xilinx Zynq 是Arm 处理器(PS)和FPGA (PL) 相结合的混合SOC。如何通过程序下载PL的bit 文件,特别是下载局部重构分区的bit 文件是我关心的话题。不过涉及这方面的文档实在是太多,太复杂了。PCAP,ICAP 等概念一大堆。而网络上的文章大多是介绍操作流程,介绍背景知识的文章非常少。本文记录一些自己的读书笔记,目的是介绍一些“基本知识”和经过自己尝试的过程。

          其实在Zynq 的Linux环境下,PL 的bit文件下载变得非常简单,甚至于不需要编写程序,只要使用shell 命令就能轻松地完成。它有两种编程方式:

  • 通过FSBL(First Stage Boot-loader), U-Boot 在引导时写入
  • 通过Linux FPGA Manager 在系统引导后写入

Linux FPGA Manager

        FPGA 管理器是linux内核一部分(我也是第一次发现,被惊呆了),它导出一组函数,用于使用映像(image)对 FPGA进行编程。它们的API 与制造商无关。所有制造商的细节都隐藏在一个低级驱动程序中,该驱动程序向内核注册了一组操作。FPGA 图像数据本身是非常特定于制造商的,但对我们而言,它只是二进制数据。FPGA 管理器内核不会解析它。

下图是Xilinx ZYNQ Linux FPGA Manager 的架构。

 

 

        从上图看,FPGA Manager Driver 的底层是XIlinx FPGA 的Driver。实际上,Linux FPGA Manager 也支持altera 的Arria-V/Cyclone-V/Stratix-V和Arria-10 FPGA 。只要安装了Altera 的相关驱动就可以。在这里,我们只讨论Xilinx Zynq Linux 的FPGA 管理

下载流程

第一步:design_1_wrapper.bit 转换成为design_1_wrapper.bit.bin 文件

vivado 中点击 Generate bitsstream。

它将会在项目的….runs\impl_ 的目录下产生一个design_1_wrapper.bit文件。

这个文件不能直接地下载到FPGA 中。需要将design_1_wrapper.bit 转换成为design_1_wrapper.bit.bin 文件。具体的步骤如下:

1 在 C:\Users\asus\AppData\Roaming\Xilinx\Vivado 目录下构建Full_Bitstream.bif文件

它的内容是:

all:
{
        F:\workspace\petalinux_gpio\petalinux_gpio.runs\impl_1\design_1_wrapper.bit /* Bitstream file name */
}

我相信将Full_Bitsstream.bif 构建在impl_1 目录中,只要在下面的命令中使用绝对路径,也是OK的。

2 在vivado 的Tsl Consol 下输入下列命令:

bootgen -image Full_Bitstream.bif -arch zynq -process_bitstream bin

vivado 的界面为:

bootgen -image Full_Bitstream.bif -arch zynq -process_bitstream bin
WARNING: [Common 17-259] Unknown Tcl command 'bootgen -image Full_Bitstream.bif -arch zynq -process_bitstream bin' sending command to the OS shell for execution. It is recommended to use 'exec' to send the command to the OS shell.


****** Xilinx Bootgen v2021.2
  **** Build date : Oct 19 2021-03:13:27
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.


[INFO]   : Bootimage generated successfully

       注意: 网络上也有人建议在vivado 的项目的setting 中 bitstream 中勾选 bit file 。但是我好像没有尝试成功。

完成之后,会在F:\workspace\petalinux_gpio\petalinux_gpio.runs\impl_1目录下产生一个design_1_wrapper.bit.bin 文件。

3 将这个文件Copy 到 SDCard 上。

4 将sdcard 插入开发板的sd card 卡座上,上电启动。进行下面的操作

第二步:在ZYNQ 的Petalinux 命令行中完成下载

全部Bits流的下载步骤

Set flags for Full Bitstream

echo 0 > /sys/class/fpga_manager/fpga0/flags

加载SD 卡

mount /dev/mmcblk0 /media/

载入bitstream

mkdir -p /lib/firmware

cp /media/design_1_wrapper.bit.bin /lib/firmware/

echo design_1_wrapper.bit.bin > /sys/class/fpga_manager/fpga0/firmware

局部bits 流的编程步骤

Set flags for Partial Bitstream

echo 1 > /sys/class/fpga_manager/fpga0/flags

Load the Bitstream Partial Bitstream

mkdir -p /lib/firmware

cp /media/partail_wrapper.bit.bin /lib/firmware/

echo partail_wrapper.bit.bin  > /sys/class/fpga_manager/fpga0/firmware

下面是我操作的记录

root@petalinux_gpio:~# echo 0 > /sys/class/fpga_manager/fpga0/flags
root@petalinux_gpio:~# mount /dev/mmcblk0 /media/
root@petalinux_gpio:~# mkdir -p /lib/firmware
root@petalinux_gpio:~# cp /media/design_1_wrapper.bit.bin /lib/firmware/design_1_
_wrapper.bit.bin
root@petalinux_gpio:~# echo design_1_wrapper.bit.bin > /sys/class/fpga_manager/fp
pga0/firmware
fpga_manager fpga0: writing design_1_wrapper.bit.bin to Xilinx Zynq FPGA Manager
root@petalinux_gpio:~#

注意:如果没有将design_1_wrapper.bit 转换成为design_1_wrapper.bit.bin 文件,上述流程会出错!

root@petalinux_gpio:~# echo system_wrapper.bit > /sys/class/fpga_manager/fpga0/fi irmware
fpga_manager fpga0: writing system_wrapper.bit to Xilinx Zynq FPGA Manager
fpga_manager fpga0: Invalid bitstream, could not find a sync word. Bitstream must be a byte swapped .bin file
fpga_manager fpga0: Error preparing FPGA for writing
-sh: echo: write error: Invalid argument 

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: zynq-linux移植学习笔记应包含以下内容: 1. 对zynq架构和硬件资源的理解,包括PS和PL部分的特点。 2. 如何使用Xilinx SDK来编译和配置u-boot和Linux内核。 3. 如何在硬件平台上运行和调试Linux系统。 4. 怎样在Linux系统中配置和使用各种硬件资源,如DMA、Ethernet、Flash等。 5. 如何在Linux系统中移植和运行应用程序,并与硬件资源进行交互。 6. 如何进行系统优化和资源管理,以提高系统性能和稳定性。 ### 回答2: Zynq是一款Xilinx公司开发的一种嵌入式系统芯片,其使用了双核Cortex-A9处理器和可编程逻辑器件(FPGA)的组合。移植LinuxZynq芯片中,可以使其具备无限的扩展能力,极大地拓展了其应用领域,因此掌握Zynq-Linux移植技术是非常重要的。 Zynq-Linux移植分为四个主要步骤: 第一,准备工作 在移植前,需要确认硬件平台是否支持Linux运行,并且需要对硬件进行配置,最好使用Zynq开发板的官方配置; 第二,内核移植 内核移植是整个移植过程中最关键的一步。需要根据硬件平台的特性对内核进行选择和配置。可以从内核源代码库中获取内核代码,然后进行交叉编译。移植内核的过程中需要注意内核配置参数的设置,同时也要确保内核模块和驱动程序的编写。 第三,文件系统移植 在移植Linux的过程中,文件系统也是非常重要的。可以使用开发板官方Linux镜像,也可以自己编译镜像。移植文件系统还涉及到root文件系统的配置、挂载方式、网络配置和各种服务的配置等问题。 第四,驱动移植 驱动程序是连接硬件和软件的关键部分,需编写相应的驱动程序来实现对硬件的控制。移植驱动程序的过程中需要关注各种硬件接口和设备驱动API的使用,确保驱动程序与硬件配合良好。 总结来说,Zynq-Linux移植技术的掌握需要具备较强的Linux基础知识、驱动开发经验和交叉编译工具链的使用能力。同时,还需要有耐心和细心,对每个步骤进行仔细的分析和处理。 在学习中,需要结合实际开发项目,多进行实践操作才能更好地掌握Zynq-Linux移植技术,为后续项目的开发和应用提供更好的支持。 ### 回答3: Zynq-7000系列是一种由Xilinx开发的SoC(系统级芯片),它将双ARM Cortex-A9处理器和可编程逻辑(FPGA)集成在一起。这使得开发人员可以使用硬件加速加速器来加速运行在Linux上的各种应用。然而,实现这个目标需要进行移植。 在开始Zynq Linux移植学习笔记之前,需要一些基本的知识。首先,需要了解Linux内核的基本工作原理和Linux驱动程序的编写技术。然后,需要了解FPGA和SoC体系结构。 在开始移植之前,需要为SoC开发板选择正确的Linux发行版。这通常需要考虑处理器体系结构,内存大小和设备驱动程序的可用性。另外,还需要考虑是否需要自定义内核或驱动程序以满足应用程序的需求。 接下来,需要编写设备树文件(DT)来描述SoC架构。设备树文件是一种描述硬件配置信息的特殊语言。它会告诉内核有哪些设备可用以及如何访问这些设备。 接下来,需要配置Linux内核以支持Zynq-7000处理器。这可能包括启用适当的内核配置选项,编写设备驱动程序以及配置启动过程。 最后,需要启动Zynq板并验证Linux系统稳定运行。这些步骤包括在启动过程中将设备树文件加载到内存中,以及启动用户空间应用程序。 总之,移植Zynq Linux是一项复杂的任务,需要广泛的专业知识和技术。但是,它可以为开发人员提供强大的硬件加速支持,使他们能够加速处理一系列计算密集型应用程序。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值