看板 LinuxDev 關於我們 聯絡資訊
大家好, 我的作業平台是FPGA zynq 開發板,裡面有arm cpu。 最近在試用dma將寫進DDR的資料搬出來, 但發現搬出來的資料都有問題。 後來發現在dma開始搬資料前使用sdk開發平台的date cache disable這個功能就能讓 結果是正常的。 不過我之後希望將這個流程搬到灌了linux作業系統的環境下去執行, 因此想要問一下在linux開發環境下要如何去關掉跟打開快取呢? 我是用ubuntu的linux, 謝謝大家。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.58.88 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1585817001.A.3E3.html
descent: dma 要記憶體的 function 可以配置non cacahe/non buffer04/02 22:43
descent: 的區域04/02 22:44
我的dma funciton在linux下面不能用,然後我是直接寫dma的register來啟動dma。 所以我才想要知道如果開/關cache呢? ※ 編輯: hirofumisyo (111.251.48.187 臺灣), 04/04/2020 16:57:01
soso7885: 關了可能linux都跑不起來吧,dma w完flush cache一下呢04/04 21:17
請問在linix下怎麼flush cache呢? ※ 編輯: hirofumisyo (101.136.141.77 臺灣), 04/04/2020 22:54:55
hizuki: linux dma coherent 了解下,劃dma區段可用cma實現,如許 04/05 13:32
hizuki: 詳細答覆我回頭寫給你 04/05 13:32
感謝回應,我找了一些dma coherent的資料來看後,我的理解是CPU在讀寫DDR時不是直接 讀寫DDR,而是透過cache; 但DMA卻是直接搬運DDR的資料,所以才會產生搬的data跟從 CPU寫入的不一樣。我不太懂你提到的用cma劃dma區段是什麼意思,在我使用的FPGA手冊 有給出DDR對應到的memory address range,因此我使用mmap的方法將data寫到對應的 address上(共4MB)。 ※ 編輯: hirofumisyo (111.251.48.187 臺灣), 04/05/2020 20:35:13
WPC001: flush_tlb_mm() / flush_tlb_range() /update_mmu_cache() 04/06 22:38
WPC001: 有空自己看一下... 04/06 22:38
leolarrel: 參考 volatile 關鍵字 04/07 16:07