作者hirofumisyo (Ami)
看板LinuxDev
标题[问题] 如何关掉/打开 arm cpu 快取记忆体
时间Thu Apr 2 16:43:16 2020
大家好,
我的作业平台是FPGA zynq 开发板,里面有arm cpu。
最近在试用dma将写进DDR的资料搬出来,
但发现搬出来的资料都有问题。
後来发现在dma开始搬资料前使用sdk开发平台的date cache disable这个功能就能让
结果是正常的。
不过我之後希望将这个流程搬到灌了linux作业系统的环境下去执行,
因此想要问一下在linux开发环境下要如何去关掉跟打开快取呢?
我是用ubuntu的linux,
谢谢大家。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.161.58.88 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1585817001.A.3E3.html
1F:→ descent: dma 要记忆体的 function 可以配置non cacahe/non buffer04/02 22:43
2F:→ descent: 的区域04/02 22:44
我的dma funciton在linux下面不能用,然後我是直接写dma的register来启动dma。
所以我才想要知道如果开/关cache呢?
※ 编辑: hirofumisyo (111.251.48.187 台湾), 04/04/2020 16:57:01
3F:推 soso7885: 关了可能linux都跑不起来吧,dma w完flush cache一下呢04/04 21:17
请问在linix下怎麽flush cache呢?
※ 编辑: hirofumisyo (101.136.141.77 台湾), 04/04/2020 22:54:55
4F:→ hizuki: linux dma coherent 了解下,划dma区段可用cma实现,如许 04/05 13:32
5F:→ 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
6F:→ WPC001: flush_tlb_mm() / flush_tlb_range() /update_mmu_cache() 04/06 22:38
7F:→ WPC001: 有空自己看一下... 04/06 22:38
8F:→ leolarrel: 参考 volatile 关键字 04/07 16:07