[問題] 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