【问题标题】:getting memory allocated at boot time在启动时分配内存
【发布时间】:2011-10-23 11:24:40
【问题描述】:

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

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

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

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

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

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

谢谢:)

【问题讨论】:

    标签: linux-kernel kernel osdev


    【解决方案1】:

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

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

    【讨论】:

    • 好的,我使用了 virt_to_phys,它确认我在每次启动时都获得了相同的物理位置。仍然有一个问题.. 不太相关但不能说不相关的类型。会与之抗争并让你知道。谢谢:)
    • 仍在查看其他问题,但我可以关闭此问题。并且使用 alloc_bootmem 似乎是正确的方法。 virt_to_phys 帮助证实了这一点。
    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多