保留固定 RAM 内存区域作为块设备(具有给定的起始物理地址)

qst*_*ack 13 linux memory ramdisk

有很多关于 RAM 磁盘的问题,我知道 ramfs 和 tmpfs 允许将 ram 用作块设备。然而,我的兴趣是使用固定的内存地址范围作为块设备。

这是因为必须使用我的系统中可用的非易失性 RAM。我有 6GB 的 RAM 可用,以及 8GB 的​​非易失性 RAM。/proc/iomem 的输出给了我以下内容

100000000-17ffffffff:系统内存

180000000-37ffffffff : 保留

这里从 6GB 到 14GB 的区域对应于非易失性 RAM 区域,该区域由 E820 BIOS 内存映射标记为保留。我的主要意图是将此 NVRAM 用作 linux 中的块设备。这对于测试 NVRAM 系统很有用。是否已经存在任何允许我将此区域用作块设备的 linux 命令,或者我是否必须编写自己的内核设备驱动程序来实现相同的功能?

Dei*_*m0s 2

我不是设备驱动程序方面的专家,但这里有一些可供您研发的建议:

  1. 如果内存被标记为“保留”,则操作系统无法触及它;您必须找到一种方法,让 BIOS 将其标记为可供操作系统使用,或者使用直接的低级ioctl控制它
  2. 如果 Linux 可以看到该内存,您仍然没有简单的方法来阻止 Linux 将其用作任何其他 RAM 块;可以尝试将此类 RAM 标记为“坏”,然后修改内核以仍然对其进行特殊使用(请检查有关此的内核文档,自上次我侵入它以来它已经发生了很大变化并且它正在不断发展以极快的速度)
  3. 考虑到上述内容是初步的(非决定性的或详尽的)可行性研究,我想说编写你的 ramdisk 块设备驱动程序是你的情况下最明智的选择,也许你应该将其贡献给 Linux 内核和/或与人们已经尝试过这个(也许解决这个问题的更好地方是Linux Kernel Mailing list,如果你还没有在那里发帖的话)

其他一些相关来源: