pgprot_noncached()的未翻译页面错误

时间:2018-11-22 11:54:30

标签: arm dma pci-e

我使用2个ARM板进行DMA远程读写。 启用S​​MMU后,我在获取物理地址时遇到一个问题,这是将物理地址映射到用户空间中的内核地址所需的。

当前,我正在尝试禁用SMMU。 这是流程:

ker_addr =(u64)dma_alloc_coherent(... dma_addr_t bus_addr); //投射会导致任何问题吗?

phys_addr = bus_addr;

mmap(... phys_addr);

vma-> vm_page_prot = pgprot_noncached(vma> vm_page_prot);

remap_pfn_range(vma,vma-> vm_start,vma-> vm_pgoff, vma-> vm_end-vma-> vm_start,vma-> vm_page_prot));

但是,导致了无法翻译的页面错误。 在自定义驱动程序中注释pgprot_noncached时,我没有发现任何错误。 请帮助我了解原因。

还建议将remap_pfn_range()替换为dma_mmap_coherent()吗? 据我所知,remap_pfn_range()处理的是物理地址,而dma_mmap_coherent()处理的是dma_alloc_coherent()给定的总线地址。 请让我知道是否不同。

谢谢!

0 个答案:

没有答案