【问题标题】:Allocating (statically) memory at kernel boot time在内核启动时分配(静态)内存
【发布时间】:2016-05-31 15:13:58
【问题描述】:

我正在使用 Linux 内核,并希望在启动时(在内核空间中)静态分配子页面大小的数组,稍后将由内核用于调度目的。谁能指出我这样做的最佳方式?

在操作系统正常执行期间永远不会显式释放此内存,除非在结束时隐式释放(关闭)。

我已经知道alloc_bootmem(),但我也想知道/探索其他可能性。如果有人能指点我一段使用内存的方式与 Linux 内核中已经存在的类似方式的 sn-p 代码,那就太好了。

【问题讨论】:

  • Kmalloc() 怎么样
  • 这看起来也是一个不错的选择。在内核源代码中,通常会在启动时调用 kmalloc() 进行分配?
  • 您在谈论启动时间或运行时间具体是什么?
  • 我想在启动时分配,因为它可以在调度程序执行操作系统期间的任何时间使用。
  • FIXMAP 在你的情况下可能是一个关键字。

标签: c memory linux-kernel


【解决方案1】:

一些内核模块在需要大容量时使用这种技术来分配 DMA 缓冲区,例如 jazzdma 模块和 nlm-dma 模块

请注意,如果您将启动时内存分配器用于 dma 目的,则必须使用

void *alloc_bootmem_low_pages(unsigned long size);

而不是

void *alloc_bootmem_pages(unsigned long size);

因为 DMA 只能访问低内存类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 2016-02-01
    • 2013-09-17
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2014-10-12
    • 2015-07-23
    相关资源
    最近更新 更多