推 breeze08: 我不是driver的專家,雖然不能給你什麼建議,但在你問 02/25 00:03
→ breeze08: 題的描述上想探討釐清一下,更清楚的描述或許有助於其 02/25 00:03
→ breeze08: 他人幫助你。以下是我對問題的理解,目前看起來是你有 02/25 00:03
→ breeze08: 一台x86主機,主機上有一套軟體要透過PCIe介面來跟FPGA 02/25 00:03
→ breeze08: 溝通,而你想使用DMA的方式來實現,到這部分我的理解對 02/25 00:03
→ breeze08: 嗎?假如這部分理解沒錯,再來會有幾個延伸問題,這個F 02/25 00:03
→ breeze08: PGA的供應商有提供基本的驅動給你嗎?還是你要自己從從 02/25 00:03
→ breeze08: 無到有?如果從無到有的話工程量可能頗巨大,就我的理 02/25 00:04
→ breeze08: 解來說你需要先閱讀那塊FGPA的Spec知道如何操作那塊FPG 02/25 00:04
→ breeze08: A,再來是根據Spec來撰寫主機上的PCIe驅動來實現跟FPGA 02/25 00:04
→ breeze08: 基本的溝通,然後以此為基礎調整成以DMA的方式傳送。還 02/25 00:04
→ breeze08: 是說你已經有廠商給的基本驅動只是要調整成DMA的方式? 02/25 00:04
→ breeze08: 另外根據你最後提到的透過DMA傳給主機這句話來看,我有 02/25 00:04
→ breeze08: 疑惑的是你這塊FPGA的角色是主動式還是被動式?他會主 02/25 00:04
→ breeze08: 動給PC訊號還是PC給訊號後才會動?這塊FPGA上的程式是 02/25 00:04
→ breeze08: 你撰寫的嗎?還是廠商提供的?你有需要去調整這上面的 02/25 00:04
→ breeze08: 程式碼嗎?還是程式碼是已經固化的? 02/25 00:05
不好意思!因為怕手機排版不好看,所以用截圖回覆! 非常謝謝您的幫助
※ 編輯: uniquelegend (36.230.25.93 臺灣), 02/25/2022 00:33:34
→ breeze08: 這邊在釐清一下你想實現的DMA部份,指的是FPGA那一側還 02/25 00:40
→ breeze08: 是指主機那一側?還是兩側都要? 02/25 00:40
→ breeze08: 關於主機的PCIe驅動撰寫,參考書籍可以看看Linux Devic 02/25 00:44
→ breeze08: e Driver 3/e 或是平田豐的 Linux Device Driver Progr 02/25 00:44
→ breeze08: amming 02/25 00:44
→ breeze08: 這兩本也有關於DMA的章節 02/25 00:46
→ breeze08: 話說碩班一個人做這個感覺是有點慘,如果真的沒有人可 02/25 00:54
→ breeze08: 以幫的話可能就要考慮descent大說的外包了 02/25 00:54
→ breeze08: 啊 抱歉 我看到你是要實現FPGA上的DMA了,但如果是要實 02/25 01:03
→ breeze08: 現FPGA上的DMA可能就不屬於Linux driver的範疇了,而是 02/25 01:03
→ breeze08: 屬於積體電路設計的部分 02/25 01:03
不好意思!我可能沒有表達清楚。 是兩邊都需要的,驅動/fpga/軟體都需要實現。目前打算先新增完驅動的部分,再來進一步測試硬體到底該如何實現 因為目前我可能觀念有點模糊,所以不確定像這種streaming dma的buffer配置到底應不應該在驅動裡實現? 因為在網路上查到的介紹看起來是在「每次執行讀寫動作時,重新配置。」 感覺這個動作(每次執行)比較偏向軟體的部分而不是驅動。 我想確認我這個判斷方式是否有誤? 因為目前看到的範例都是比較簡短的小例子,我不大會分辨該在哪部分實現他才是對的。 謝謝您的回答
※ 編輯: uniquelegend (36.230.25.93 臺灣), 02/25/2022 02:09:20
→ breeze08: 關於buffer該放在哪,以我粗淺的認知,放在用戶態(也就 02/25 15:40
→ breeze08: 是你的軟體)的效能會比較好,因為假如buffer放在驅動中 02/25 15:40
→ breeze08: (內核態),你的軟體還需要進行系統呼叫才能讀取,這步 02/25 15:40
→ breeze08: 驟就多了一份overhead。那所謂的buffer放在用戶態,其 02/25 15:40
→ breeze08: 具體實現也是透過驅動來達成的,通常是透過驅動中實現m 02/25 15:41
→ breeze08: map這個file operation來把內核態的空間映射至用戶態。 02/25 15:41
→ uniquelegend: 了解!太感謝您的幫忙了! 02/27 00:52