0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

zynq linux AXI DMA传输步骤教程详解

Hx 作者:工程师陈翠 2018-07-08 05:46 次阅读

使用的工具为vivado2016.4,sdk也是2016.4.

准备工作:

首先下载如下的目标文件:

1.下载xilinx官方的bootloader文件

$ git clone https://github.com/Xilinx/u-boot-xlnx.git boot_loader-generator

2.下载xilinx device tree生成工具

git clone https://github.com/Xilinx/device-tree-xlnx.git device_tree-generator

3.下载dtc编译工具

git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git dtc

4.下载linux kernel

git clone https://github.com/Xilinx/linux-xlnx.git linux_kernel-sources

5.下载root file system

$ git clone git://git.buildroot.net/buildroot file_system

6.拷贝用户空间AXIDMA测试程序

git clone https://github.com/bperez77/xilinx_axidma

PL端

1.创建PL端工程

这里给一张图,按图在vivado里设置该工程,(我用的是zedboard)

zynq linux AXI DMA传输步骤教程详解

2.创建设备树

a)在生成bit文件并export后的vivado工程中,选择file--》launch sdk---》点击ok

zynq linux AXI DMA传输步骤教程详解

b)在菜单栏中选择Xilinx Tools --》 Repositories

c)在弹窗中选择New,并添加在第一小节中下载的device tree,如下图所示。

zynq linux AXI DMA传输步骤教程详解

d)接下来创建BSP

选择File--》New--》Board Support Package,在Board Support Package框中选择 device tree,然后点击Finish。在跳出的窗口中选择bootargs,并填入如下:

console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootfstype=ext4 earlyprintk rootwait

zynq linux AXI DMA传输步骤教程详解

zynq linux AXI DMA传输步骤教程详解

完成后会多出如下内容:

zynq linux AXI DMA传输步骤教程详解

生成的设备树位于axidma_user/axidma_user.sdk/device_tree_bsp_0:

其中pl.dtsi是PL侧设备树信息,正确的工程生成的设备树如下:

/*

* CAUTION: This file is automatically generated by Xilinx.

* Version:

* Today is: Sun Apr 2 18:20:15 2017

*/

/ {

amba_pl: amba_pl {

#address-cells = 《1》;

#size-cells = 《1》;

compatible = “simple-bus”;

ranges ;

axi_dma_0: dma@40400000 {

#dma-cells = 《1》;

clock-names = “s_axi_lite_aclk”, “m_axi_sg_aclk”, “m_axi_mm2s_aclk”, “m_axi_s2mm_aclk”;

clocks = 《&clkc 15》, 《&clkc 15》, 《&clkc 15》, 《&clkc 15》;

compatible = “xlnx,axi-dma-1.00.a”;

interrupt-parent = 《&intc》;

interrupts = 《0 29 4 0 30 4》;

reg = 《0x40400000 0x10000》;

xlnx,addrwidth = 《0x20》;

dma-channel@40400000 {

compatible = “xlnx,axi-dma-mm2s-channel”;

dma-channels = 《0x1》;

interrupts = 《0 29 4》;

xlnx,datawidth = 《0x20》;

xlnx,device-id = 《0x0》;

};

dma-channel@40400030 {

compatible = “xlnx,axi-dma-s2mm-channel”;

dma-channels = 《0x1》;

interrupts = 《0 30 4》;

xlnx,datawidth = 《0x20》;

xlnx,device-id = 《0x0》;

};

};

axi_gpio_0: gpio@41200000 {

#gpio-cells = 《2》;

compatible = “xlnx,xps-gpio-1.00.a”;

gpio-controller ;

reg = 《0x41200000 0x10000》;

xlnx,all-inputs = 《0x0》;

xlnx,all-inputs-2 = 《0x0》;

xlnx,all-outputs = 《0x1》;

xlnx,all-outputs-2 = 《0x0》;

xlnx,dout-default = 《0x00000000》;

xlnx,dout-default-2 = 《0x00000000》;

xlnx,gpio-width = 《0x8》;

xlnx,gpio2-width = 《0x20》;

xlnx,interrupt-present = 《0x0》;

xlnx,is-dual = 《0x0》;

xlnx,tri-default = 《0xFFFFFFFF》;

xlnx,tri-default-2 = 《0xFFFFFFFF》;

};

};

};

生成FSBL

依然是刚刚打开的skd中。

a)File-》New-》Application Project.注意:按如下方式核对一下。无误后点击finish。

zynq linux AXI DMA传输步骤教程详解

b)在Project explorer中右键FSBL,然后选择Bulid Configuration项,然后选择Set Active -》Release。再一次右键FSBL,然后选择Clean Project,然后在邮件FSBL,然后选择Build Project。

如果顺利console窗口的输出如下:

zynq linux AXI DMA传输步骤教程详解

其所在目录和device tree在统一个目录下:

编译u-boot

按如下方式修改u-boot,使用SD上的文件系统而非ramdisk文件系统

zynq linux AXI DMA传输步骤教程详解

导出xilinx路径:

export PATH=/opt/Xilinx/SDK/2016.4/gnu/arm/lin/bin:$PATH

export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

然后编译

gsc@gsc-250:~/zynq7000/ZedBoard/resources/boot_loader/boot_loader-generator$ make distclean

gsc@gsc-250:~/zynq7000/ZedBoard/resources/boot_loader/boot_loader-generator$ make zynq_zed_config

编译完成以后,u-boot跟目录变成:

我们需要图中绿色的u-boot文件,这里将其重命名成u-boot.elf。下一小节将使用它。

生成二进制文件

依然是SDK里。选择Xilinx Tools-》Create Boot Image,切记相关配置。

zynq linux AXI DMA传输步骤教程详解

其中-boot.elf,FSBL.elf以及bit文件是前面生成的。

最终将在output path下指定的路径里将生成Boot.bin文件供后面使用。至此可以退出SDK。

编译linux

导出xilinx路径:

export PATH=/opt/Xilinx/SDK/2016.4/gnu/arm/lin/bin:$PATH

export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

配置linux

$ make distclean

$make ARCH=arm xilinx_zynq_defconfig

$ make ARCH=arm menuconfig

$ export PATH=/home/gsc/zynq7000/ZedBoard/projects/boot_loader/tools/:$PATH(这个是前面编译生成uboot下的tools路径)

$make ARCH=arm UIAMGE_LOADDR=0x8000 uImage

这里需要配置linux,具体来说就是去掉ramdisk的支持,并且开启代码的支持。

zynq linux AXI DMA传输步骤教程详解

文件太长不单独列出,有需要,下载地址:

编译完成后

生成linux加载使用的设备树

如果没错,则生成的设备树在如下目录:

使使用如下命令生成设备树

gsc@gsc-250:~/zynq7000/ZedBoard/projects/linux_kernel/scripts/dtc$ dtc -O dtb -I dts -o devicetree.dtb /home/gsc/zynq7000/ZedBoard/projects/hardware_design/axidma_user/axidma_user.sdk/device_tree_bsp_0/system.dts

生成文件系统

导出xilinx路径:

export PATH=/opt/Xilinx/SDK/2016.4/gnu/arm/lin/bin:$PATH

export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

make xconfig

make

整个编译过程会根据配置先下载相关工具,然后进行编译。

zynq linux AXI DMA传输步骤教程详解

在生成的目录中

file_system/output/images/rootfs.ext4

编译DMA测试程序:

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm KBUILD_DIR= driver

拷贝到SD中

1.拷贝跟文件系统到ext4分区:

sudo mount -t ext4 -o loop XXX/rootfs.ext4 /mnt

sudo cp -rf /mnt/* ${Where you mount SD card}

sudo umount -l /mnt

将生成的DMA测试程序拷贝到SD卡的/media目录下

2.拷贝系统镜像到FAT分区

boot.bin

devicetree.dtb

uIamge

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    99019
  • Zynq
    +关注

    关注

    9

    文章

    600

    浏览量

    46620
收藏 人收藏

    评论

    相关推荐

    Xilinx zynq AXI总线全面解读

    4 版本。 AXI总线 ZYNQ有三种AXI总线: (A)AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地
    的头像 发表于 12-04 12:22 6296次阅读
     Xilinx <b class='flag-5'>zynq</b> <b class='flag-5'>AXI</b>总线全面解读

    ZYNQ跑系统系列开发:AXI-DMAlinux驱动案例

    一、搭建硬件环境 vivado版本2017.4,芯片为7010,不过不管什么版本和芯片大致步骤是一样的 本文工程文件: https://gitee.com/long_fly/AXIDMA_linux
    的头像 发表于 01-02 09:11 8006次阅读
    <b class='flag-5'>ZYNQ</b>跑系统系列开发:<b class='flag-5'>AXI-DMA</b>的<b class='flag-5'>linux</b>驱动案例

    ZYNQ SOC案例开发:AXI DMA使用解析及环路测试

    一、AXI DMA介绍 本篇博文讲述AXI DMA的一些使用总结,硬件IP子系统搭建与SDK C代码封装参考米联客ZYNQ教程。若想让
    的头像 发表于 12-31 09:52 7293次阅读
    <b class='flag-5'>ZYNQ</b> SOC案例开发:<b class='flag-5'>AXI</b> <b class='flag-5'>DMA</b>使用解析及环路测试

    如何在ZedBoard中使用AXI DMA核心

    你好最近我一直在研究如何在ZedBoard中使用AXI_DMA核心。我正在使用s2mm通道以分散聚集模式将数据传输到DRAM。框图如下图所示(基于Mohammadsadegh Sadri Zynq
    发表于 04-09 11:53

    怎么使用AXI CDMA从OCM/DDR写入BRAM

    可以从Zynq上运行的Linux控制的额外IP。我要做的就是将一些配置数据写入PL中的BRAM。要做到这一点,根据我在其他地方得到的建议,我提出了一个axi_cdma。所以CDMA有一个
    发表于 04-19 07:50

    zynq7020板子+ad采集+dma传输问题?

    求助各位大神,我用的是ad7606采集数据,然后通过dma传输到arm核中,用的板子时zynq7020,但是一直出现一个问题,[BD 41-237] Bus Interface property
    发表于 06-17 16:51

    ZYNQ PSPL DMA传输怎么使用?

    我在AXI lite上设计了一个带有32个寄存器的简单PL,并希望使用集成的DMA在PL和PS之间进行数据传输。是否有关于此方案的任何文档或教程?有人可以告诉我必要的步骤吗?从我到目前
    发表于 03-06 10:19

    ZYNQ中不同应用的DMA总结

    不同类型的DMAHigh performance w/DMA几种DMA的总结ZYNQ中不同应用的DMA几个常用的 AXI 接口 IP 的功能
    发表于 03-31 11:39

    AXI接口协议详解

    1、AXI接口协议详解  AXI 总线  上面介绍了AMBA总线中的两种,下面看下我们的主角—AXI,在ZYNQ中有支持三种
    发表于 10-14 15:31

    Adam Taylor玩转MicroZed系列67:AXI DMA II

    上周的博客中我们学习了Zynq SoC的AXI DMA,我解释了怎样利用AXI DMA控制器将数据从PL搬运到PS。在本期博客中我们将学习怎
    发表于 02-08 08:10 306次阅读

    一文详解ZYNQ中的DMAAXI4总线

    ZYNQ中,支持AXI-Lite,AXI4和AXI-Stream三种总线,但PS与PL之间的接口却只支持前两种,AXI-Stream只能在
    的头像 发表于 09-24 09:50 4404次阅读
    一文<b class='flag-5'>详解</b><b class='flag-5'>ZYNQ</b>中的<b class='flag-5'>DMA</b>与<b class='flag-5'>AXI</b>4总线

    如何创建AXI CDMA Linux用户空间示例应用

    本篇博文将为您演示如何创建 AXI CDMA Linux 用户空间示例应用。 示例设计将在 Zynq UltraScale+ RFSoC ZCU111 评估板上实现通过 AXI CDM
    的头像 发表于 09-28 15:31 2307次阅读
    如何创建<b class='flag-5'>AXI</b> CDMA <b class='flag-5'>Linux</b>用户空间示例应用

    你必须了解的AXI总线详解

    DMA的总结 ZYNQ中不同应用的DMA 几个常用的 AXI 接口 IP 的功能(上面已经提到): AXI-DMA:实现从 PS 内存到 P
    的头像 发表于 10-09 18:05 6573次阅读
    你必须了解的<b class='flag-5'>AXI</b>总线<b class='flag-5'>详解</b>

    ZYNQDMAAXI4总线

    ZYNQDMAAXI4总线 为什么在ZYNQDMAAXI联系这么密切?通过上面的介绍我们
    的头像 发表于 11-02 11:27 3937次阅读
    <b class='flag-5'>ZYNQ</b>中<b class='flag-5'>DMA</b>与<b class='flag-5'>AXI</b>4总线

    浅析AXI DMA收发数据传输过程

    MAIP的M_AXI_MM2S接口接收到数据完成后通过mm2s_introut接口输出高电平告诉PS端DMA接收数据传输完成,PS端开始执行发送中断程序。
    发表于 10-11 15:16 1950次阅读