gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:07 25 4
gpt4 key购买 nike

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

最佳答案

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

关于linux - 屏蔽 DMA 分配内存的物理地址是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46403243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com