强制Linux只使用超过4G的内存?

Eri*_*nen 9 linux linux-device-driver linux-kernel

我有一个Linux设备驱动程序,它接口到一个理论上可以使用64位地址执行DMA的设备.我想测试看看这实际上是否有效.

有没有一种简单的方法可以强制Linux机器不使用物理地址4G以下的任何内存?如果内核映像处于低内存状态,则可以.我只是希望能够强制我知道所有动态分配的缓冲区的情况,并且为我分配的任何内核或用户缓冲区都不能以32位进行寻址.这是一种蛮力,但比我能想到的任何其他东西都更全面.

这应该有助于我捕获(1)未正确配置或加载完整地址(或只是简单破坏)的硬件,以及(2)意外和不必要地使用反弹缓冲区(因为无处可跳转).

澄清:我正在运行x86_64,所以我不关心大多数旧的32位寻址问题.我只想测试驱动程序是否可以使用64位物理地址正确连接大量缓冲区.

eph*_*ent 7

/usr/src/linux/Documentation/kernel-parameters.txt

        memmap=exactmap [KNL,X86] Enable setting of an exact
                        E820 memory map, as specified by the user.
                        Such memmap=exactmap lines can be constructed based on
                        BIOS output or other requirements. See the memmap=nn@ss
                        option description.

        memmap=nn[KMG]@ss[KMG]
                        [KNL] Force usage of a specific region of memory
                        Region of memory to be used, from ss to ss+nn.

        memmap=nn[KMG]#ss[KMG]
                        [KNL,ACPI] Mark specific memory as ACPI data.
                        Region of memory to be used, from ss to ss+nn.

        memmap=nn[KMG]$ss[KMG]
                        [KNL,ACPI] Mark specific memory as reserved.
                        Region of memory to be used, from ss to ss+nn.
                        Example: Exclude memory from 0x18690000-0x1869ffff
                                 memmap=64K$0x18690000
                                 or
                                 memmap=0x10000$0x18690000

如果添加memmap=4G$0到内核​​的引导参数,将无法再访问较低的4GB物理内存.此外,您的系统将不再启动...但是此处的一些变化(memmap=3584M$512M?)可能允许系统启动时有足够的4GB以下的内存,但不足以在那里分配驱动程序的DMA缓冲区.