启动 Linux 内核时,可以在 RAM 中加载 initramfs 存档和 DTB 文件,并将这些物理地址指定给内核。例如,使用 U-Boot,您可以:
bootz 0x80008000 0x82000000 0x81000000
这意味着:引导内核映像位于内存地址 0x80008000,并指定内核 initramfs 存档位于 0x82000000,DTB 文件位于 0x81000000。在这个例子中,它是一个 ARM 系统,但我的问题适用于所有系统。
当这三个文件加载到 RAM 中时,RAM 可能如下所示:
[...kkkkk..........iii.............dd............................... ... ..]
其中k
表示内核、i
initramfs、d
DTB 和.
未使用的空间。
initramfs 归档被提取到一个 ramfs 中,它需要分配内存页面才能存在。DTB 文件用于填充内部树,该树还为其数据结构分配页面。
内核在分配页面时如何避免覆盖内存中的 initramfs 和 DTB 文件?当不再需要原始数据时,这些文件所占用的物理页面是否在最终被释放之前被映射并标记为已使用?