Linux kernel 在启动时获取分配的内存

Linux kernel 在启动时获取分配的内存,linux-kernel,kernel,osdev,Linux Kernel,Kernel,Osdev,我需要在启动时分配一些内存。我需要它的物理地址,而不是虚拟地址。另外,我不希望它来自DMA区域,这不是我的目的 我尝试了alloc_bootmem(),alloc_bootmem_pages(),但它们返回虚拟地址。 我还查看了alloc_low_page()。。。没有像预期的那样工作 问题是,我需要在内存中保留一些区域。。这不必由内核映射。。我会设法自己管理那个地区。我需要在每只靴子上都有相同的物理面积 我还尝试在init/main.c:start_kernel()中分配一些内存,但这也不起作

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

我尝试了alloc_bootmem(),alloc_bootmem_pages(),但它们返回虚拟地址。 我还查看了alloc_low_page()。。。没有像预期的那样工作

问题是,我需要在内存中保留一些区域。。这不必由内核映射。。我会设法自己管理那个地区。我需要在每只靴子上都有相同的物理面积

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

现在有点困在哪里/找什么的问题上了

我更喜欢把答案作为指向正确方向的指针,而不是用这种方式告诉你在这里做什么


谢谢:)

确认返回的内存购买bootmem分配器是连续的物理内存,因此您可以调用alloc\u bootmem()并使用virt\u to\u phys获取物理地址


无法保证每次启动时都能获得相同的地址,但只要您不更改内核,分配将始终以相同的顺序(和大小)进行,这样您就可以得到预期的地址。

好的,我使用virt_to_phys,它确认了我在每次启动时都会获得相同的物理位置。仍然有问题。。不太相关,但不能说不相关类型。我会和它战斗,让你知道。谢谢:)仍在关注其他问题,但我可以关闭此问题。使用alloc_bootmem似乎是正确的选择。virt_to_phys帮助证实了这一点。