簡體   English   中英

Linux PCIe DMA驅動程序

[英]Linux PCIe DMA driver

我目前正在為PCIe設備編寫驅動程序,該設備應使用DMA將數據發送到Linux系統。 據我了解,我的PCIe設備需要DMA控制器(DMA主設備)和Linux系統(DMA從設備)。 當前,PCIe設備沒有DMA控制器,因此不應獲得一個。 這讓我感到困惑。

答:以下可能嗎?

  1. PCIe設備發送中斷
  2. 等待Linux驅動程序中的中斷
  3. 開始從內存映射的PCIe寄存器到Linux系統DMA的DMA傳輸。
  4. 從用戶空間中的內存中讀取數據

我為此設置了所有東西,我唯一想念的是如何將數據從PCIe寄存器傳輸到內存。

B.要進行DMA傳輸,我需要調用哪個(或一系列)系統調用?

C.我可能需要在Linux系統上設置DMA,但是我發現指向假定有從屬的代碼,例如struct dma_slave_config。

用例是從PCIe設備收集數據並將其在內存中提供給用戶空間。

任何幫助深表感謝。 提前致謝!

根據定義,DMA完全獨立於CPU及其上運行的任何軟件(即OS內核)。 DMA是設備在不涉及主機CPU的情況下對主機存儲器執行存儲器讀寫的一種方式。

DMA通常的工作方式是這樣的:軟件將在內存中分配DMA可訪問區域並與設備共享物理地址,例如,通過對與設備BAR之一關聯的地址空間執行內存寫操作。 然后,設備將對該內存塊執行DMA讀取或寫入操作。 該操作完成后,設備將向設備驅動程序發出中斷,以便它可以處理數據和/或釋放內存。

如果您的設備不具備對主機存儲器發出DMA讀或寫的能力,那么您將只能使用CPU與它進行交互。 離散DMA控制器已經很久沒有出現了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM