我正在使用 Fedora 14,并且正在为 PCI 交换机构建驱动程序。对于那个开关,我需要分配 8MB 的 DMA 内存(我可以处理 2*4MB),但我需要它与内存大小对齐,例如,如果它是 8MB,那么基地址的前 23 位应该是 0。
我怎么做?
我正在使用 Fedora 14,并且正在为 PCI 交换机构建驱动程序。对于那个开关,我需要分配 8MB 的 DMA 内存(我可以处理 2*4MB),但我需要它与内存大小对齐,例如,如果它是 8MB,那么基地址的前 23 位应该是 0。
我怎么做?
__get_free_pages
最多可以分配4MB,按分配大小分配。
所以你可以分配两个 4MB 的块,每个块在 4MB 上对齐。
您无法以这种方式对齐 8MB。
在引导过程中,如果分配 3*4MB,那么这些块很可能是连续的,因此第一个和第二个或第二个和第三个将是 8MB 对齐的。但我不会依赖它。
请注意,无论如何,您都应该在引导期间尽早执行此操作。否则,很可能内存是碎片化的,你将无法获得你的记忆。
__get_free_pages
给了我最大 4MB,但它仅与页面大小(4k)对齐。
我已经设法分配了 16MB DMA,pci_alloc_consistent
并且至少有 8mb 与 8mb 对齐。这解决了我的问题。