zynq Linux 启动之后动态布署PL方法摸索

这篇具有很好参考价值的文章主要介绍了zynq Linux 启动之后动态布署PL方法摸索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介:在使用zynq 运行Linux时,如何在Linux启动之后,再布署PL,本教程在参考了正点原子领航者ZYNQ之嵌入式Linux开发指南第二十章,开源平台创龙的部分教程,结合Xilinx wiki官方教程。初步实现了zynq在Linux启动之后再加载PL。纯属摸索实现,有什么描述不正确的地方或者有更好的方法可以留言。

一、前期准备

xilinx wiki 参考地址

Xilinx GitHub,源码下载

注:本次实验均在Ubuntu1804.1下完成,vivado,petalinux 版本都是2019.1。

下载生成设备树源码,用于PL和PS端设备树生成是使用。

zynq Linux 启动之后动态布署PL方法摸索

下载Linux内核源码,内核编译使用。

zynq Linux 启动之后动态布署PL方法摸索

注意源码版本要和你使用的vivado版本一致。

将下载的生成设备树源码和Linux内核源码解压到自定义文件夹。以下是本次实验的文件夹介绍。

zynq Linux 启动之后动态布署PL方法摸索

 本次实验,使用zynq7020,PL端实现软串口,PS启动Linux后,动态部署PL。

axi-uart-peta:petalinux工程文件夹。

axi-uart-vivado:vivado 工程文件夹。

devicetree-xlnx:下载的生成设备树源码解压到本文件夹下。

hdf:存放vivado工程生成的硬件hdf文件。

linux-kernel:下载的linux内核源码加压到此文件夹。

pl-devicetree:PL 端动态设备树文件。

SD:此文件夹放最终要部署在SD卡中的文件。

二、创建vivado工程

  1. 打开vivado, 选择好工程文件路径,芯片型号等。

  2. Create Block Design 本次修改"Design name" 为system。

  3. 添加zynq,axi uartlite(波特率可设置。默认9600), 连接框图,注意中断需要手动连接。FCLK_CLK0:100M。zynq PS 的配置,根据你使用的板子情况而定。QSPI flash, SD0, UART0/UART1,等。连接框图如下。                                         zynq Linux 启动之后动态布署PL方法摸索

  4. genertate output products

  5. create HDL Wrapper

  6. 添加xdc约束,配置uart lite 的TX和RX引脚。

  7. 生成bit

  8. 导出硬件文件。勾选包含bitstream。

zynq Linux 启动之后动态布署PL方法摸索

         将生成的hdf文件拷贝到hdf文件夹下。备用。 

zynq Linux 启动之后动态布署PL方法摸索

        9. 不要关闭vivado。在当前vivado工程下,生成(.bit)对应的(.bit.bin)文件.

下图对应的路径,是本教程生成(.bit)所在文件夹下。创建Full_Bitstream.bif文件,

zynq Linux 启动之后动态布署PL方法摸索

其中Full_Bitstream.bif内容如下:

zynq Linux 启动之后动态布署PL方法摸索  

注:使用(.bit)的完整路径。

在vivado的Tcl Console下输入生成(.bit.bin)的命令:

bootgen -image /home/guozd/zynq/axi-uart/axi-uart-vivado/axi-uart.runs/impl_1/Full_Bitstream.bif -arch zynq -process_bitstream bin

zynq Linux 启动之后动态布署PL方法摸索

 生成的(.bit.bin)文件如下如:

zynq Linux 启动之后动态布署PL方法摸索

 将(system_wrapper.bit.bin)拷贝到SD(自定义)文件夹下,待用。

 三、生成PL端动态设备树  等等再编译。

添加设备树源码。

在vivado中。file--> Launch SDK .

zynq Linux 启动之后动态布署PL方法摸索

 创建动态设备树bsp

zynq Linux 启动之后动态布署PL方法摸索

 详细设置

zynq Linux 启动之后动态布署PL方法摸索

 允许动态设备树布署。

zynq Linux 启动之后动态布署PL方法摸索

 生成的可动态布署的设备树文件(PL端),如下图

zynq Linux 启动之后动态布署PL方法摸索

 将生成的pl.dtsi文件拷贝到 pl-devicetree文件夹下。待用,等待编译完Linux内核,再编译设备树文件。

四、创建petalinux工程,生成BOOT.BIN文件。

zynq的启动,分为两部分ps和pl(如果使用了pl),ps的启动依赖(fsbl, uboot, dtb, kernel, rootfs), pl是(bit)。一般情况下,使用petalinux生成BOOT.BIN,其包含(fsbl, uboot, dtb)。本次将dtb(设备树)文件从BOOT.BIN中分离出来,在Linux启动后动态布署;

注:对于设备树作简单描述,ps端的基本配置使用设备树来描述,pl作为ps的外设,也是作为设备树中的一部分,本文动态布署的是pl这一部分。

使用petalinux生成BOOT.BIN基本步骤如下

//之前将vivado生成的hdf文件已经拷贝到本实验xx/zynq/axi-uart/hdf下
source /opt/pkg/petalinux/2019.1/setting.sh //根据你自己的情况
petalinux-create -t project --template zynq -n axi-uart-peta
cd axi-uart-peta
petalinux-config --get-hw-description ../hdf/

//进入配置界面

Subsystem AUTO Hardware Settings

Advanced bootable images storage Settings

dtb image settings
如下图

 zynq Linux 启动之后动态布署PL方法摸索

 zynq Linux 启动之后动态布署PL方法摸索

 zynq Linux 启动之后动态布署PL方法摸索

 主要目的是将设备树从BOOT.BIN 文件中分离出来,涉及到ps的配置的设备树单独编译,设计pl动态布署的设备树单独编译,单独布署(以上“三”生成的)。

再修改Linux启动打印log串口,我自己的开发板是uart0。

设置Root filesystem type (INITRAMFS) 为SD启动。

接下来save , exit。

//编译fsbl,uboot, 生成BOOT.BIN,命令如下。
petalinux-build -c bootloader
petalinux-build -c u-boot
petalinux-package --boot --fsbl --u-boot --force

生成结果如下。拷贝BOOT.BIN 到SD文件夹中。 

zynq Linux 启动之后动态布署PL方法摸索

 五、编译Linux kernel

下载的内核源码已经解压到本实验的linux-kernel文件夹中,可在前面项目文件夹介绍查看。编译步骤如下:

//编译内核源码为uImage
cd /home/guozd/zynq/axi-uart/linux-kernel/linux-xlnx-xilinx-v2019.1
source /tools/Xilinx/Vivado/2019.1/settings64.sh  //根据你vivado安装的情况选择
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig   //添加axi-uartlite官方驱动,下图
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x02080000 uImage -j16

添加axi-uartlite驱动:

Device Drivers --> Character devices -->Serial drivers --> Xilinx uartlite serial port support

zynq Linux 启动之后动态布署PL方法摸索

 注:

在Solution Zynq PL Programming With FPGA Manager文中,动态布署PL需要开启的配置已经默认开启。

zynq Linux 启动之后动态布署PL方法摸索

zynq Linux 启动之后动态布署PL方法摸索

 编译完成之后再一下路径将Linux内核文件uImage 拷贝到SD文件夹中。

linux-kernel/linux-xlnx-xilinx-v2019.1/arch/arm/boot/  uImage

编译完Linux内核之后,可以借助Linux内核文件中的dtc工具编译,编译ps和pl的设备树了。

六、编译设备树

1.编译涉及pl的设备树。

cd /home/guozd/zynq/axi-uart/pl-devicetree
/home/guozd/zynq/axi-uart/linux-kernel/linux-xlnx-xilinx-v2019.1/scripts/dtc/dtc -O dtb -o pl.dtbo -b 0 -@ pl.dtsi 

//编译完成后会在本文件夹下生成pl.dtbo 拷贝到SD文件夹中

2.编译ps端设备树

进入之前axi-uart-peta工程的指定目录下如下图

zynq Linux 启动之后动态布署PL方法摸索

 修改system-top.dts,

修改前:

zynq Linux 启动之后动态布署PL方法摸索

 修改后:(再本此文件下下翻翻,打开看看,有惊喜)

zynq Linux 启动之后动态布署PL方法摸索

 编译命令如下:

//编译命令
/home/guozd/zynq/axi-uart/linux-kernel/linux-xlnx-xilinx-v2019.1/scripts/dtc/dtc -O dtb -o system-top.dtb -b 0 -@ system-top.dts 

//将生成的system-top.dtb 改名为devicetree.dtb。 拷贝到SD文件中
//为什么不在生成时,名字设置为devicetree.dtb呢?可以自己尝试下。

此时SD文件夹中有如下那些文件呢?

zynq Linux 启动之后动态布署PL方法摸索

 其中将BOOT.BIN,devicetree.dtb,uImage拷贝到SD卡的BOOT分区;pl.dtbo,system_wrapper.bit.bin 拷贝到SD的文件系统下。

七、启动开发板

设置uboot环境

setenv bootcmd 'run $modeboot'
setenv bootdelay 2
setenv devicetree_image devicetree.dtb
setenv devicetree_load_address 0x2000000
setenv devicetree_size 0x20000
setenv kernel_image uImage
setenv kernel_load_address 0x2080000
setenv kernel_size 0x500000
setenv modeboot sdboot
setenv sdboot 'if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && load mmc 0 ${kernel_load_address} ${kernel_image} && load mmc 0 ${devicetree_load_address} ${devicetree_image} && bootm ${kernel_load_address} - ${devicetree_load_address}; fi'
 
saveenv
boot

注释:保存环境变量到QSPI flash中,万一你的开发板没有QSPIflash,那别保存了,直接boot。

没有flash,会将uboot环境变量保存到SD卡中,可私信,感谢。

启动Linux之后,接下来,动态布署PL

八、动态布署PL

借助官方文档,截了个图如下:

zynq Linux 启动之后动态布署PL方法摸索

 总之将先前拷贝到文件系统中的pl.dtbo,system_wrapper.bit.bin 拷贝到 在/lib/firmware下,没有就新建。使用上图 中步骤 1), 3)就可在/dev下看到ttyUL0设备。文章来源地址https://www.toymoban.com/news/detail-402945.html

到了这里,关于zynq Linux 启动之后动态布署PL方法摸索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • zynq pl访问ps ddr

    在 xilinx mpsoc 平台上进行 Linux 软件开发,不可避免的会涉及到 PS 与 PL 之间的数据交互。这个 系列 介绍一种 基于 DDR 的信息交互方式 。 这篇文章首先介绍下 如何从系统中“偷”内存 。 交互流程: PS 写入数据到 DDR 中,使用中断通知 PL,PL 从协商好的 DDR 中读取数据; PL 写

    2024年02月01日
    浏览(52)
  • ZYNQ——PL端流水灯的实现

    本文介绍的是在ZYNQ 7020黑金开发板上实现PL端流水灯的例子,开发板上PL端的LED灯总共有4个,在原理图中找到 PL LED 如下图所示,通过看图可知,给 LED 置低电平时灯才亮。 这里预想的实验结果是:在1秒钟内,4个LED各亮0.25秒,看起来就像流水灯一样。 LED:4个,赋值为0时即点

    2024年02月09日
    浏览(50)
  • zynq板上PS端给PL端复位

    最近接触zynq板-zcu104,记录一些实验笔记。 LED闪烁 在vivado中新建一个工程,命名为led-test。添加top.v文件。 其中,top模块接入zcu104开发板的clk_300_p/n信号,通过clock wizard转换为单端始终clock,接入到led闪烁模块led.v 其中,led模块通过一个24bit的计数器,经过相等间隔厚,让led灯

    2024年02月11日
    浏览(40)
  • 如何固化ZYNQ PL端程序到FLASH?

    FPGA程序固化说明 前言 本操作分享基于广州星嵌电子科技有限公司设计研发的Zynq7015平台。 FLASH型号 板载QSPI FLASH一颗,具体型号为:MT25QL256ABA1EW9-0SIT。 增加Block Design设计文件 首先,打开已经完成的Vivado设计例程,点击Project Manager下面的IP Integrator - Create Block Design,创建Bloc

    2024年02月08日
    浏览(44)
  • ZYNQ7000 PL与PS交互(一): PL到PS中断的使用与实现

    翻译以xilinx用户手册ug585,知道ZYNQ7000有几类中断即可。 PS基于ARM架构,使用了两个Cortex-A9处理器和GIC PL390中断控制器。中断结构与CPU密切相关,并接收来自IO外设和可编程单元PL的中断请求。 本章主要信息: 私有、共享和软件中断。 GIC功能介绍 中断优先级和处理 1.1.1 Zynq 中

    2024年04月15日
    浏览(53)
  • ZYNQ7045从flash启动linux

    自行安装linux版本的vivado,和xilinx开发环境。linux版本我选择的是Ubuntu18.04,ubuntu系统下xilinx开发环境我安装的是vivado 2018.3(安装时候要记得勾选SDK),安装好vivado后也就包含了xilinx的ARM部分交叉编译器。 petalinux 并不是一个特殊 Linux 内核,而是一套开发环境配置的工具,降低 ubo

    2023年04月12日
    浏览(33)
  • zynq的PL向PS提供时钟和复位

    最近买了一块矿卡蚂蚁T9+,它的资源比EBAZ4205丰富。 需要矿卡资料包的朋友可以从这下载。里面包含蚂蚁T9+和EBAZ4205原理图和几个EBAZ4205例程,还有一些相关的pdf文档。 link 首先从fpga学起,可惜PL没有焊晶振,只好从PS端引,下面以点灯为例。 打开vivado,工具栏file -- project -

    2024年02月15日
    浏览(48)
  • zynq7000学习(1)——vivado环境下PL配置

    一、新建工程:       现开发板型号为xc7z100ffg900-2  选择芯片 (选择芯片7100的话,就输入xc7z100  后面的-1和-2是速度等级), 更改项目名为system 。 Create Block Design (创建模块化的设计)——设置设计名称为system。     这时会出现design窗口和source窗口、画布窗口,source中出

    2024年02月13日
    浏览(58)
  • FPGA - ZYNQ 基于EMIO的PS和PL交互

    Xilinx ZYNQ 系列的芯片,GPIO分为 MIO 、 EMIO 、 AXI_GPIO 三种方式。 MIO    :固定管脚,属于PS端,也就是ARM端。 EMIO   :通过PL扩展,使用时需要分配 PL ( FPGA ) 管脚,消耗PL端资源。 AXI_GPIO :封装好的IP核,PS通过M_AXI总线可以控制PL的IO接口,使用时,消耗管脚资源和逻辑资源。

    2024年04月26日
    浏览(37)
  • ZYNQ学习笔记(四):PL与PS数据交互——基于BRAM IP 核的(PS端读写+PL端读)控制实验

    说起PS、PL数据交互,常见的有IO方式:MIO EMIO GPIO,还有利用BRAM或FIFO等,在上一篇文章ZYNQ学习笔记(三):PL与PS数据交互—— UART串口+AXI GPIO控制DDS IP核输出实验咱们学会了如何利用AXI GPIO IP核来实现PS(写)与PL(读)的数据交互,那么这篇文章来学习如何使用BRAM~ 本次实验

    2024年02月05日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包