在启动时分配内存

时间:2011-10-23 11:24:41

标签: linux-kernel kernel osdev

我需要在启动时分配一些内存。我需要它的物理地址,而不是虚拟地址。另外,我不希望它来自DMA区域,这不是我的目的。

我尝试了alloc_bootmem(),alloc_bootmem_pages()但它们返回虚拟地址。 我还看了一下alloc_low_page()......没有按预期工作。

事情是,我需要RAM中的某种保留区域..不必由内核映射..我将尝试自己管理该区域。每次启动时我都需要物理区域相同。

我也尝试在init / main.c中分配一些内存:start_kernel()但是这也没有用。

现在被困在哪里/寻找什么。

我更喜欢将答案作为指向正确方向的指针,而不是告诉do_it_here_in_this_way。

谢谢:)

1 个答案:

答案 0 :(得分:2)

AFAIK返回的内存购买bootmem分配器很有意思是物理内存所以你只需调用alloc_bootmem()并使用virt_to_phys来获取物理地址。

无法保证在每次启动时都获得相同的地址,但只要您不更改内核,分配将始终按相同的顺序(和大小)进行,以便您获得的是什么。