在Linux内核中分配超过4 MB的固定连续内存

Bil*_*nch 19 memory linux-device-driver linux-kernel

对于与正在构建的PCI设备的某些交互,我们希望创建电路板可以访问的大量连续内存.就目前而言,我能够分配的最大内存大小为4兆字节.我想知道是否有任何方法可以创建更大的区域.

我知道我可以使用启动选项mem=来执行此操作,但出于numa原因,我宁愿不去这条路线.另一方面,如果有人知道这样做的方法,但是通过numa节点分发它,那就没问题了.

正如我最初所说,目前我限制在4兆字节.分配目前由完成__alloc_pages,受到限制MAX_ORDER.MAX_ORDER是一个编译时常量,我也担心编辑它可能会影响其他地方.

谢谢.

Kar*_*tan 9

如果您可以将PCI设备驱动程序编译到内核中(即,不作为模块链接),则可以尝试在引导时分配内存.这应该让你绕过动态分配的上限.请参阅Linux设备驱动程序,ed.3 ch.8详情.