【问题标题】:how to allocate 4-8 MB aligned DMA Linux如何分配 4-8 MB 对齐的 DMA Linux
【发布时间】:2012-02-27 13:57:46
【问题描述】:

我正在使用 Fedora 14,并且正在为 PCI 交换机构建驱动程序。 对于那个开关,我需要分配 8MB 的 DMA 内存(我可以处理 2*4MB),但我需要它与内存大小对齐,例如,如果它是 8MB,那么基地址的前 23 位应该是 0。

我该怎么做?

【问题讨论】:

  • 我找到了一种分配 2mb 对齐 DMA 的方法。为此,我分配了 4MB,其中必须有 2MB 与其大小对齐。如果有办法将最大 dma 增加到 8mb,这应该可以解决我的问题。

标签: linux linux-kernel dma


【解决方案1】:

__get_free_pages最多可以分配4MB,按分配大小分配。
因此,您可以分配两个 4MB 块,每个块在 4MB 上对齐。

您无法以这种方式对齐 8MB。
在启动过程中,如果分配 3*4MB,那么这些块很可能是连续的,因此第一个和第二个或第二个和第三个将是 8MB 对齐的。但我不会依赖它。

请注意,无论如何,您都应该在引导期间尽早执行此操作。否则,很可能内存是碎片化的,你将无法获取你的内存。

【讨论】:

    【解决方案2】:

    __get_free_pages 给了我最大 4MB,但它只与页面大小 (4k) 对齐。

    我已经设法使用pci_alloc_consistent 分配了 16MB DMA,并且至少有 8mb 与 8mb 对齐。这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2016-09-04
      • 2013-10-27
      • 2019-11-10
      • 2022-01-13
      相关资源
      最近更新 更多