Multiboot 1 引导信息总大小

Multiboot 1 Boot Information total size

有没有快速可靠的方法找出内存中 Multiboot 1 引导信息的总大小?

澄清一下:我不是在问EBX寄存器中的值指向的结构的大小,我是在问内存中所有信息的总大小。

我目前正在研究 x86 Multiboot 1 兼容内核。该标准不保证 GRUB 将在何处放置此信息或其总大小。标准规定:

"The Multiboot information structure and its related substructures may be placed anywhere in memory by the boot loader (with the exception of the memory reserved for the kernel and boot modules, of course). It is the operating system’s responsibility to avoid overwriting this memory until it is done using it."

实际上,这似乎总是在最低的 1MB 内存中加载。 到目前为止,在引导期间,我使用最低 1MB 的标识映射初始化我的引导分页结构,以确保可以访问多重引导信息。找出这个结构的位置很简单,但我还没有找到任何关于找到准确尺寸的信息。 (最好不要遍历整个结构)。

从那以后我开始意识到多重引导信息结构指向的数据不能保证连续存储,并且不是 GRUB 加载到内存中的唯一数据。因此,如果不手动遍历结构,就没有可靠的方法来衡量此内存的总大小或位置。

鉴于此限制,似乎最好的做法是确保在实施分页之前将多重引导结构所需的所有数据复制到已知位置。