首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Petalinux中访问XDMA BAR0?

如何在Petalinux中访问XDMA BAR0?
EN

Stack Overflow用户
提问于 2022-04-04 12:52:38
回答 1查看 213关注 0票数 1

我有一个块设计和硬件配置的Zynq处理器运行Petalinux。此外,我还将XDMA IP配置为内存映射端点。我已经在PCI BAR0选项卡中配置了BAR0和BAR2。

我试图为petalinux编写一个简单的程序/应用程序,在BAR0中设置正确的配置值,供主机读取。然而,我不知道BAR0在哪里,也不知道如何给它写信。如何在Petalinux中找到指向BAR0的指针?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-22 13:42:57

导出.xsa文件时,您将在PS的寄存器空间中定义BAR0地址。此外,还可以对设备树进行反编译,以检查xilinx是否具有正确的条形寄存器:

代码语言:javascript
复制
./build/tmp/work/..../usr/bin/dtc -I dtb -O dts images/linux/system.dtb  > system.dts

vi system.dts

在这里,您应该可以找到类似的内容(为了清楚起见,我省略了一些字段):

代码语言:javascript
复制
                axi-pcie@B0200000{
                        #address-cells = <0x03>;
                        #interrupt-cells = <0x01>;
                        #size-cells = <0x02>;
                        compatible = "xlnx,xdma-host-3.00";
                        device_type = "pci";
                        interrupt-names = "misc\0msi0\0msi1";
                        ranges = <0x2000000 0x00 0xb0200000 0x00 0xb0200000 0x00 0x100000>;
                        reg = <0x05 0x00 0x00 0x20000000>;
                        phandle = <0xab>;

重要信息在ranges属性中。该信息在引导时由linux解析,以了解BAR0在哪里。

我们还知道驱动程序将是驱动PCI低层通信(来源)的xdma-host-3.00,检查链接是否已打开并处理MSI中断。

从这里开始,您有无数的机会,取决于您已经连接到PCIe总线的设备。例如,如果有NVMe磁盘,NVMe的Xilinx驱动程序将使用PCIe驱动程序与端点对话。

但是,如果希望访问特定或自定义端点的条形寄存器,可以使用pci_uio_generic驱动程序,该驱动程序将PCIe资源映射到一般用户空间IO设备上。

这里DPDK库中有一些文档。

但是,基本思想是,一旦将驱动程序绑定到PCIe设备,您将在

/sys/class/uio/uio<dev_num>/device/resource0

如果您mmap这样的资源,您将有一个虚拟内存地址直接指向您的PCIe设备的BAR0。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71737576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档