当前位置: 首页 > 面试题库 >

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

夏侯旻
2023-03-14
问题内容

我有一个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缓冲区。



 类似资料:
  • 问题内容: 我正在使用matplotlib.pyplot模块绘制直方图,并且想知道如何强制y轴标签仅显示整数(例如0、1、2、3等)而不显示小数(例如0.,0.5) ,1,,1.5、2等)。 我正在查看指导说明,怀疑答案在matplotlib.pyplot.ylim周围,但是到目前为止,我只能找到设置最小和最大y轴值的东西。 问题答案: 如果你有y数据 您可以使用此数据的最大值和最小值来创建此范围

  • 问题 你的程序包含一个很大的类继承体系,你希望强制执行某些编程规约(或者代码诊断)来帮助程序员保持清醒。 解决方案 如果你想监控类的定义,通常可以通过定义一个元类。一个基本元类通常是继承自 type 并重定义它的 __new__() 方法 或者是 __init__() 方法。比如: class MyMeta(type): def __new__(self, clsname, bases,

  • 问题内容: 我试图强迫MySQL使用两个索引。我正在加入一个表,我想利用两个索引之间的交叉。具体术语是“使用相交”,这是指向MySQL文档的链接: http://dev.mysql.com/doc/refman/5.0/zh-CN/index-merge- optimization.html 有什么办法可以强制实施吗?我的查询正在使用它(并且它加快了速度),但是现在无论出于何种原因它都停止了。 这

  • 预制版: 4.3 (在此下载) 在Linux上运行make时,我得到以下错误:“g : x86_64:没有这样的文件或目录。”从CFLAGS中移除$(ARCH)后,使工程正常。 红帽子: 系统版本(“cat/etc/redhat release”):Red Hat Enterprise Linux Server 6.5版(圣地亚哥) 内核版本(“uname-r”):2.6.32-431.11.2.

  • 问题内容: 如何在Linux上仅显示文件名(无内联匹配)? 我通常使用类似: 我如何才能获取文件名(带有路径)却没有匹配项?我必须使用吗?我的手册页上没有找到执行此操作的方法。 问题答案: 标准选项(即小写的L)可以做到这一点。 根据Unix标准: 在这种情况下,您也不需要。

  • 我试图使用Auth在我的Kohana应用程序中强制使用强(er)密码,方法是使用以下正则表达式要求至少一个大写字母、一个小写字母、一个数字、一个非字母数字(特殊字符)和至少8个字符。 正则表达式正在工作,正如在Rubular上可以看到的那样。这是我在Kohana的Model\u Auth\u User中使用的代码,它扩展了ORM。 但是,当创建一个新的用户帐户或更改现有帐户的密码时,这个正则表达式