在内核启动时分配(静态)内存

时间:2016-05-31 15:13:59

标签: c memory linux-kernel

我正在使用Linux内核,并且希望在引导时(在内核空间中)静态地分配一个子页面大小的数组,稍后内核将其用于调度目的。有谁能以最好的方式指出我这样做?

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

我已经知道alloc_bootmem()但我也想知道/探索其他可能性。如果有人能够指出我使用内存的代码片段,就像Linux内核中已经存在的那样,那将是非常好的。

1 个答案:

答案 0 :(得分:0)

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

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

Avr_Hold_Time = (g.Sum(b => b.Field<int?>("QueueHoldCount")) == 0) 
                ? 0 
                : (double)(g.Sum(b => b.Field<int?>("Avr_Hold_Time"))) 
                  / (g.Sum(b => b.Field<int?>("QueueHoldCount")),

而不是

void *alloc_bootmem_low_pages(unsigned long size);

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