Xilinx XDMA驱动代码分析及用法

Xilinx XDMA驱动代码分析及用法

先简单的介绍一下,赛灵思的XDMA的驱动是用于做什么的、他的主要功能就类似与网卡pcie接口的网卡驱动、用于控制主机与fpga设备进行pcie的通讯。通讯的主要方式是设备文件的读写,这里不清楚的同学可以看一下我上一篇文章。通过控制设备文件的读写,操作驱动与fpga设备进行数据传输。

1、目录结构

zacha@Superman:~/nfs/xdma-debug/dma_ip_drivers-master/XDMA/linux-kernel$ tree -C
.
├── COPYING
├── include
│   └── libxdma_api.h
├── LICENSE
├── readme.txt
├── RELEASE
├── tests
│   ├── data
│   │   ├── datafile0_4K.bin
│   │   ├── datafile1_4K.bin
│   │   ├── datafile2_4K.bin
│   │   ├── datafile_256K.bin
│   │   ├── datafile_32M.bin
│   │   ├── datafile3_4K.bin
│   │   └── datafile_8K.bin
│   ├── dma_memory_mapped_test.sh
│   ├── dma_streaming_test.sh
│   ├── load_driver.sh
│   ├── perform_hwcount.sh
│   └── run_test.sh
├── tools
│   ├── \001
│   ├── dma_from_device.c
│   ├── dma_to_device.c
│   ├── dma_utils.c
│   ├── Makefile
│   ├── performance.c
│   ├── perform_hwcount.sh
│   └── reg_rw.c
└── xdma
    ├── cdev_bypass.c
    ├── cdev_ctrl.c
    ├── cdev_ctrl.h
    ├── cdev_events.c
    ├── cdev_sgdma.c
    ├── cdev_sgdma.h
    ├── cdev_xvc.c
    ├── cdev_xvc.h
    ├── libxdma.c
    ├── libxdma.h
    ├── Makefile
    ├── version.h
    ├── xdma_cdev.c
    ├── xdma_cdev.h
    ├── xdma_mod.c
    ├── xdma_mod.h
    ├── xdma_thread.c
    └── xdma_thread.h

5 directories, 43 files
zacha@Superman:~/nfs/xdma-debug/dma_ip_drivers-master/XDMA/linux-kernel$ 

Xilinx 官方的XDMA驱动的目录结构大致如上图所示,大致就是:xdma(驱动代码)、tools(测试工具)、tests(自动化测试脚本)、include(对外头文件)。

今天重点分析驱动的代码部分,也会简单的介绍一些测试文件代码的基本用法。

1.1 tests/tools

tools中的文件就是用于测试驱动mem读写、寄存器读写、等的工具。 tests中的文件 就是自动化运行脚本,分为两种测试方法,第一种是mem mapped 方式,第二种事streamming的方式,两种模式的区别在于DMA以及FPGA的传输方式不同。

1.2 xdma

xdma就是驱动部分的代码,我们先看一下驱动安装成功后,所生成的设备文件,然后对应设备文件去看驱动代码每部分的功能和控制逻辑。

2、驱动的文件与生成的设备

2.1

我们先看xdma_mod.c这个文件, 这个文件主要的功能,这部分代码的主要功能是驱动代码的整体控制入口,我们知道,整个驱动的通讯都是基于PCI协议进行通讯的,所有的总线协议在Linux下都是需要进行总线上设备注册的,所以这个代码主要的功能,就是进行pci总线初始化和注册、然后再 在总线上注册各个字符设备。

static struct pci_driver pci_driver = {
   
	.name = DRV_MODULE_NAME,
	.id_table = pci_ids,
	.probe = probe_one,							/*设备总线上的字符设备注册入口*/
	.remove = remove_one,
	.err_handler = &xdma_err_handler,
};

static int xdma_mod_init(void)
{
   
	int rv;

	pr_info("%s", version);

	if (desc_blen_max > XDMA_DESC_BLEN_MAX)
		desc_blen_max = XDMA_DESC_BLEN_MAX;
	pr_info("desc_blen_max: 0x%x/%u, timeout: h2c %u c2h %u sec.\n",
		desc_blen_max, desc_blen_max, h2c_timeout, c2h_timeout);

	rv = xdma_cdev_init();
	if (rv < 0)
		return rv;

	return pci_register_driver
  • 50
    点赞
  • 268
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 126
    评论
在Windows上对Xilinx XDMA驱动进行测试,我们可以遵循以下步骤: 1. 下载和安装Xilinx XDMA驱动:首先,我们需要从Xilinx官方网站上下载和安装适用于我们目标设备的XDMA驱动程序。确保选择与您所使用的设备和操作系统版本兼容的驱动程序。 2. 配置硬件设置:安装驱动后,我们需要连接Xilinx XDMA适配器到计算机,并确保设备正常工作。这涉及到检查硬件连接、配置适配器、设置中断线路等等,确保所有配置都正确完成。 3. 编译和运行示例代码Xilinx提供了许多示例代码,可以帮助我们了解如何使用XDMA驱动进行数据传输。我们可以选择一个适合我们测试需求的示例代码,按照指导进行编译和运行。 4. 测试功能:使用示例代码可以测试Xilinx XDMA驱动在数据传输方面的功能。检查数据传输的性能和稳定性,确保数据可以准确地从主机计算机传输到外设设备,以及从外设设备传输回主机。 5. 调试和故障排除:在测试过程中,可能会遇到一些问题。如果出现错误或其他异常情况,我们需要根据错误日志或调试工具进行故障排除。这可能涉及检查配置文件、调整驱动设置、查看硬件状态等等。 6. 进行性能测试:对Xilinx XDMA驱动进行性能测试是很重要的。我们可以使用不同大小和类型的数据进行测试,评估数据传输速度和延迟。这有助于确定驱动的性能瓶颈以及是否满足我们的需求。 7. 编写自己的应用程序:一旦我们确认Xilinx XDMA驱动正常工作并满足我们的需求,我们可以开始编写自己的应用程序。这可以是一个数据采集应用程序、实时数据处理应用程序等等,根据我们的具体应用场景进行开发。 总结起来,测试Xilinx XDMA驱动需要下载和安装驱动、配置硬件设置、编译和运行示例代码、测试功能、调试和故障排除、性能测试以及编写自己的应用程序。
评论 126
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的蕉尼基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值