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


11

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

这是由于必须使用系统中可用的非易失性RAM。我有6GB的可用RAM和8GB的非易失性RAM。/ proc / iomem的输出为我提供了以下内容

100000000-17fffffff:系统RAM

180000000-37fffffff:保留

此处从6GB到14GB的区域对应于非易失性RAM区域,该区域由E820 BIOS内存映射标记为保留。我的主要目的是将此NVRAM用作Linux中的块设备。这对于测试NVRAM系统很有用。是否已经有任何Linux命令可以使我将该区域用作块设备,还是必须编写自己的内核设备驱动程序来实现这一目的?


2
只是好奇,您为什么要这样做?
mtak 2014年

它提供了一种简单的方法来测试针对Linux上的非易失性RAM设计的文件系统。
qstack 2014年

Answers:


2

我不是设备驱动程序方面的专家,但是以下是您研发的一些提示:

  1. 如果内存标记为“已保留”,则操作系统无法触摸它;您将必须找到一种方法来让BIOS将其标记为可用于操作系统,或者使用直接的低级ioctl对其进行控制
  2. 如果Linux可以看到内存,您仍然没有一种简单的方法来阻止Linux将其用作其他RAM块;可以尝试通过以下方式进行尝试:将此类RAM标记为“坏”,然后修改内核以使其仍然具有特殊用途(请查看内核文档,自从我上次入侵它以来,它已经发生了很大变化,并且还在不断发展)高速)
  3. 考虑到上述内容只是初步的(并且不是确定性的或详尽的)可行性研究,我想说,编写您的ramdisk块设备驱动程序是您情况下最明智的选择,也许您应该将其贡献给Linux内核和/或与之合作人们已经尝试过此方法(如果您尚未在Linux Kernel Mailing列表中发帖,则可能更适合此问题)

其他一些相关来源:


1

引进前tmpfs/ initramfs那里被ramdisk用来加载initrd图像,一个预定义的固定尺寸的块设备,我认为是连续的,至少在早期的实现。

块驱动程序本身没有用于内存地址的参数,只有大小,但用于加载initrd映像的内核位于预定义的地址(通过配置),因此窥探main / init内核代码可能会有所帮助(我会如果initrd不再支持ramdisk,则感到惊讶,但是由于initramfs已经存在,很多年了,所以不再使用ramdisk

驱动程序源是驱动器/块/ rd.c,如果我看到正确的,现在是司机/块/ brd.c

否则,在寻找ramdisk时,我发现了一个看起来很有趣的实现:

RAM上的磁盘—玩块驱动程序

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.