2

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

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

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

我还尝试在 init/main.c 中分配一些内存: start_kernel() 但这也不起作用。

现在有点卡在哪里/要找什么了。

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

谢谢 :)

4

1 回答 1

2

AFAIK 购买 bootmem 分配器返回的内存是连续的物理内存,因此您只需调用 alloc_bootmem() 并使用 virt_to_phys 获取物理地址。

不能保证每次启动都获得相同的地址,但只要您不更改内核,分配将始终以相同的顺序(和大小)发生,以便您期望得到什么。

于 2011-10-23T13:59:56.503 回答