kexec'ing 到 ELF x86_64 二进制文件后页表的状态是什么?

What is the state of page tables after kexec'ing into an ELF x86_64 binary?

我正在 kexec'ing 到我编写的编译为 x86_64 ELF 的二进制文件中。运行良好。

由于它是 64 位二进制文​​件,我知道处理器必须处于 64 位长模式。这需要使用分页,所以我知道必须打开分页。

我的问题是,这些页面 table 的状态是什么?是否有某些区域(例如我加载的二进制文件)可以保证进行身份映射?是否映射了所有可用的 RAM 标识?由于启用了分页,页面在哪里?

在 kexec'ing 之后,我想对整个地址进行身份映射 space。为此,我需要在我知道物理地址的地址处构建一些页面 table 结构,然后将该结构的地址写入 CR3。

如果我知道加载到内存中的 elf 二进制文件是身份映射的,我可以在其中静态构建页面 tables,然后进行无缝切换。如果kexec后没有identity mapped pages,我就需要关闭paging,退出long mode,设置好,然后重新进入long 64-bit mode。

谢谢!

特定于 x86-64 的 kexec 进程部分在 arch/x86/kernel/machine_kexec_64.c 中处理。

简而言之:内核分配一个页面table,init_pgtable函数将其初始化为恒等映射。所以是的,你的方案应该有效。