我需要找到一种方法来轻松触发DMA操作,以便于硬件调试。是否可以通过直接写入其寄存器来在我的Linux中初始化现有PCI设备(例如声卡或网卡)上的DMA read
?或者我是否必须编写自定义驱动程序并通过insmod
调用它?
答案 0 :(得分:3)
没有标准的方法来启动DMA操作。通常,您需要在主机上准备DMA缓冲区并在设备上设置DMA寄存器,加载DMA地址,大小等。
但是,PCI设备的DMA寄存器没有单一标准。 您需要找到PCI设备的规范文档。在该规范中,查找DMA章节(这也称为PCI“主访问”而不是“目标访问”)。
你会在那里找到: - 如果支持分散 - 聚集或连续DMA。 - 如何设置DMA寄存器,其中一个通常称为DMA CSR - “DMA命令/状态寄存器”。 - 如果设备支持复杂的DMA布局(一个或多个环形缓冲区,DMA描述符链等)
但好处是许多PCI设备支持0大小的DMA。 哪个不进行任何内存访问,只是触发“DMA完成”中断。这可能是一个非常方便的起点。