强制Linux在4G上仅使用内存?

我有一个Linux设备驱动程序,该驱动程序与一个设备相连,该设备理论上可以使用64位地址执行DMA。我想测试一下是否确实有效。

有没有一种简单的方法可以强制Linux计算机不使用物理地址4G以下的任何内存?如果内核映像位于低内存中就可以了;我只想能够强制我知道所有动态分配的缓冲区,而为我分配的任何内核或用户缓冲区都无法以32位寻址的情况。这有点蛮力,但是比我能想到的任何东西都要全面。

这应该可以帮助我发现(1)硬件配置不正确或未加载完整地址(或只是普通损坏),以及(2)意外和不必要地使用退回缓冲区(因为无处可退回)。

:我正在运行x86_64,所以我不在乎大多数旧的32位寻址问题。我只想测试驱动程序可以使用64位物理地址正确地与众多缓冲区接口。

回答:

/usr/src/linux/Documentation/kernel-

parameters.txt

        memmap = exactmap [KNL,X86]启用精确设置

E820内存映射,由用户指定。

这样的memmap = exactmap行可以基于

BIOS输出或其他要求。参见memmap = nn @ ss

选项说明。

memmap = nn [KMG] @ss [KMG]

[KNL]强制使用特定内存区域

要使用的内存区域,从ss到ss + nn。

memmap = nn [KMG] #ss [KMG]

[KNL,ACPI]将特定内存标记为ACPI数据。

要使用的内存区域,从ss到ss + nn。

memmap = nn [KMG] $ ss [KMG]

[KNL,ACPI]将特定内存标记为保留。

要使用的内存区域,从ss到ss + nn。

示例:从0x18690000-0x1869ffff中排除内存

memmap = 64K $ 0x18690000

要么

memmap = 0x10000 $ 0x18690000

如果添加memmap=4G$0到内核​​的引导参数,则将不再能够访问较低的4GB物理内存。同样,您的系统将不再引导…但是其中的一些变化(memmap=3584M$512M?)可能会允许不足4GB的内存用于系统引导,但不足以在其中分配驱动程序的DMA缓冲区。

以上是 强制Linux在4G上仅使用内存? 的全部内容, 来源链接: utcz.com/qa/414046.html

回到顶部