强制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