强制Linux只使用4G以上的内存?

2023-11-23

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

有没有一种简单的方法可以强制 Linux 机器不使用物理地址 4G 以下的任何内存?如果内核映像内存不足也没关系;我只是希望能够强制实现一种情况,即我知道所有动态分配的缓冲区,并且为我分配的任何内核或用户缓冲区都无法以 32 位寻址。这有点蛮力,但比我能想到的任何其他方法都更全面。

这应该可以帮助我捕获(1)未正确配置或加载完整地址(或只是完全损坏)的硬件以及(2)意外和不必要地使用反弹缓冲区(因为没有地方可以反弹)。

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


/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 缓冲区。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制Linux只使用4G以上的内存? 的相关文章

  • 为什么我的 Java 代码执行 bash 命令不正确?

    我试图让我的 Java 程序与 Linux bash 交互 但出了问题 我有一个简单的可执行文件prog从中读取一个整数stdin并输出其平方 执行中 echo 5 prog 从 bash 本身打印正确答案25 in stdout但运行 i
  • 验证 BASH 脚本时出现问题 [已关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试验证 bash 脚本时出现代码 lint 错误 bin bash if eq 0 then printf No argum
  • GCC 4.7 字符串文字的源字符编码和执行字符编码?

    Linux x86 64 上的 GCC 4 7 是否具有默认字符编码 用于验证和解码 C 源文件中字符串文字的内容 这是可配置的吗 此外 当将字符串数据从字符串文字链接到输出的数据部分时 它是否具有默认的执行字符编码 这是可配置的吗 在任何
  • 有没有比使用 backtrace() 更便宜的方法来查找调用堆栈的深度?

    我的日志记录代码使用的返回值回溯 http linux die net man 3 backtrace确定当前堆栈深度 出于漂亮的打印目的 但我可以从分析中看到这是一个相当昂贵的调用 我不认为有更便宜的方法吗 请注意 我不关心帧地址 只关心
  • Amazon EC2 - Apache 服务器重启问题

    当我运行这个命令时 sudo etc init d httpd restart 它给出以下错误 停止 httpd 失败 启动 httpd 98 地址已在使用中 make sock 无法绑定到地址 80 98 地址已在使用 make sock
  • 在 UNIX 时间戳 Shell/Bash 中将日期与时区转换

    我需要将日期从格式为 yyyy mm dd hh mm ss TZ 的字符串转换为 UNIX 时间 TZ 时区 到目前为止我所做的是将没有时区的 yyyy mm dd hh mm ss 格式的日期转换为时间戳 dateYMD 2019 2
  • 是否可以将 CFLAGS 设置为 Linux 内核模块 Makefile?

    例如 常见设备模块的Makefile obj m jc o default MAKE C lib modules shell uname r build M shell pwd modules clean MAKE C lib module
  • 从 bash 脚本返回值

    我想创建一个返回值的 Bash 文件 意思是 在脚本 script a bash 中我有一定的计算 脚本 script b bash 会调用它 script a bash return 1 5 script b bash a value s
  • 使用 Shell 脚本提供密码

    我已将客户端和服务器设置为无密码登录 就像无密码登录一样 通过将服务器的 RSA 密钥复制到所有客户端的 root ssh id rsa pub 来实现 但这是我手动完成的 我喜欢使用 shell 脚本自动执行此过程 并通过脚本向计算机提供
  • 在类中使用静态互斥体

    我有一个可以有很多实例的类 它在内部创建并初始化来自第三方库 使用一些全局变量 的一些成员 并且不是线程安全的 我考虑过使用 static boost mutex 它将被锁定在我的类构造函数和析构函数中 因此 在我的线程中创建和销毁实例对于
  • 使用多线程的套接字服务器或文件服务器实现:概念不清楚

    请帮我理清这个概念 假设我们有一个使用线程实现的套接字端口服务器 套接字服务器侦听套接字端口 并在消息到达时创建一个线程来服务该请求 客户端代码向服务器发送给定数量的消息 该客户端代码也可以由多个用户在不同的计算机上运行 我知道客户端代码作
  • 使用openssl从服务器获取证书

    我正在尝试获取远程服务器的证书 然后可以将其添加到我的密钥库中并在我的 Java 应用程序中使用 一位高级开发人员 正在度假 告诉我我可以运行这个 openssl s client connect host host 9999 获取转储的原
  • bash 或 sh 中的“=”和“==”运算符有什么区别

    我意识到 和 运算符都可以在 if 语句中使用 例如 var some string if var some string then doing something fi if var some string then doing some
  • 模拟用户输入以使用不同参数多次调用脚本

    我必须使用提供的脚本 该脚本在脚本运行时接受用户输入而不是参数 我无法解决这个问题 脚本的一个例子是 bin bash echo param one read one doSomething echo param two read two
  • “do { ... } while (0)”在内核代码中到底做了什么? [复制]

    这个问题在这里已经有答案了 可能的重复 当我们定义宏时 do while 0 有什么用 https stackoverflow com questions 923822 whats the use of do while0 when we
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • 干净地销毁System V共享内存段

    我在用shmget shmat and shmctl分别获取和创建共享内存段 将其附加到进程地址空间中并删除它 我想知道进程是否仍然可以使用共享内存段 即使它已被分离并要求使用删除 shmctl id IPC RMID 在一个过程中 我无法
  • 使用 gatttool 或 bluepy BLE 订阅通知

    我正在使用 bluepy 编写一个程序 用于监听蓝牙设备发送的特征 我还可以使用任何库或语言 唯一的限制是在 Linux 上运行 而不是在移动环境中运行 似乎仅在移动设备中广泛使用 没有人在桌面上使用 BLE 使用 bluepy 我注册了委
  • 从 gitlab docker runner 启动声纳扫描仪

    我有一个 CI 工作流程 集成了 linting 作业和代码质量作业 我的 Linting 工作是一个 docker runner 从应用程序代码启动我的 eslint 脚本 然后我的代码质量工作应该启动声纳扫描仪泊坞窗实例 检查我的代码并
  • 当存在点和下划线时,使用 sed 搜索并替换

    我该如何更换foo with foo sed 只需运行 sed s foo foo g file php 不起作用 逃离 sed s foo foo g file php Example cat test txt foo bar sed s

随机推荐

  • 使用位置粘性删除不需要的空间

    我正在尝试使用position sticky在旋转的元素上 但我在顶部获得了额外的空间 此外 粘性元素必须停止的地方 在父元素的末尾 它会移到外面 请注意 我需要控制来选择粘性元素和左窗口侧之间放置的像素数 检查第二个屏幕截图以了解这两个问
  • Google 自定义搜索下一页

    我有以下代码 但我不知道如何打印下一页的链接 如何转到下一页 usr bin python2 4 coding utf 8 import pprint from apiclient discovery import build def ma
  • 如何将 BlueZ 配置为要求连接设备输入匹配的密钥?

    我正在尝试在嵌入式 Linux 设备上设置蓝牙 以便使用 SSP 模式 我的设备生成密码并在其显示屏上显示密码 并且要求远程端 例如用户的手机 输入匹配的密码才能使用才能成功配对 我编写 注册了一个代理 将其模式设置为 DisplayOnl
  • 为什么数组的 VarType() 总是返回 8204

    In the VarType MSDNMicrosoft VBScript 文档VarType它说的功能 粗体强调 备注 VarType 函数永远不会通过以下方式返回 Array 的值 本身 它总是添加到其他一些值来指示数组 特定类型 Va
  • 增量逻辑

    我试图更深入地了解后增量和预增量 但我有点坚持以下表达式 public static void main String args int i 0 i i i i 2 i i i 0 i i 2 i i i 0 1 3 2 1 i 0 6 1
  • 如何根据实时音频开发频谱分析仪?

    我正在开发一个应用程序 可以实时从麦克风获取源音频 无需文件存储 基本上 我使用 mRecorder new MediaRecorder mRecorder setAudioSource MediaRecorder AudioSource
  • 带有 SceneKit SCNProgram 的金属着色器

    我正在寻找一个可以在 SceneKit 和 SCNProgram 中工作的金属着色器 有人可以告诉我正确的方法声明 如何连接它吗 let program SCNProgram program vertexFunctionName myVer
  • 在 Android 上阻止网站

    有没有办法在 Android 设备上以编程方式阻止网站 我想要一个填充到持续运行的服务中的 URL 黑名单 当在受限条款下运行的用户打开浏览器时 它应该检查该黑名单 我想过修改hosts allow和hosts deny文件 但这些文件受到
  • 如何在 Node.js 上使用 Sequelize 进行连接查询

    我正在使用sequelize ORM 一切都很棒而且干净 但是当我使用它时遇到了问题join查询 我有两个模型 用户和帖子 var User db seq define User username type db Sequelize STR
  • 为什么不允许 auto 作为函数参数?

    From 这个问题 很清楚auto不能用作函数参数 我的问题是为什么返回类型被允许为auto但函数参数不是 auto function auto data DOES something Since there有很多好处auto进来c 1z
  • 使用 Next js 时在 CSS/SASS 模块中使用 kebab-case CSS 类名

    我在 React Next js 中使用 SCSS 模块作为我的组件 但我不知道如何导入 kebab case 类 目前 我只是用驼峰命名法编写所有 SCSS 类 但这并不理想 因为这意味着我无法使用 SCSS 级联 我还在学习 React
  • 超过 Google Directions API 上每个请求 23 个航点的限制(商务/工作级别)

    我想使用 Google Directions API 为一家处理冬季扫雪机和夏季景观美化的公司开发路线规划软件 客户的要求之一是他能够计算具有至少 30 个 最好更多 航点的路线 根据文档 下面引用 即使 Google Maps API f
  • DB2:从表中清除大量记录

    我使用 DB2 9 7 FP5 作为 LUW 我有一个包含 250 万行的表 我想删除大约 100 万行 并且此删除操作分布在整个表中 我正在用 5 个删除语句删除数据 delete from tablename where tableky
  • Figure.show、Figure.canvas.draw 和Figure.canvas.draw_idle 之间有什么区别

    在 Matplotlib 中 我可以通过调用来更新图中绘图的视觉效果Figure对象 说fig并调用该方法show fig show 但我也可以通过致电来做到这一点canvas图中的对象 然后调用方法draw fig canvas draw
  • iOS 如何实现下拉列表以及如何关闭它?

    我需要一些关于如何在 iOS 中实现下拉列表类型功能的输入 我想到了一些解决方案 例如使用UITableView用于显示文本项列表 在我的例子中 列表可以是静态的也可以是动态的 所以UITableView对于我的情况来说似乎是一个不错的选择
  • 在 C++ 中重载比较运算符会导致“无效运算符<”

    目前正在尝试在 C 中对对象向量进行排序 每个对象都包含一个字符串 字符串可以包含字母或数字 由于设计限制 这是必要的 因为比较器可以更改 目前 该对象的类已重载 因此当比较两个对象时 将比较它们包含的字符串 这在一定程度上是有效的 但是
  • 使用 using 指令进行不明确的名称查找

    不允许将名称空间和同名的类放入一个声明区域 即 namespace A class A 格式不正确 参见第 3 3 1 4 节 但是 可以通过 using 指令引入任一名称 namespace N namespace A int i str
  • Flutter:应用程序在后台时使用路径提供程序

    我目前正在尝试将 FCM 和本地通知实现到我的 Flutter 应用程序中 我已成功配置 FCM 和普通通知的本地通知 但我还有一种不同类型的通知 我想用图像显示 当我的应用程序位于前台时 通知显示没有错误 但是当我终止时应用程序 将其移动
  • 使用 AFNetworking 2.0 加载图像

    我正在尝试使用 AFNetworking 2 0 将照片添加到 POST 这个 iOS 应用程序将帖子和照片发送到博客 我无法弄清楚为什么图像无法加载 这是我到目前为止得到的 publish text and image void publ
  • 强制Linux只使用4G以上的内存?

    我有一个 Linux 设备驱动程序 它连接到一个理论上可以使用 64 位地址执行 DMA 的设备 我想测试一下这是否真的有效 有没有一种简单的方法可以强制 Linux 机器不使用物理地址 4G 以下的任何内存 如果内核映像内存不足也没关系