4

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

我怎么做?

4

2 回答 2

2

__get_free_pages最多可以分配4MB,按分配大小分配。
所以你可以分配两个 4MB 的块,每个块在 4MB 上对齐。

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

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

于 2012-02-28T10:23:45.637 回答
0

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

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

于 2012-02-28T11:01:09.120 回答