【问题标题】:Memory allocation during linux booting?linux引导期间的内存分配?
【发布时间】:2013-09-04 10:00:38
【问题描述】:

我尝试在谷歌和这个网站上搜索这个主题,但我找不到合适的答案。

我试图在 Linux 启动过程中在一个设置的物理地址分配一个大的连续内存块(几 MB)。但我仍然不清楚我应该把我的“alloc_bootmem”函数放在哪里。我在 ARM 处理器上运行 Linux。

  1. AFAIK,有一种方法可以创建一个包含对“alloc_bootmem”调用的驱动程序,然后将该驱动程序直接编译到内核中。

  2. 另一种方法是在 Linux 内核源代码的某处添加“alloc_bootmem”。

  3. 我认为存在的最后一种方法是创建一个类似 boot.rc 的设置文件?(不确定)以便在引导 Linux 期间保留我想要分配的内存。

如果有明确的方法或链接到这个问题的答案,我真的很感谢大家的帮助。基本问题是“我应该在哪里调用“alloc_bootmem”,这样它才能在引导期间工作?”

谢谢, 沙里尔

【问题讨论】:

  • 如果“设置”物理地址是由硬件决定的,那么还有第四种方法可以确保内核永远不会将该内存视为通用 RAM。让引导加载程序(例如 U-Boot)从 ATAG(或 DT)和/或内核命令行中提供给内核的内存列表中排除此物理内存区域。创建一个新的 ATAG(或 DT 条目)以将此保留的内存资源传递给将使用它的设备驱动程序。更多细节是here

标签: linux memory-management linux-kernel


【解决方案1】:

看看:http://lwn.net/Kernel/LDD3/ 第 8 章,它解释了早期启动阶段的内存分配。

有关启动内存分配的更多信息可以在这里找到:

https://www.kernel.org/doc/gorman/html/understand/understand022.html

此功能用于在系统启动期间分配大内存块,它使用物理内存而不是虚拟内存。在 MMU 启动并运行后,无法访问内存 AFAIK

如果你正在寻找一个大的连续内存分配,你可能应该使用不同的分配器看看:

http://lwn.net/Articles/396702/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2012-11-18
    • 2015-05-16
    相关资源
    最近更新 更多