首页 文章

屏蔽DMA分配内存的物理地址是否有效?

提问于
浏览
1

我目前正在编写一个Linux内核驱动程序,它需要告诉FPGA一个RAM中的基地址来写入 .
使用 dma_alloc_coherent 在内核驱动程序中分配内存 . 这将生成32位物理地址和内核虚拟地址,物理地址将传递给FPGA .
FPGA是一个带有嵌入式ARM Cortex-A9的Cyclone V,带有驱动程序的嵌入式Linux正在运行 .
现在的问题是,FPGA架构仅产生27位宽的总线来寻址sdram,而由dma调用产生的物理地址具有32位,例如,物理地址已经 0x2f220000 ,超过27位 Span .
我想知道,如果可以屏蔽最重要的5位并告诉FPGA地址 0x7220000 并且仍然具有正确的行为(在文档中说明,物理地址应该被转换为总线宽度,这将意味着屏蔽,因为我不能在处理器中使用27位) .
还可以使用简单的memcpy命令访问DMA内存,该命令从内核虚拟地址复制到缓冲区吗?
提前致谢 .

1 回答

  • 2

    答案真正取决于设备的物理内存布局 . 如果FPGA的地址总线补充了丢失的位,以便实际地址解析为正确的存储器,那么屏蔽可能是正常的 . 如果没有,则Linux内核返回给您的内存可能只是FPGA可访问的内存 . 如果是这种情况,您将不得不找到一种方法来让Linux只为您提供可访问的内存缓冲区 .

相关问题