【问题标题】:Do we need to ioremap for memmap reserved memory chunk ?我们需要为 memmap 保留内存块进行 ioremap 吗?
【发布时间】:2012-10-07 02:39:33
【问题描述】:

我使用memmap=8G$4G linux 内核启动参数来保留内存块。

需要ioremap这个内存吗?

ioremap 手册页说:

ioremap 执行特定于平台的操作序列以使 总线内存 CPU 可通过 readb/readw/readl/writeb/ 访问 writew/writel 函数和其他 mmio 助手。返回的 不保证地址可以直接用作虚拟地址。

所以如果我不能使用返回的ioremap 地址作为直接寻址内存的虚拟地址,那么一个更广泛的问题是我们应该什么时候ioremap 内存?

【问题讨论】:

    标签: c memory-management linux-kernel linux-device-driver kernel


    【解决方案1】:

    是的,您必须ioremap 这个区域才能访问它。当您指示内核忽略此区域时,内核不会为此内存区域设置页面目录条目。

    如果重新映射io-port地址空间的地址,ioremap返回的地址可能无法直接使用。当您从memory 地址空间重新映射地址时,可以直接使用它们。

    不过,请看https://unix.stackexchange.com/questions/37729/how-can-i-reserve-a-block-of-memory-from-the-linux-kernel

    【讨论】:

    • 请通过阅读此问题的所有回复来阅读问题链接上的 cmets。我已经解释了我看到的问题。如果您有更多信息,请分享。谢谢。
    • @JayD 您是在谈论基于英特尔的架构,还是希望您的解决方案能够跨不同的处理器架构移植?如果前者是真的,那么看看内核代码,看看内核对内存的ioremap 做了什么,以及为什么你可以直接使用在这种情况下返回的地址(就像我为你提供答案一样)。在后一种情况下,这绝对不是一种方法。
    【解决方案2】:

    根据我保留(或阻塞)的经验,内存如下。

    如果您尝试保留特定容量的内存,您可能需要重新映射 BIOS 提供的现有内存映射。

    如果您的系统不允许您这样做,那么您必须在 BIOS 提供的内存映射中确定哪个区域是空闲的,并且只有那些可以保留。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2015-10-24
      • 1970-01-01
      • 2022-08-16
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多