从Linux内核空间到PCIe卡的DMA

时间:2013-07-05 19:50:02

标签: linux-kernel linux-device-driver dma pci pci-e

我正在尝试为PCIe设备编写一个Linux驱动程序--Adlink PCIe 7300A高速数字IO卡。

驱动程序适用于正常的内存传输,但尝试使用卡的总线主控功能来启动缓冲区从CPU内存到设备输出FIFO缓冲区的DMA传输根本不起作用。

我一直试图在几周的时间内解决这个问题,而不是几天。

任何见解都真的非常值得赞赏。

驱动程序代码 - https://github.com/sbrookes/timing_driver_sdarn/blob/master/kernel_land/timing.c

设备数据表 - http://www.acceed.com/manuals/adlink/P7300A%20Manual.PDF

PLX 9080 PCI接口芯片数据表 - http://www.der-ingo.de/bin/milanhelp/PLX9080.pdf

我无法解释我会多么欣赏任何洞察力。

谢谢,

斯科特

1 个答案:

答案 0 :(得分:2)

我似乎已经解决了这个问题。看起来中断处理程序中的错误条件是在错误的时间中止DMA传输,从不让转移开始。

一个严肃的“呃”时刻,但是找到它需要认真的努力。

根据评论,抱歉,如果我绝望地污染了SO。还在学习如何成为一个好公民。

不确定上面链接的代码是否会在我的项目更改时保持静态,或者该链接是否会反映最新版本。基本上要注意不要在错误的时间中止你的转移。