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

问题描述 投票:4回答:1

我正在将kexec压缩成我编写的二进制文件,并将其编译为x86_64 ELF。运行正常。

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

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

kexecing之后,我想标识整个地址空间。为此,我需要在我知道物理地址的地址处构建一些页表结构,然后将该结构的地址写入CR3。

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

谢谢!

linux linux-kernel elf bootloader
1个回答
0
投票

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

简而言之:内核分配页表,arch/x86/kernel/machine_kexec_64.c函数将其初始化为身份映射。所以,是的,您的方案应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.