kexec转换为ELF x86_64二进制文件后,页表的状态是什么?

Dav*_*son 5 linux elf linux-kernel bootloader

我将kexec压缩为一个二进制文件,并将其编写为x86_64 ELF。运行正常。

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

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

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

如果我知道加载到内存中的小精灵二进制文件是身份映射的,则可以在其中静态构建页表,然后进行无缝切换。如果kexec之后没有标识映射的页面,则需要关闭分页,退出long模式,然后进行设置,然后重新进入long 64位模式。

谢谢!

use*_*170 0

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

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