[问题] DMA driver相关问题

楼主: uniquelegend (back7590)   2022-02-24 15:56:08
最近突然需要实现用dma与fpga沟通,
但由于一直以来都没有碰有关driver的东西,
而且有时间压力,
所以一直都是在网络上瞎找资料。
(因为真的没有按部就班的从基础学起,
所以可能会有非常严重的概念错误,
请各位见谅。)
想请问一些观念问题或有没有推荐的书?
1.
像是使用持续性(coherent)的DMA是在挂载driver时就将配置buffer的部分写在driver中了;
那如果是streaming这种,既然是每次动作时重新map,那是不是配置buffer的部分就是直接写在软件动作里?
2.
(这问题不知道会不会错版)
fpga的部分等软件分配完buffer后,将总线地址传给fpga。
照着TLP格式来放入此地址,并将TLP丢给RQ/RC通道,
就会自动判定成DMA请求并执行吗?
(因为部分原因,所以pcie ip的部分没有使用官方含有dma的ip,而是使用最基础的Ultrasc
目前只是要将fpga内的资料在软件请求时,透过dma写入主机。
但因为相关概念真的非常不足,
也没有人可以询问,所以可能很多观念有严重错误,烦请大家不吝指教。
作者: breeze08 (linuxer)   2022-02-25 00:03:00
我不是driver的专家,虽然不能给你什么建议,但在你问题的描述上想探讨厘清一下,更清楚的描述或许有助于其他人帮助你。以下是我对问题的理解,目前看起来是你有一台x86主机,主机上有一套软件要透过PCIe接口来跟FPGA沟通,而你想使用DMA的方式来实现,到这部分我的理解对吗?假如这部分理解没错,再来会有几个延伸问题,这个FPGA的供应商有提供基本的驱动给你吗?还是你要自己从从无到有?如果从无到有的话工程量可能颇巨大,就我的理解来说你需要先阅读那块FGPA的Spec知道如何操作那块FPGA,再来是根据Spec来撰写主机上的PCIe驱动来实现跟FPGA基本的沟通,然后以此为基础调整成以DMA的方式传送。还是说你已经有厂商给的基本驱动只是要调整成DMA的方式?另外根据你最后提到的透过DMA传给主机这句话来看,我有疑惑的是你这块FPGA的角色是主动式还是被动式?他会主动给PC讯号还是PC给讯号后才会动?这块FPGA上的程式是你撰写的吗?还是厂商提供的?你有需要去调整这上面的程式码吗?还是程式码是已经固化的?
楼主: uniquelegend (back7590)   2022-02-25 00:32:00
作者: breeze08 (linuxer)   2022-02-25 00:40:00
这边在厘清一下你想实现的DMA部份,指的是FPGA那一侧还是指主机那一侧?还是两侧都要?关于主机的PCIe驱动撰写,参考书籍可以看看Linux Device Driver 3/e 或是平田丰的 Linux Device Driver Programming这两本也有关于DMA的章节话说硕班一个人做这个感觉是有点惨,如果真的没有人可以帮的话可能就要考虑descent大说的外包了啊 抱歉 我看到你是要实现FPGA上的DMA了,但如果是要实现FPGA上的DMA可能就不属于Linux driver的范畴了,而是属于积体电路设计的部分
楼主: uniquelegend (back7590)   2022-02-27 00:52:00
了解!太感谢您的帮忙了!

Links booklink

Contact Us: admin [ a t ] ucptt.com