代码之家  ›  专栏  ›  技术社区  ›  Krustenkaese

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

  •  1
  • Krustenkaese  · 技术社区  · 8 年前


    内存在内核驱动程序中分配 dma_alloc_coherent . 这将生成一个32位物理地址和一个内核虚拟地址,物理地址被传递给FPGA。
    FPGA是一个带有嵌入式ARM Cortex-A9的Cyclone V,在其上运行一个带有驱动程序的嵌入式Linux。
    现在的问题是,FPGA结构仅生成27位宽的总线来寻址sdram,而由dma调用生成的物理地址具有32位,例如,第个物理地址已 0x2f220000 ,超过27位跨度。
    我想知道,是否可以屏蔽最重要的5位并告诉FPGA地址 0x7220000 并且仍然具有正确的行为(在doc中声明,物理地址应转换为总线宽度,这意味着屏蔽,因为我不能在处理器中使用27位)。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Shachar Shemesh    8 年前

    答案确实取决于设备的物理内存布局。如果FPGA的地址总线对缺失的位进行补充,使实际地址解析为正确的内存,那么屏蔽可能是可以的。如果没有,那么Linux内核返回给您的内存可能只是FPGA可以访问的内存。如果是这种情况,您必须找到一种方法,要求Linux只提供可访问内存中的缓冲区。